
    -i                        S SK r S SKrS SKrS SKJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S SKJrJrJr  S S	KJr  S S
KJr  S SKJrJrJrJr  \R>                  RA                  S\\45      S 5       r!\R>                  RA                  SSS//0S4SSS/SS//0S4SS/S //0S4/5      S 5       r"\R>                  RA                  SSS/5      S 5       r#S r$\R>                  RA                  S/ SQ5      \R>                  RA                  SSS/5      S 5       5       r%\R>                  RA                  S\&" SS5      5      \R>                  RA                  S \&" SS5      5      \R>                  RA                  SS!S"/5      \R>                  RA                  SS#S/5      S$ 5       5       5       5       r'\R>                  RA                  S%S&/S'S(/5      S) 5       r(\R>                  RA                  / S*QS!SS\RR                  " S S/SS+/S,S-//5      4S!S\RR                  " / S.Q5      \RR                  " SS/S/S+/S,S-//5      4S!S/S\RR                  " S S/SS,/S/S0/S,S-//5      4S"SS\RR                  " S S/SS/S,S-//5      4S"S\RR                  " / S.Q5      \RR                  " SS/SS+/S,S-//5      4/5      S1 5       r*\R>                  RA                  S%S&/S'S(/5      S2 5       r+S3 r,S4 r-\R>                  RA                  SSS/5      S5 5       r.\R>                  RA                  S%S&/S'S(/5      \R>                  RA                  S/ S6Q5      S7 5       5       r/S8 r0\R>                  RA                  S\&" SS5      5      \R>                  RA                  SS!S"/5      \R>                  RA                  S/ S9Q5      \R>                  RA                  S:S;S</5      S= 5       5       5       5       r1\R>                  RA                  S SS0/5      \R>                  RA                  S:S<S;/5      \R>                  RA                  SSS//5      \R>                  RA                  S/ S9Q5      \R>                  RA                  S>S;S</5      S? 5       5       5       5       5       r2\R>                  RA                  SSS@0SA4SSB0SA4SSC0SA4SSD0SE4/5      SF 5       r3\Rh                  " 5       SG 5       r5\R>                  RA                  SHSS<S;\6" SS5      4SS;S;\6" SS5      4SS<S<S S/4SS;S<S/4SIS<S;/ SJQ4SIS;S;SS/4SIS<S<S /4SIS;S</ 4/5      \R>                  RA                  SKS/\-   \-   5      SL 5       5       r7\Rh                  " 5       SM 5       r8\R>                  RA                  SHSS<S;\6" S S,5      4SS;S;\6" SS,5      4SS<S</ SNQ4SS;S</ SOQ4SPS<S;/ SQQ4SPS;S;/ SRQ4SPS<S<S S//4SPS;S<S//4SS<S;\6" SS5      4SS;S;\6" SS5      4SS<S</ SNQ4SS;S</ SOQ4SIS<S;/ SSQ4SIS;S;\6" SS5      4SIS<S<S S//4SIS;S<S//4STS<S;/ SUQ4STS;S;/ SVQ4STS<S<S /4STS;S</ 4/5      \R>                  RA                  SKS/\-   \-   5      SW 5       5       r9SX r:\R>                  RA                  / SYQSS<S;\;4SS<S;\;4SS<S;\Rx                  4SS<S;\Rz                  4SS;S;\Rz                  4SS;S<\Rz                  4S/S;S;\Rz                  4S/S;S<\Rz                  4/5      \R>                  RA                  SZ\5      S[ 5       5       r>\R>                  RA                  / SYQSS<S;\;4SS<S;\;4SS<S;\Rx                  4SS<S;\Rz                  4SS;S;\Rz                  4SS;S<\Rz                  4/5      \R>                  RA                  S\\5      S] 5       5       r?\R>                  RA                  S^/ S_Q5      \R>                  RA                  S`/ SaQ5      \R>                  RA                  SbS<S;/5      \R>                  RA                  S:S<S;/5      \R>                  RA                  S\\5      Sc 5       5       5       5       5       r@\R>                  RA                  / SYQSS<S;\Rx                  4SS<S;\Rz                  4SS;S;\Rz                  4SS;S<\Rz                  4/5      \R>                  RA                  S\\5      Sd 5       5       rA\R>                  RA                  / SeQ/ SfQ5      \R>                  RA                  S\\5      Sg 5       5       rB\R>                  RA                  S:Sb// ShQ5      \R>                  RA                  S\\5      Si 5       5       rC\R>                  RA                  / SjQ/ SkQ5      \R>                  RA                  S\\5      Sl 5       5       rD\R>                  RA                  SbS<S;/5      \R>                  RA                  S:S<S;/5      \R>                  RA                  S\\5      Sm 5       5       5       rE\R>                  RA                  SnSoSpS\;" \R                  " \R                  " \R                  5      R                  5      S-   5      4SqS\;" \R                  " \R                  " \R                  5      R                  5      5      4/5      \R>                  RA                  SbS<S;/5      \R>                  RA                  S:S<S;/5      \R>                  RA                  S\\5      Sr 5       5       5       5       rJ\R>                  RA                  SbS<S;/5      \R>                  RA                  S:S<S;/5      \R>                  RA                  S\\5      Ss 5       5       5       rK\R>                  RA                  St\\-   5      Su 5       rLSv rM\R>                  R                  \ R                  Sw:H  SxS<Sy9\R>                  RA                  S\\5      Sz 5       5       rPg){    N)assert_allcloseassert_array_equal)sparse)BSpline)random)LinearRegression)Pipeline)KBinsDiscretizerPolynomialFeaturesSplineTransformer)_get_sizeof_LARGEST_INT_t)assert_array_almost_equal)CSC_CONTAINERSCSR_CONTAINERSparse_version
sp_versionestc                 @   [         R                  " S5      R                  SS5      nS nU" U " 5       R                  U5      5      (       d   eU" U " SS9R                  U5      5      (       d   e[         R                  " U " SS9R                  U5      5      (       d   eg)	z+Test that output array has the given order.
         c                 B    [         R                  " U R                  5      $ )N)np	isfortranT)as    ^/var/www/html/venv/lib/python3.13/site-packages/sklearn/preprocessing/tests/test_polynomial.pyis_c_contiguous?test_polynomial_and_spline_array_order.<locals>.is_c_contiguous"   s    ||ACC      C)orderFN)r   arangereshapefit_transformr   )r   Xr   s      r   &test_polynomial_and_spline_array_orderr(      s     			"a#A! 35..q122223S>77:;;;;<<#44Q78888r    zparams, err_msgknots   z0Number of knots, knots.shape\[0\], must be >= 2.r   z*knots.shape\[1\] == n_features is violatedz(knots must be sorted without duplicates.c                     S/S//n[         R                  " [        US9   [        S0 U D6R	                  U5        SSS5        g! , (       d  f       g= f)zATest that we raise errors for invalid input in SplineTransformer.r*   r   matchN )pytestraises
ValueErrorr   fitparamserr_msgr'   s      r   (test_spline_transformer_input_validationr6   *   sA     qc
A	z	1#F#''* 
2	1	1   A
Aextrapolationcontinueperiodicc                     [         R                  " S5      R                  SS5      nSS/SS/SS/SS/SS//n[        S	X S
9R	                  U5      ng)zATest that SplineTransformer accepts integer value knot positions.   r   r   r   r*   r            )degreer)   r8   N)r   r$   r%   r   r&   )r8   r'   r)   _s       r   %test_spline_transformer_integer_knotsrB   :   s^     			"b!$AVaVaVb"XBx8E	mA r    c                  6   [         R                  " S5      R                  SS5      n [        SSSS9R	                  U 5      nUR                  5       n[        U/ SQ5        [        SSSS9R	                  U 5      nUR                  S	S
/5      n[        U/ SQ5        g)z<Test that SplineTransformer generates correct features name.r<   r   r   r?   T)n_knotsr@   include_bias)
x0_sp_0x0_sp_1x0_sp_2x0_sp_3x0_sp_4x1_sp_0x1_sp_1x1_sp_2x1_sp_3x1_sp_4Fr   b)a_sp_0a_sp_1a_sp_2a_sp_3b_sp_0b_sp_1b_sp_2b_sp_3N)r   r$   r%   r   r2   get_feature_names_outr   )r'   spltfeature_namess      r   %test_spline_transformer_feature_namesr\   D   s    
		"b!$AQqtDHHKD..0M	
  QquEII!LD..Sz:M		
r    )constantlinearr9   r:   r@   r?   c                 :   [         R                  " S5      R                  SS5      n[        XS9R	                  U5      nUR                  SS/5      n[        U5      UR                  :X  d   eUR                  U5      nUR                  S   [        U5      :X  d   eg)	zkTest feature names are correct for different extrapolations and degree.

Non-regression test for gh-25292.
r<   r   r   )r@   r8   r   rP   r*   N)
r   r$   r%   r   r2   rY   lenn_features_out_	transformshape)r8   r@   r'   rZ   r[   X_transs         r   7test_split_transform_feature_names_extrapolation_degreere   j   s     			"b!$AFHLLQOD..Sz:M}!5!5555nnQG==s=1111r    r   rD   uniformquantiler]   c                 b   [         R                  " SSS5      SS2S4   n[         R                  S//USSS2SS24   S//4   nUSSS2SS24   nUS:X  a  X-   n[        UU USUS9nUR	                  U5        XV4 H1  n[        [         R                  " UR                  U5      SS	9S5        M3     g)
zTest that B-splines are indeed a decomposition of unity.

Splines basis functions must sum up to 1 per row, if we stay in between boundaries.
r   r*   d   Nr   r:   T)rD   r@   r)   rE   r8   axis)r   linspacer_r   r2   r   sumrb   )r@   rD   r)   r8   r'   X_trainX_testrZ   s           r   +test_spline_transformer_unity_decompositionrq   }   s     	Aq#q$w'AeeaSE1SqS!V9se+,Gqt!tQwZF
""#D 	HHWt~~a0q91= r    bias	interceptTFFTc           
         [         R                  " SSS5      SS2S4   n[         R                  " USS2S4   5      S-   n[        S[	        SSU S	S
94S[        US94/S9nUR                  X#5        [        UR                  U5      USS9  g)z7Test that B-splines fit a sinusodial curve pretty well.r   r   ri   Nr   spline   r?   r]   rD   r@   rE   r8   olsfit_interceptstepsMbP?rtol)	r   rl   sinr	   r   r   r2   r   predict)rr   rs   r'   ypipes        r   )test_spline_transformer_linear_regressionr      s     	Ar34(A
qAw!A !!%",	 $9=>
D 	HHQNDLLOQT2r    )r)   rD   sample_weightexpected_knots         )r   r   r*   r*   r   r?   r*      r   c           
          [         R                  " SS/SS/SS/SS/SS/SS/SS//5      n[        R                  " X@XS	9n[	        XS5        g
)zJCheck the behaviour to find knot positions with and without sample_weight.r   r   r?   r   r   r   r   r   )r'   r)   rD   r   N)r   arrayr   _get_base_knot_positionsr   )r)   rD   r   r   r'   
base_knotss         r   /test_spline_transformer_get_base_knot_positionsr      s\    0 	1a&1a&1a&1a&1a&1a&1b'JKA";;
'J J/r    c           
      v   S n[         R                  " SSS5      SS2S4   n[        S[        SSU S	S
94S[	        US94/S9nUR                  X2" USS2S4   5      5        [         R                  " SSS5      SS2S4   nUR                  U5      n[        Xb" USS2S4   5      SSS9  [        USS USS SS9  g)z5Test that B-splines fit a periodic curve pretty well.c                     [         R                  " S[         R                  -  U -  5      [         R                  " S[         R                  -  U -  5      -
  S-   $ )Nr   r   r?   )r   r   pi)xs    r   f=test_spline_transformer_periodic_linear_regression.<locals>.f   s<    vva"%%i!m$rvva"%%i!m'<<q@@r    r   r*   e   Nrw   r<   r?   r:   ry   rz   r{   r}   r   i-  g{Gz?)atolr   ri      r   r   )r   rl   r	   r   r   r2   r   r   )rr   rs   r   r'   r   X_predictionss          r   2test_spline_transformer_periodic_linear_regressionr      s    
A 	Aq#q$w'A !!%",	 $9=>
D 	HHQ!AqD'
 
RC	 D	)B,,r"KK2ad84dCK#&C(<4Hr    c                  F   [         R                  " SSS5      SS2S4   n Sn[        USS/S/S	//S
9nUR                  U 5      n[         R                  " S	S/SS	/S	S/SS	//5      n[        [         R                  " SS5      XAS5      nU" U SS2S4   5      n[        X65        g)z@Test that the backport of extrapolate="periodic" works correctlyg      @r   Nr   r:   g                    ?r@   r8   r)   r   r   )r   rl   r   r&   r   r   r$   r   )r'   r@   transformerXtcoefsplXspls          r   0test_spline_transformer_periodic_spline_backportr      s    
BR D)AF $Zu7MK 
	"	"1	%B 88c3Z#sc3Z#sDED
"))B"D*
=CqAw<DBr    c            
      
   [         R                  " SSS5      SS2S4   n [        SSS/S/S	/S
/S/S//S9n[        SSS/S	/S
/S/S/S//S9nUR                  U 5      nUR                  U 5      n[	        X4SS2/ SQ4   5        g)zJTest if shifted knots result in the same transformation up to permutation.r   r   r   Nr?   r:   r   r         @      @      @       @r   g      "@)r   r   r*   r   r?   )r   rl   r   r&   r   )r'   transformer_1transformer_2Xt_1Xt_2s        r   4test_spline_transformer_periodic_splines_periodicityr     s    
Ar34(A% usecUSEC53%8M & usecUSEC53%8M &&q)D&&q)DDq/123r    c           
      *   [         R                  " SSS5      SS2S4   n[        U SS/S/S/S	/S
/S//S9nUR                  U5      nUR	                  5       UR                  5       -
  [        U5      -  nSU-  nUn[        SU S-   5       HF  n[         R                  " USS9n[         R                  " U5      R	                  5       U:  d   eX-  nMH     [         R                  " USS9n[         R                  " U5      R	                  5       S:  d   eg)z?Test that spline transformation is smooth at first / last knot.r   r   i'  Nr:   r   r   r   r   r   r   r   r*   r   rj   )
r   rl   r   r&   maxminr`   rangediffabs)	r@   r'   r   r   deltatoldXtdr   s	            r   3test_spline_transformer_periodic_splines_smoothnessr     s    	BF#AtG,A# usecUSEC53%8K
 
	"	"1	%BUUWquuw#a&(E
u*C
C 1fqj!wws#vvd|!C'''l " 773QD66$<!!!r    )r*   r   r?   r   r   c           
         [         R                  " SSS5      SS2S4   nUR                  5       n[        S[	        SUU SS9/S	[        US
9//5      nUR                  X45        [        UR                  S/S//5      SS/5        [        S[	        SUU SS9/S	[        US
9//5      nUR                  X45        [        UR                  S/S//5      SS/5        [	        SX SS9nUR                  U5        Sn[        R                  " [        US9   UR                  S//5        SSS5        [        R                  " [        US9   UR                  S//5        SSS5        g! , (       d  f       ND= f! , (       d  f       g= f)z1Test that B-spline extrapolation works correctly.r   r*   ri   Nrw   r   r]   ry   rz   r{   ir   r^   error0X contains values beyond the limits of the knotsr,   )r   rl   squeezer	   r   r   r2   r   r   r/   r0   r1   rb   )rr   rs   r@   r'   r   r   rZ   msgs           r   %test_spline_transformer_extrapolationr   ?  s~   
 	B34(A			A  !!!%",	 $9=>	
D 	HHQNDLL3%!.Q8  !!!%"*	 $9=>	
D 	HHQNDLL3%!.a9 &7D 	HHQK
<C	z	-w 
.	z	-u 
.	- 
.	-	-	-s   E!E2!
E/2
F c                    [         R                  R                  U 5      nUR                  S5      R	                  SS5      nSnUS-   n[        USSSS9nUR                  U5      n[        USSS	S
9nUR                  U5      n[        XhSS9  g)zCTest that a B-spline of degree=0 is equivalent to KBinsDiscretizer.r   r*   r   r   rg   T)rD   r@   r)   rE   zonehot-denseaveraged_inverted_cdf)n_binsencodestrategyquantile_methodgvIh%<=r   N)	r   r   RandomStaterandnr%   r   r&   r
   r   )	global_random_seedrngr'   r   rD   rZ   splineskbdkbinss	            r   'test_spline_transformer_kbindiscretizerr   w  s    
))

 2
3C		#sA&AFqjG$D   #G
/	C a E G/r    )r   r]   r^   r9   r:   rE   FTc                 B   [         R                  R                  U5      nUR                  S5      R	                  SS5      n[        U UUUSS9n[        U UUUSS9nUR                  U5        UR                  U5        UR                  U5      n	UR                  U5      n
[        R                  " U	5      (       a  U	R                  S:X  d   e[        XR                  5       5        [         R                  " USS	9n[         R                  " USS	9n[         R                  [         R                   " US-
  US
5      [         R                   " XS-   S
5      4   nUS:X  ak  Sn["        R$                  " [&        US9   UR                  U5        S S S 5        Sn["        R$                  " [&        US9   UR                  U5        S S S 5        g [        UR                  U5      UR                  U5      R                  5       5        g ! , (       d  f       N}= f! , (       d  f       g = f)Nr   (   r   F)r@   r)   r8   rE   sparse_outputTcsrr   rj   r   r   r   r,   zOut of bounds)r   r   r   r   r%   r   r2   rb   r   issparseformatr   toarrayaminamaxrm   rl   r/   r0   r1   )r@   r)   r8   rE   r   r   r'   
splt_densesplt_sparseX_trans_sparseX_trans_denseX_minX_maxX_extrar   s                  r   %test_spline_transformer_sparse_outputr     s    ))

 2
3C		#r1%A"#!J $#!K NN1OOA **1-N((+M??>**~/D/D/MMMM#9#9#;< GGAAEGGAAEee
EAIub)2;;uai+LLG @]]:S1  ) 2]]:S1!!'* 21 	  );+@+@+I+Q+Q+S	
 21 21s   6G?+H?
H
Hr   c                     [        U UUUUS9n[        R                  " SSS5      SS2S4   nUR                  U5        UR	                  U5      R
                  S   UR                  :X  d   eg)z8Test that transform results in n_features_out_ features.)rD   r@   rE   r8   r   r   r*   r   N)r   r   rl   r2   rb   rc   ra   )rD   rE   r@   r8   r   rZ   r'   s          r   &test_spline_transformer_n_features_outr     sm     !##D 	Aq"ag&AHHQK>>!""1%)=)====r    )r   r   z&degree=\(min_degree, max_degree\) must)r   g      ?r?   r   )r*   r   r?   z'int or tuple \(min_degree, max_degree\)c                     S/S//n[         R                  " [        US9   [        S0 U D6R	                  U5        SSS5        g! , (       d  f       g= f)zBTest that we raise errors for invalid input in PolynomialFeatures.r*   r   r,   Nr.   )r/   r0   r1   r   r2   r3   s      r   )test_polynomial_features_input_validationr     sA     qc
A	z	1$V$((+ 
2	1	1r7   c                      [         R                  " S5      S S 2[         R                  4   n [         R                  " [         R                  " U 5      X S-  U S-  /5      nX4$ )Nr   r   r?   )r   r$   newaxishstack	ones_like)r'   Ps     r   single_feature_degree3r     sH    
		!Q

]#A
		2<<?A!tQT23A4Kr    z/degree, include_bias, interaction_only, indicesr   r?   )r   r   r?   X_containerc                 F   U u  pgUb  U" U5      n[        XUS9R                  U5      nUR                  U5      n	Ub  U	R                  5       n	[	        XSS2U4   5        UR
                  S:  a3  UR                  R                  UR
                  UR                  4:X  d   egg)z9Test PolynomialFeatures on single feature up to degree 3.Nr@   rE   interaction_onlyr   	r   r2   rb   r   r   n_output_features_powers_rc   n_features_in_)
r   r@   rE   r   indicesr   r'   r   tfouts
             r   $test_polynomial_features_one_featurer     s    . "DAN	CS
	c!f  ,,q/CkkmC1g:'	q zzB$9$92;L;L#MMMM !r    c                  r   [         R                  " S5      R                  S5      n U S S 2S S24   nU S S 2SS 24   n[         R                  " US-  US-  -  US-  US-  -  US-  US-  -  US-  US-  -  US-  US-  -  US-  US-  -  US-  US-  -  US-  US-  -  US-  US-  -  US-  US-  -  /
5      nX4$ )Nr   r   r*   r   r   r?   )r   r$   r%   r   )r'   x1x2r   s       r   two_features_degree3r     s    
		!V$A	
1bqb5B	
1ab5B
		EBEMEBEMEBEMEBEMEBEMEBEMEBEMEBEMEBEMEBEM	
	A 4Kr    )r   r*   r   r   )r*   r   r   r   r   )r   r?   r   r   )r?   r   r   )r   r?   r   r   r      r   	   r?   r?   )r   r   r  r   r  )r   r  r   r  c                 F   U u  pgUb  U" U5      n[        XUS9R                  U5      nUR                  U5      n	Ub  U	R                  5       n	[	        XSS2U4   5        UR
                  S:  a3  UR                  R                  UR
                  UR                  4:X  d   egg)z5Test PolynomialFeatures on 2 features up to degree 3.Nr   r   r   )
r   r@   rE   r   r   r   r'   r   r   r   s
             r   %test_polynomial_features_two_featuresr  1  s    F  DAN	CS
	c!f  ,,q/CkkmC1g:'	q zzB$9$92;L;L#MMMM !r    c                     [         R                  " S5      R                  SS5      n [        SSS9R	                  U 5      nUR                  5       n[        / SQU5        [        U5      UR                  U 5      R                  S   :X  d   e[        SS	S9R	                  U 5      nUR                  / S
Q5      n[        / SQU5        [        U5      UR                  U 5      R                  S   :X  d   e[        SS	S9R	                  U 5      nUR                  / S
Q5      n[        / SQU5        [        U5      UR                  U 5      R                  S   :X  d   e[        SSSS9R	                  U 5      nUR                  / S
Q5      n[        SS/U5        [        U5      UR                  U 5      R                  S   :X  d   e[        SSS9R	                  U 5      nUR                  / SQ5      n[        / SQU5        g )N   r   r?   r   Tr@   rE   )
1x0r   r   zx0^2zx0 x1zx0 x2zx1^2zx1 x2zx2^2r*   F)r   rP   c)r   rP   r  a^2a ba cb^2b cc^2a^3a^2 ba^2 ca b^2a b ca c^2b^3b^2 cb c^2c^3r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r
  r  )F40D   ☮   א)r
  r  r  r  )
r   r$   r%   r   r2   rY   r   r`   rb   rc   )r'   polyr[   s      r   test_polynomial_feature_namesr!  b  s   
		"b!$AQT:>>qAD..0MR }!2!8!8!;;;;QU;??BD..?M	
* 	-0 }!2!8!8!;;;;V%@DDQGD..?M	
$ 	'* }!2!8!8!;;;;D4	c!f 	 ..?MW~}5}!2!8!8!;;;; QT:>>qAD../QRM>Nr    )degrE   r   dtypecsc_containerc                    [         R                  R                  U5      nUR                  SSS5      nU" U5      n[	        XUS9n	U	R                  UR                  U5      5      n
U	R                  UR                  U5      5      n[        R                  " U
5      (       a  U
R                  S:X  d   eU
R                  UR                  :X  d   e[        U
R                  5       U5        g )Nr   r   ri   r   rE   r   cscr   r   r   randintr   r&   astyper   r   r   r#  r   r   )r"  rE   r   r#  r$  r   r   r'   X_cscr   Xt_cscXt_denses               r   test_polynomial_features_csc_Xr/    s    " ))

 2
3CAq(#A!E
9IC u||E23F  %1H??6""v}}'===<<8>>)))fnn.9r    csr_containerc                    [         R                  R                  U5      nUR                  SSS5      nU" U5      n[	        XUS9n	U	R                  UR                  U5      5      n
U	R                  UR                  USS95      n[        R                  " U
5      (       a  U
R                  S:X  d   eU
R                  UR                  :X  d   e[        U
R                  5       U5        g )Nr   r   r&  r'  F)copyr   r)  )r"  rE   r   r#  r0  r   r   r'   X_csrr   Xt_csrr.  s               r   test_polynomial_features_csr_Xr5    s     ))

 2
3CAq(#A!E
9IC u||E23F  %e!<=H??6""v}}'===<<8>>)))fnn.9r    
n_features)r*   r   r   zmin_degree, max_degree))r   r*   )r   r   )r*   r?   )r   r   )r?   r   r   c                     U" S/S/U S-
  /445      n[        UUUS9nUR                  U5        UR                  n[         R                  " U SUUUS9n	U[	        U	 V
s/ s H  n
SPM     sn
5      :X  d   egs  sn
f )z7
Test that n_output_features_ is calculated correctly.
r*   r   )r@   r   rE   r6  
min_degree
max_degreer   rE   N)r   r2   r   _combinationsrn   )r6  r9  r:  r   rE   r0  r   r   
num_comboscombosrA   s              r   test_num_combinationsr>    s     	saS:>"2345A
)!C
 GGAJ''J--)!F 0Aa011110s   A6
c           	         U" [        SSSUS95      nUR                  5       n[        XUS9nUR                  UR	                  U5      5      n	UR                  UR	                  U5      5      n
[
        R                  " U	5      (       a  U	R                  S:X  d   eU	R                  U
R                  :X  d   e[        U	R                  5       U
5        g )N  r         ?random_stater'  r   )
sparse_randomr   r   r&   r+  r   r   r   r#  r   )r"  rE   r   r#  r0  r   r3  r'   r   r4  r.  s              r   %test_polynomial_features_csr_X_floatsrE    s     -b#DVWXEA
9IC u||E23F  %1H??6""v}}'===<<8>>)))fnn.9r    )zero_row_indexr"  r   ))r   r   T)r*   r   Tr   r   T)r   r?   T)r*   r?   T)r   r?   T)r   r   F)r*   r   Fr   r   F)r   r?   F)r*   r?   F)r   r?   Fc           	      x   U" [        SSSUS95      nSXPS S 24'   UR                  5       n[        USUS9nUR                  U5      nUR                  U5      n	[        R
                  " U5      (       a  UR                  S:X  d   eUR                  U	R                  :X  d   e[        UR                  5       U	5        g )	Nr?   r   r   rB  r   Fr'  r   	rD  r   r   r&   r   r   r   r#  r   )
rF  r"  r   r0  r   r3  r'   r   r4  r.  s
             r   'test_polynomial_features_csr_X_zero_rowrK  '  s    * -2sASTUE"E!
A
SuGW
XCu%F  #H??6""v}}'===<<8>>)))fnn.9r    ))TTrt   ru   )FFc           	      f   U" [        SSSUS95      nUR                  5       n[        SXS9nUR                  U5      nUR                  U5      n[        R
                  " U5      (       a  UR                  S:X  d   eUR                  UR                  :X  d   e[        UR                  5       U5        g )Nr@  r   rA  rB  r   r'  r   rJ  )	rE   r   r0  r   r3  r'   r   r4  r.  s	            r   'test_polynomial_features_csr_X_degree_4rM  K  s     -b#DVWXEA
	C u%F  #H??6""v}}'===<<8>>)))fnn.9r    )r"  dimr   )
)r   r*   TrG  )r?   r*   T)r?   r   T)r?   r?   T)r   r*   FrH  )r?   r*   F)r?   r   F)r?   r?   Fc           	      d   U" [        SUSUS95      nUR                  5       n[        XS9nUR                  U5      nUR                  U5      n	[        R
                  " U5      (       a  UR                  S:X  d   eUR                  U	R                  :X  d   e[        UR                  5       U	5        g )Nr@  rA  rB  )r   r   rJ  )
r"  rN  r   r0  r   r3  r'   r   r4  r.  s
             r   (test_polynomial_features_csr_X_dim_edgesrP  a  s    & dC3EFE 	A
S
DCu%F  #H??6""v}}'===<<8>>)))fnn.9r    c           
        ^  U 4S jnSnSn[         R                  n[         R                  " SS[         R                  S9n[         R                  " US-
  US-
  US-
  US-
  /5      n[         R                  " US-
  US-
  US-
  US-
  /[         R                  S9n	U" XxU	44XE4US9n
[        T USS	9nUR                  US
SUR                  UR                  S9nU[         R                  " [         R                  5      R                  :  a6  Sn[        R                  " [        US9   UR                  U
5        SSS5        gUR!                  U
5      nUR#                  5       u  nnXQ-   nU" XY[%        T (       + 5         U	S   5      U-   nU(       a	  S/US-
  -  O/ nU(       a	  S
/US-
  -  O/ n['        S5       GH  nUSU-     nUSU-  S-      nU	SU-     nU	SU-  S-      nU(       a"  UR)                  S5        UR)                  S
5        UR+                  UU/5        UR+                  U[%        U5      -   U[%        U5      -   /5        T (       dT  UR+                  UU-  UU-  UU-  /5        UR+                  U" UUU5      U-   U" UUU5      U-   U" UUU5      U-   /5        M  UR+                  UU-  /5        UR)                  U" UUU5      U-   5        GM      [%        U5      S-   S[%        T (       + 5      -  -   nUR,                  US-   :X  d   eUR.                  U:X  d   eUR0                  UUS-   4:X  d   eUR2                  R.                  UR4                  R.                  s=:X  a  [         R                  :X  d   e   eUR4                  R                  5       [         R                  " [         R6                  5      R                  :  d   eU(       a  [9        ['        US-
  5      5      O/ nUR+                  US-
  /U-  US-
  /U-  -   5        [;        UR<                  U5        [?        UU5        [?        UU5        g! , (       d  f       g= f)a  Check the automatic index dtype promotion to `np.int64` when needed.

This ensures that sufficiently large input configurations get
properly promoted to use `np.int64` for index and indptr representation
while preserving data integrity. Non-regression test for gh-16803.

Note that this is only possible for Python runtimes with a 64 bit address
space. On 32 bit platforms, a `ValueError` is raised instead.
c                 j   > T(       a  X-  US-  SU-  -   S-  -
  S-
  U-   $ X-  US-  U-   S-  -
  U-   $ )Nr   r?   r*   r.   )r   ijr   s      r   degree_2_calcRtest_csr_polynomial_expansion_index_overflow_non_regression.<locals>.degree_2_calc  sL    5AqD1q5LQ..2Q665AqD1H?*Q..r       i r*   r   r#  r   )rc   r#  r   rE   r@   r   r8  tThe output that would result from the current configuration would have \d* features which is too large to be indexedr,   Nr?   ) r   float32r$   int64r   r   _num_combinationsr   rE   iinfointpr   r/   r0   r1   r2   r&   nonzerointr   appendextendr   r#  rc   indptrr   int32listr   datar   )r   rE   r0  rU  	n_samplesr6  
data_dtyperg  rowcolr'   pfnum_combinationsr   rd   row_nonzerocol_nonzeron_degree_1_features_outmax_degree_2_idxdata_targetcol_nonzero_targetrS  r   r   x_idxy_idxnnz_per_rowrow_nonzero_targets   `                           r   ;test_csr_polynomial_expansion_index_overflow_non_regressionrx    sG    / IJJ99Q*D
((IM9q=)a-QO
PC ((	aaaaHPRPXPXC 		Sz%	A
 
)Q
B ++,,__ ,  "((277+///> 	 ]]:S1FF1I 2q!G&0K(7jc.>*>&?"@#a&I
!	"  ,81#Q'RK2>!	A.B1XQKQOAE
AEAIq!%%a(Aq6"!!S&&L0A(AB	
  Aq1ua!e45%%!*eU;>UU!*eU;>UU!*eU;>UU Aw'%%j%7:QQ/ 6 l#a'!c6F2F.G*GGK  $4q$8888==J&&&==Y(81(<====>>7??#8#8DBHHDDDDD?? 288BHH#5#9#99997CeIM23	Q+%Q+(EE GLL+.{$67{$67w 21s   $P==
Qzdegree, n_features)r     )r?   i(	  )r?   ry  c                 8   S/nUS-
  [         R                  " [         R                  5      R                  ::  a  [         R                  O[         R                  n[         R
                  " S/US9n[         R
                  " US-
  /US9nUS-
  [        U5      -   /n	U	R                  XS-   -  S-  U	S   -   5        U	R                  XS-   -  US-   -  S-  U	S   -   5        U" XWU445      n
[        X#U S9nUR                  USU UR                  UR                  S9nU[         R                  " [         R                  5      R                  :  a6  S	n[        R                  " [        US
9   UR!                  U
5        SSS5        g["        [%        S5      :  aI  US:X  aC  U S:X  a=  U(       d6  Sn[        R                  " [        US
9   UR'                  U
5      nSSS5        gUR'                  U
5      nU[         R                  " [         R                  5      R                  :  a  [         R                  O[         R                  nSU S-
  [        U(       + 5      -  -   n[        U5      U-   nUR(                  U
R(                  :X  d   eUR*                  SUR,                  4:X  d   eUR.                  R(                  UR0                  R(                  s=:X  a  U:X  d   e   eUR2                  U:X  d   eU(       a  US   [        R4                  " S5      :X  d   e[7        U5       H'  nUSU	U   4   [        R4                  " S5      :X  a  M'   e   X!-  nU S:X  a  USU-   -  nUR,                  XS-
     S-   U-
  :X  d   eg! , (       d  f       g= f! , (       d  f       g= f)zTests known edge-cases to the dtype promotion strategy and custom
Cython code, including a current bug in the upstream
`scipy.sparse.hstack`.
r   r*   r   rX  r   r   rY  r8  rZ  r,   Nz1.9.2ry  z>In scipy versions `<1.9.2`, the function `scipy.sparse.hstack`r   r   r?   )r   r^  re  r   r\  r   ra  rb  r   r]  r   rE   r_  r/   r0   r1   r2   r   r   r&   r#  rc   r   rd  r   nnzapproxr   )r@   r6  r   rE   r0  rg  indices_dtyperj  rk  expected_indicesr'   rl  rm  r   rd   expected_dtypenon_bias_termsexpected_nnzidxoffsets                       r   ,test_csr_polynomial_expansion_index_overflowr    sJ   4 5D *Q"((2882D2H2H HBHHbhhM
((A3m
,C
((JN#=
9C 	Q\** Jq.9Q>AQRSATTU1n%a8A=@PQR@SS 	t3Z()A	)V
B ++,,__ ,  "((277+///> 	 ]]:S1FF1I 2 	]7++%aK O]]:S1&&q)G 2q!G!1BHHRXX4F4J4J!JRXXPRPXPXN&1*0@,@(AAAN|$~5L==AGG###==Q 5 56666>>7??#8#8JNJJJJJ;;,&&&t}c 2222^$q*3//0FMM#4FFFF % *F{!j.   $4aZ$@1$Dv$MMMMM 21 21s   'M:N:
N
Nc                    [         R                  " [         R                  5      R                  S-  nS/nS/nUS-
  /nU" XEU445      n[	        XSS9nSn	[
        R                  " [        U	S9   UR                  U5        S S S 5        [
        R                  " [        U	S9   UR                  U5        S S S 5        g ! , (       d  f       NB= f! , (       d  f       g = f)	Nr   r   r   r*   r  rY  rZ  r,   )
r   r^  r\  r   r   r/   r0   r1   r2   r&   )
r   rE   r0  r6  rg  rj  rk  r'   rl  r   s
             r   0test_csr_polynomial_expansion_too_large_to_indexr  ^  s     "((#''1,J5D#C>
Ct3Z()A	)V
B	6  
z	-
q	 
.	z	-
 
.	- 
.	-	-	-s   .B<!C<
C

Csparse_containerc                 z   [         R                  " S5      n[        SSS9nSn[        R                  " [
        US9   UR                  U5        SSS5        [        SSS9nS	n[        R                  " [
        US9   UR                  U5        SSS5        X" U5      4 Hx  n[        SS
S9nUR                  U5      n[        R                  " U5      (       a  UR                  5       n[        U[         R                  " UR                  S   S45      5        Mz     g! , (       d  f       N= f! , (       d  f       N= f)zCheck that PolynomialFeatures raises error when degree=0 and include_bias=False,
and output a single constant column when include_bias=True
)r   r   r   Fr	  zWSetting degree to zero and include_bias to False would result in an empty output array.r,   Nr{  zoSetting both min_degree and max_degree to zero and include_bias to False would result in an empty output array.Tr*   )r   onesr   r/   r0   r1   r&   r   r   r   r   rc   )r  r'   r   r5   _Xoutputs         r   1test_polynomial_features_behaviour_on_zero_degreer  v  s   
 	AQU;D	"  
z	11 
2 V%@D	8  
z	11 
2 "1%&!>##B'??6""^^%F6277AGGAJ?#;< ' 
2	1 
2	1s   D;D,
D),
D:c                      [         R                  S:X  d(  [         R                  S::  a  [         R                  S:w  a  Sn OSn [        5       U :X  d   eg )Nwin32        
emscriptenr      )sysplatformmaxsizer   )expected_sizes    r   test_sizeof_LARGEST_INT_tr    sB     ||wu!=$&-777r    r  zyOn Windows, scikit-learn is typically compiled with MSVC that does not support int128 arithmetic (at the time of writing))reasonrunc                    [        [        R                  " [        R                  5      R                  S-  S-   5      nS/nS/nUS-
  /nUS-
  /nUR                  [        XS-   -  S-  US   -   5      5        UR                  [        XS-   -  US-   -  S-  US   -   5      5        U " X#U445      n[        SSSS	9n[        R                  S
::  a6  Sn[        R                  " [        US9   UR                  U5        S S S 5        g UR                  U5      n	[        S5       H&  n
U	SXZ   4   [        R                  " S5      :X  a  M&   e   g ! , (       d  f       g = f)NgUUUUUU?r?   r   r   r*   r   r   FrY  r  rZ  r,   )ra  r   r^  r\  r   rb  r   r  r  r/   r0   r1   r&   r   r}  )r0  r6  rg  rj  rk  r  r'   rl  r   rd   r  s              r   *test_csr_polynomial_expansion_windows_failr    si    RXXbhh'++6:;J5D#C>
C 	Q Jq.)Q.1A!1DDE Jq.)Z!^<ADTUVDWWX 	t3Z()A	Uq	QB
{{e: 	
 ]]:S1Q 21 ""1%8C1.334c8JJJJ 	 21s   +E
E)Qr  numpyr   r/   numpy.testingr   r   scipyr   scipy.interpolater   scipy.sparser   rD  sklearn.linear_modelr   sklearn.pipeliner	   sklearn.preprocessingr
   r   r   /sklearn.preprocessing._csr_polynomial_expansionr   sklearn.utils._testingr   sklearn.utils.fixesr   r   r   r   markparametrizer(   r6   rB   r\   re   r   rq   r   r   r   r   r   r   r   r   r   r   r   r   fixturer   slicer   r   r  r!  ra  r[  float64r/  r5  r>  rE  rK  rM  rP  rx  sqrtr^  r\  r   r  r  r  r  xfailr  r  r.   r    r   <module>r     si   
   =  % 0 1 % 
 =  !35F GH	9 I	9 
QC5	NO
QFQF#	$&ST
QC!:	 JK++ :z*BC D#L 2 Aq6*2 +	
2 5A;/E!QK09j"9::z*BC> D ; 1 0>2 &+.0NO3 P3, ;	AtRXX1v1v2w&?@AHH*+HHq!fq!fq"g./		
 
AtRXX1v1v2wB&HIJ	QbhhAAB'@ABHH*+HHq!fq!fq"g./		
(0)(0 &+.0NOI PI>$4, Aq6*#" +#"L &+.0NO?33 4 P3l02 5A;/9j"9:L %7-
 8 ; 0-
` QG,$7Aq6*L 5$-8> 9 + 8 ->" 
G	GH
H	HI
F	FG
I	 JK	,,   5	
D%tT*+	
E5%4.)	
D$A	
E4!	ui(	1v&	taS!	b!	 (?.(PQN RN.  * 5	
D%q!%	
E5%1+&	
D$%	
E4#	ul+	y)	taV$	qc"	
D%tT*+	
E5%4.)	
D$%	
E4#	u67	uQ~.	taV$	qc"	uo.	|,	taS!	b!)2 (?.(PQN R34N.IOX 8	
D%	
D%	
D%$	
D%$	
E5"**%	
E4$	
E5"**%	
E4$	 .9: ::$ 8	
D%	
D%	
D%$	
D%$	
E5"**%	
E4$
 .9: :
:$ y1F +dE];$7.92 : 8 < 222 8	
D%$	
D%$	
E5"**%	
E4$	 .9: ::" 1" .9: :#$:$ '(@ .9: :	
:" & .9: : :" +dE];$7.9o8 : 8 <o8d  	 
C*../!345 
C*../01  +dE];$7.9QN : 8 <!&QNh +dE];$7.9 : 8 <* +^n-LM= N=<8 LLG	6 	   .9"K :"Kr    