
    >[gj                     <   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZmZ d d
lmZ d dlmZmZmZm Z  ejB                  jE                  deef      d        Z#ejB                  jE                  dddggidfdddgddggidfddgd ggidfg      d        Z$ejB                  jE                  dddg      d        Z%d Z&ejB                  jE                  dg d      ejB                  jE                  dddg      d               Z'ejB                  jE                  d e(dd            ejB                  jE                  d  e(dd            ejB                  jE                  dd!d"g      ejB                  jE                  dd#dg      d$                             Z)ejB                  jE                  d%d&gd'd(g      d)        Z*ejB                  jE                  g d*d!dd ejV                  d dgdd+gd,d-gg      fd!d ejV                  g d.       ejV                  ddgd/d+gd,d-gg      fd!d/d ejV                  d dgdd,gd/d0gd,d-gg      fd"dd ejV                  d dgddgd,d-gg      fd"d ejV                  g d.       ejV                  ddgdd+gd,d-gg      fg      d1        Z,ejB                  jE                  d%d&gd'd(g      d2        Z-d3 Z.d4 Z/ejB                  jE                  dddg      d5        Z0ejB                  jE                  d%d&gd'd(g      ejB                  jE                  dg d6      d7               Z1d8 Z2ejB                  jg                  e  ed9      k  d:;      ejB                  jE                  d e(dd            ejB                  jE                  dd!d"g      ejB                  jE                  dg d<      ejB                  jE                  d=d>d?g      d@                                    Z4ejB                  jg                  e  ed9      k\  d:;      dA        Z5ejB                  jE                  d dd0g      ejB                  jE                  d=d?d>g      ejB                  jE                  ddd/g      ejB                  jE                  dg d<      ejB                  jE                  dBd>d?g      dC                                    Z6ejB                  jE                  dddDidEfddFidEfddGidEfddHidIfg      dJ        Z7 ejp                         dK        Z9ejB                  jE                  dLdd?d> e:dd      fdd>d> e:dd      fdd?d?d dgfdd>d?dgfdMd?d>g dNfdMd>d>ddgfdMd?d?d gfdMd>d?g fg      ejB                  jE                  dOdgez   ez         dP               Z; ejp                         dQ        Z<ejB                  jE                  dLdd?d> e:d d,      fdd>d> e:dd,      fdd?d?g dRfdd>d?g dSfdTd?d>g dUfdTd>d>g dVfdTd?d?d d/gfdTd>d?d/gfdd?d> e:dd      fdd>d> e:dd      fdd?d?g dRfdd>d?g dSfdMd?d>g dWfdMd>d> e:dd      fdMd?d?d d/gfdMd>d?d/gfdXd?d>g dYfdXd>d>g dZfdXd?d?d gfdXd>d?g fg      ejB                  jE                  dOdgez   ez         d[               Z=d\ Z>ejB                  jE                  g d]dd?d>e?fdd?d>e?fdd?d>ej                  fdd?d>ej                  fdd>d>ej                  fdd>d?ej                  fd/d>d>ej                  fd/d>d?ej                  fg      ejB                  jE                  d^e      d_               ZBejB                  jE                  g d]dd?d>e?fdd?d>e?fdd?d>ej                  fdd?d>ej                  fdd>d>ej                  fdd>d?ej                  fg      ejB                  jE                  d`e      da               ZCejB                  jE                  dbg dc      ejB                  jE                  ddg de      ejB                  jE                  dfd?d>g      ejB                  jE                  d=d?d>g      ejB                  jE                  d`e      dg                                    ZDejB                  jE                  g d]dd?d>ej                  fdd?d>ej                  fdd>d>ej                  fdd>d?ej                  fg      ejB                  jE                  d`e      dh               ZEejB                  jE                  g dig dj      ejB                  jE                  d`e      dk               ZFejB                  jE                  d=dfgg dl      ejB                  jE                  d`e      dm               ZGejB                  jE                  g dng do      ejB                  jE                  d`e      dp               ZHejB                  jE                  dfd?d>g      ejB                  jE                  d=d?d>g      ejB                  jE                  d`e      dq                      ZIejB                  jE                  drdsdtd e? ej                   ej                  ej                        j                        dz         fdud e? ej                   ej                  ej                        j                              fg      ejB                  jE                  dfd?d>g      ejB                  jE                  d=d?d>g      ejB                  jE                  d`e      dv                             ZNejB                  jE                  dfd?d>g      ejB                  jE                  d=d?d>g      ejB                  jE                  d`e      dw                      ZOejB                  jE                  dxeez         dy        ZPdz ZQejB                  j                  e j                  d{k(  d|d?}      ejB                  jE                  d`e      d~               ZTy)    N)assert_allcloseassert_array_equal)sparse)BSpline)random)LinearRegression)Pipeline)KBinsDiscretizerPolynomialFeaturesSplineTransformer)_calc_expanded_nnz_calc_total_nnz_get_sizeof_LARGEST_INT_t)assert_array_almost_equal)CSC_CONTAINERSCSR_CONTAINERSparse_version
sp_versionestc                 *   t        j                  d      j                  dd      }d } | |        j                  |            sJ  | | d      j                  |            sJ t        j                   | d      j                  |            sJ y)	z+Test that output array has the given order.
         c                 @    t        j                  | j                        S )N)np	isfortranT)as    f/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/preprocessing/tests/test_polynomial.pyis_c_contiguousz?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3S>77:;;;<<#44Q7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                     dgdgg}t        j                  t        |      5  t        di | j	                  |       ddd       y# 1 sw Y   yxY w)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_validationr8   ,   sA     qc
A	z	1#F#''* 
2	1	1   AAextrapolationcontinueperiodicc                     t        j                  d      j                  dd      }ddgddgddgddgddgg}t        d	|| 
      j	                  |      }y)zATest that SplineTransformer accepts integer value knot positions.   r   r   r   r+   r            )degreer*   r:   N)r   r%   r&   r   r'   )r:   r(   r*   _s       r   %test_spline_transformer_integer_knotsrD   <   s`     			"b!$AVaVaVb"XBx8E]	mA r!   c                  @   t        j                  d      j                  dd      } t        ddd      j	                  |       }|j                         }t        |g d       t        ddd      j	                  |       }|j                  d	d
g      }t        |g d       y)z<Test that SplineTransformer generates correct features name.r>   r   r   rA   T)n_knotsrB   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   r4   get_feature_names_outr   )r(   spltfeature_namess      r   %test_spline_transformer_feature_namesr^   F   s    
		"b!$AQqtDHHKD..0M	
  QquEII!LD..Sz:M		
r!   )constantlinearr;   r<   rB   rA   c                 <   t        j                  d      j                  dd      }t        ||       j	                  |      }|j                  ddg      }t        |      |j                  k(  sJ |j                  |      }|j                  d   t        |      k(  sJ y)	zsTest feature names are correct for different extrapolations and degree.

    Non-regression test for gh-25292.
    r>   r   r   )rB   r:   r   rR   r+   N)
r   r%   r&   r   r4   r[   lenn_features_out_	transformshape)r:   rB   r(   r\   r]   X_transs         r   7test_split_transform_feature_names_extrapolation_degreerg   l   s     			"b!$AF-HLLQOD..Sz:M}!5!5555nnQG==s=1111r!   r   rF   uniformquantiler_   c                 h   t        j                  ddd      dddf   }t         j                  dgg|dddddf   dggf   }|dddddf   }|dk(  r|| z   }t        || |d|      }|j	                  |       ||fD ]2  }t        t        j                  |j                  |      d	      d       4 y)
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)rF   rB   r*   rG   r:   axis)r   linspacer_r   r4   r   sumrd   )rB   rF   r*   r:   r(   X_trainX_testr\   s           r   +test_spline_transformer_unity_decompositionrs      s     	Aq#q$w'AeeaSE1SqS!V9se+,Gqt!tQwZF
"F"#D 	HHWvt~~a0q91= r!   bias	interceptTFFTc           	      .   t        j                  ddd      dddf   }t        j                  |dddf         dz   }t        dt	        dd| d	
      fdt        |      fg      }|j                  ||       t        |j                  |      |d       y)z7Test that B-splines fit a sinusodial curve pretty well.r   r   rk   Nr   spline   rA   r_   rF   rB   rG   r:   olsfit_interceptstepsMbP?rtol)	r   rn   sinr	   r   r   r4   r   predict)rt   ru   r(   ypipes        r   )test_spline_transformer_linear_regressionr      s     	Ar34(A
qAw!A !!%",	 $9=>
D 	HHQNDLLOQT2r!   )r*   rF   sample_weightexpected_knots         )r   r   r+   r+   r   rA   r+      r   c           
          t        j                  ddgddgddgddgddgddgddgg      }t        j                  || ||	      }t	        ||       y
)zJCheck the behaviour to find knot positions with and without sample_weight.r   r   rA   r   r   r   r   r   )r(   r*   rF   r   N)r   arrayr   _get_base_knot_positionsr   )r*   rF   r   r   r(   
base_knotss         r   /test_spline_transformer_get_base_knot_positionsr      sb    0 	1a&1a&1a&1a&1a&1a&1b'JKA";;
5'J J/r!   c           	         d }t        j                  ddd      dddf   }t        dt        dd| d	
      fdt	        |      fg      }|j                  | ||dddf                t        j                  ddd      dddf   }|j                  |      }t        | ||dddf         dd       t        |dd |dd d       y)z5Test that B-splines fit a periodic curve pretty well.c                     t        j                  dt         j                  z  | z        t        j                  dt         j                  z  | z        z
  dz   S )Nr   r   rA   )r   r   pi)xs    r   fz=test_spline_transformer_periodic_linear_regression.<locals>.f   s<    vva"%%i!m$rvva"%%i!m'<<q@@r!   r   r+   e   Nry   r>   rA   r<   r{   r|   r}   r   r   i-  g{Gz?)atolr   rk      r   r   )r   rn   r	   r   r   r4   r   r   )rt   ru   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                  J   t        j                  ddd      dddf   } d}t        |ddgdgd	gg
      }|j                  |       }t        j                  d	dgdd	gd	dgdd	gg      }t        t        j                  dd      ||d      } || dddf         }t        ||       y)z@Test that the backport of extrapolate="periodic" works correctlyg      @r   Nr   r<   g                    ?rB   r:   r*   r   r   )r   rn   r   r'   r   r   r%   r   )r(   rB   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            
         t        j                  ddd      dddf   } t        dddgdgd	gd
gdgdgg      }t        dddgd	gd
gdgdgdgg      }|j                  |       }|j                  |       }t	        ||ddg df          y)zJTest if shifted knots result in the same transformation up to permutation.r   r   r   NrA   r<   r   r         @      @      @       @r   g      "@)r   r   r+   r   rA   )r   rn   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D$q/123r!   c           
      ,   t        j                  ddd      dddf   }t        | ddgdgdgd	gd
gdgg      }|j                  |      }|j	                         |j                         z
  t        |      z  }d|z  }|}t        d| dz         D ]F  }t        j                  |d      }t        j                  |      j	                         |k  sJ ||z  }H t        j                  |d      }t        j                  |      j	                         dkD  sJ y)z?Test that spline transformation is smooth at first / last knot.r   r   i'  Nr<   r   r   r   r   r   r   r   r+   r   rl   )
r   rn   r   r'   maxminrb   rangediffabs)	rB   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'''Ul " 773QD66$<!!!r!   )r+   r   rA   r   r   c           	         t        j                  ddd      dddf   }|j                         }t        dt	        d|| d      gd	t        |
      gg      }|j                  ||       t        |j                  dgdgg      ddg       t        dt	        d|| d      gd	t        |
      gg      }|j                  ||       t        |j                  dgdgg      ddg       t	        d|| d      }|j                  |       d}t        j                  t        |      5  |j                  dgg       ddd       t        j                  t        |      5  |j                  dgg       ddd       y# 1 sw Y   AxY w# 1 sw Y   yxY w)z1Test that B-spline extrapolation works correctly.r   r+   rk   Nry   r   r_   r{   r|   r}   ir   r`   error0X contains values beyond the limits of the knotsr-   )r   rn   squeezer	   r   r   r4   r   r   r1   r2   r3   rd   )rt   ru   rB   r(   r   r   r\   msgs           r   %test_spline_transformer_extrapolationr   A  s   
 	B34(A			A  !!!%",	 $9=>	
D 	HHQNDLL3%!.Q8  !!!%"*	 $9=>	
D 	HHQNDLL3%!.a9 &t7D 	HHQK
<C	z	-w 
.	z	-u 
.	- 
.	-	-	-s   "E6F6E?Fc                  ,   t         j                  j                  d      } | j                  d      j	                  dd      }d}|dz   }t        |ddd      }|j                  |      }t        |d	d
      }|j                  |      }t        ||d       y)zCTest that a B-spline of degree=0 is equivalent to KBinsDiscretizer.i| r   r+   r   r   ri   T)rF   rB   r*   rG   zonehot-dense)n_binsencodestrategygvIh%<=r   N)	r   r   RandomStaterandnr&   r   r'   r
   r   )rngr(   r   rF   r\   splineskbdkbinss           r   'test_spline_transformer_kbindiscretizerr   y  s    
))


&C		#sA&AFqjG$D   #G
&*
UCa E GU/r!   1.8.09The option `sparse_output` is available as of scipy 1.8.0)reason)r   r_   r`   r;   r<   rG   FTc                 :   t         j                  j                  |      }|j                  d      j	                  dd      }t        | |||d      }t        | |||d      }|j                  |       |j                  |       |j                  |      }	|j                  |      }
t        j                  |	      r|	j                  dk(  sJ t        |
|	j                                t        j                  |d	      }t        j                  |d	      }t         j                  t        j                   |dz
  |d
      t        j                   ||dz   d
      f   }|dk(  rod}t#        j$                  t&        |      5  |j                  |       d d d        d}t#        j$                  t&        |      5  |j                  |       d d d        y t        |j                  |      |j                  |      j                                y # 1 sw Y   zxY w# 1 sw Y   y xY w)Nr   (   r   F)rB   r*   r:   rG   sparse_outputTcsrr   rl   r   r   r   r-   zOut of bounds)r   r   r   r   r&   r   r4   rd   r   issparseformatr   toarrayaminamaxro   rn   r1   r2   r3   )rB   r*   r:   rG   global_random_seedr   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;;ueai+LLG @]]:S1  ) 2]]:S1!!'* 21 	  );+@+@+I+Q+Q+S	
 21 21s   :H1HHHc                      dgdgg} t        j                  t        d      5  t        d      j	                  |        ddd       y# 1 sw Y   yxY w)zDTest that SplineTransformer with sparse=True raises for scipy<1.8.0.r+   r   zscipy>=1.8.0r-   T)r   Nr0   )r(   s    r   ?test_spline_transformer_sparse_output_raise_error_for_old_scipyr     s>     qc
A	z	8-11!4 
9	8	8s   AAr   c                 .   |r't         t        d      k  rt        j                  d       t	        | ||||      }t        j                  ddd      dddf   }|j                  |       |j                  |      j                  d   |j                  k(  sJ y)z8Test that transform results in n_features_out_ features.r   r   )rF   rB   rG   r:   r   r   r+   r   N)r   r   r1   skipr   r   rn   r4   rd   re   rc   )rF   rG   rB   r:   r   r\   r(   s          r   &test_spline_transformer_n_features_outr     s     mG&<<OP!##D 	Aq"ag&AHHQK>>!""1%)=)====r!   )r   r   z&degree=\(min_degree, max_degree\) must)r   g      ?rA   r   )r+   r   rA   z'int or tuple \(min_degree, max_degree\)c                     dgdgg}t        j                  t        |      5  t        di | j	                  |       ddd       y# 1 sw Y   yxY w)zBTest that we raise errors for invalid input in PolynomialFeatures.r+   r   r-   Nr/   )r1   r2   r3   r   r4   r5   s      r   )test_polynomial_features_input_validationr     sA     qc
A	z	1$V$((+ 
2	1	1r9   c                      t        j                  d      d d t         j                  f   } t        j                  t        j                  |       | | dz  | dz  g      }| |fS )Nr   r   rA   )r   r%   newaxishstack	ones_like)r(   Ps     r   single_feature_degree3r     sL    
		!Q

]#A
		2<<?Aq!tQT23Aa4Kr!   z/degree, include_bias, interaction_only, indicesr   rA   )r   r   rA   X_containerc                 J   | \  }}| ||      }t        |||      j                  |      }|j                  |      }	||	j                         }	t	        |	|dd|f          |j
                  dkD  r2|j                  j                  |j
                  |j                  fk(  sJ yy)z9Test PolynomialFeatures on single feature up to degree 3.NrB   rG   interaction_onlyr   	r   r4   rd   r   r   n_output_features_powers_re   n_features_in_)
r   rB   rG   r   indicesr   r(   r   tfouts
             r   $test_polynomial_features_one_featurer    s    . "DAqN	LCS
	c!f  ,,q/CkkmC1g:'	q zzB$9$92;L;L#MMMM !r!   c                  p   t        j                  d      j                  d      } | d d d df   }| d d dd f   }t        j                  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  g
      }| |fS )Nr   r   r+   r   r   rA   )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 a4Kr!   )r   r+   r   r   )r+   r   r   r   r   )r   rA   r   r   )rA   r   r   )r   rA   r   r   r      r   	   rA   rA   )r   r   r  r   r  )r   r  r   r  c                 J   | \  }}| ||      }t        |||      j                  |      }|j                  |      }	||	j                         }	t	        |	|dd|f          |j
                  dkD  r2|j                  j                  |j
                  |j                  fk(  sJ yy)z5Test PolynomialFeatures on 2 features up to degree 3.Nr   r   r   )
r  rB   rG   r   r   r   r(   r   r   r   s
             r   %test_polynomial_features_two_featuresr  @  s    F  DAqN	LCS
	c!f  ,,q/CkkmC1g:'	q zzB$9$92;L;L#MMMM !r!   c                     t        j                  d      j                  dd      } t        dd      j	                  |       }|j                         }t        g d|       t        |      |j                  |       j                  d   k(  sJ t        dd	      j	                  |       }|j                  g d
      }t        g d|       t        |      |j                  |       j                  d   k(  sJ t        dd	      j	                  |       }|j                  g d
      }t        g d|       t        |      |j                  |       j                  d   k(  sJ t        ddd      j	                  |       }|j                  g d
      }t        ddg|       t        |      |j                  |       j                  d   k(  sJ t        dd      j	                  |       }|j                  g d      }t        g d|       y )N   r   rA   r   TrB   rG   )
1x0r  r  zx0^2zx0 x1zx0 x2zx1^2zx1 x2zx2^2r+   F)r   rR   c)r   rR   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   r4   r[   r   rb   rd   re   )r(   polyr]   s      r   test_polynomial_feature_namesr&  q  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!   )degrG   r   dtypecsc_containerc                    t         j                  j                  d      }|j                  ddd      } ||      }t	        | ||      }|j                  |j                  |            }	|j                  |j                  |            }
t        j                  |	      r|	j                  dk(  sJ |	j                  |
j                  k(  sJ t        |	j                         |
       y )Nr   r   rk   r   rG   r   cscr   r   r   randintr   r'   astyper   r   r   r(  r   r   )r'  rG   r   r(  r)  r   r(   X_cscr   Xt_cscXt_denses              r   test_polynomial_features_csc_Xr4    s    " ))


"CAq(#A!E
,9IC u||E23F  %1H??6"v}}'===<<8>>)))fnn.9r!   csr_containerc                    t         j                  j                  d      }|j                  ddd      } ||      }t	        | ||      }|j                  |j                  |            }	|j                  |j                  |d            }
t        j                  |	      r|	j                  dk(  sJ |	j                  |
j                  k(  sJ t        |	j                         |
       y )Nr   r   r+  r,  F)copyr   r.  )r'  rG   r   r(  r5  r   r(   X_csrr   Xt_csrr3  s              r   test_polynomial_features_csr_Xr:    s     ))


"C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+   rA   )r   r   )rA   r   r   c                      |dgdg| dz
  gff      }t        |||      }|j                  |       |j                  }t        j                  | d|||      }	|t	        |	D 
cg c]  }
d c}
      k(  sJ yc c}
w )z?
    Test that n_output_features_ is calculated correctly.
    r+   r   )rB   r   rG   r;  
min_degree
max_degreer   rG   N)r   r4   r   _combinationsrp   )r;  r>  r?  r   rG   r5  r   r   
num_comboscombosrC   s              r   test_num_combinationsrC    s     	saS:>"2345A
)!C
 GGAJ''J--)!F 0Aa011110s   "	A7
c                     |t        dddd            }|j                         }t        | ||      }|j                  |j	                  |            }|j                  |j	                  |            }	t        j                  |      r|j                  dk(  sJ |j                  |	j                  k(  sJ t        |j                         |	       y )N  r         ?r   random_stater,  r   )
sparse_randomr   r   r'   r0  r   r   r   r(  r   )
r'  rG   r   r(  r5  r8  r(   r   r9  r3  s
             r   %test_polynomial_features_csr_X_floatsrJ    s     -b#AFGE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   rA   T)r+   rA   T)r   rA   T)r   r   F)r+   r   Fr   r   F)r   rA   F)r+   rA   F)r   rA   Fc                 v    |t        dddd            }d|| d d f<   |j                         }t        |d|      }|j                  |      }|j                  |      }t	        j
                  |      r|j                  d	k(  sJ |j                  |j                  k(  sJ t        |j                         |       y )
NrA   r   r   r   rG  r   Fr,  r   	rI  r   r   r'   r   r   r   r(  r   )	rK  r'  r   r5  r8  r(   r   r9  r3  s	            r   'test_polynomial_features_csr_X_zero_rowrP  6  s    * -2sCDE"E.!
A
SuGW
XCu%F  #H??6"v}}'===<<8>>)))fnn.9r!   ))TTrv   rw   )FFc                 d    |t        dddd            }|j                         }t        d| |      }|j                  |      }|j                  |      }t	        j
                  |      r|j                  dk(  sJ |j                  |j                  k(  sJ t        |j                         |       y )	NrE  r   rF  r   rG  r   r,  r   rO  )rG   r   r5  r8  r(   r   r9  r3  s           r   'test_polynomial_features_csr_X_degree_4rR  Z  s     -b#AFGEA
	7GC u%F  #H??6"v}}'===<<8>>)))fnn.9r!   )r'  dimr   )
)r   r+   TrL  )rA   r+   T)rA   r   T)rA   rA   T)r   r+   FrM  )rA   r+   F)rA   r   F)rA   rA   Fc                 b    |t        d|dd            }|j                         }t        | |      }|j                  |      }|j                  |      }t	        j
                  |      r|j                  dk(  sJ |j                  |j                  k(  sJ t        |j                         |       y )NrE  rF  r   rG  )r   r   rO  )	r'  rS  r   r5  r8  r(   r   r9  r3  s	            r   (test_polynomial_features_csr_X_dim_edgesrU  p  s    " -c3QGHEA
S3C
DCu%F  #H??6"v}}'===<<8>>)))fnn.9r!   c           
      Z     fd}d}d}t         j                  }t        j                  ddt         j                        }t        j                  |dz
  |dz
  |dz
  |dz
  g      }t        j                  |dz
  |dz
  |dz
  |dz
  gt         j                        }	 ||||	ff||f|      }
t         |d	      }|j                  |d
d|j                  |j                        }|t        j                  t         j                        j                  kD  r8d}t        j                  t        |      5  |j                  |
       ddd       y|j!                  |
      }|j#                         \  }}||z   } |||	t%                   |	d         |z   }|r	dg|dz
  z  ng }|r	d
g|dz
  z  ng }t'        d      D ]  }|d|z     }|d|z  dz      }|	d|z     }|	d|z  dz      }|r"|j)                  d       |j)                  d
       |j+                  ||g       |j+                  |t%        |      z   |t%        |      z   g        sS|j+                  ||z  ||z  ||z  g       |j+                   ||||      |z    ||||      |z    ||||      |z   g       |j+                  ||z  g       |j)                   ||||      |z           t%        |      dz   dt%                z  z   }|j,                  |dz   k(  sJ |j.                  |k(  sJ |j0                  ||dz   fk(  sJ |j2                  j.                  |j4                  j.                  cxk(  rt         j                  k(  sJ  J |j4                  j                         t        j                  t         j6                        j                  kD  sJ |rt9        t'        |dz
              ng }|j+                  |dz
  g|z  |dz
  g|z  z          t;        |j<                  |       t?        ||       t?        ||       y# 1 sw Y   yxY w)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                 d    r| |z  |dz  d|z  z   dz  z
  dz
  |z   S | |z  |dz  |z   dz  z
  |z   S )Nr   rA   r+   r/   )r   ijr   s      r   degree_2_calczRtest_csr_polynomial_expansion_index_overflow_non_regression.<locals>.degree_2_calc  sP    q5AqD1q5LQ..2Q66q5AqD1H?*Q..r!      i r+   r   r(  r   )re   r(  r   rG   rB   r   r=  tThe output that would result from the current configuration would have \d* features which is too large to be indexedr-   NrA   ) r   float32r%   int64r   r   _num_combinationsr   rG   iinfointpr   r1   r2   r3   r4   r'   nonzerointr   appendextendr   r(  re   indptrr   int32listr   datar   )r   rG   r5  rZ  	n_samplesr;  
data_dtyperk  rowcolr(   pfnum_combinationsr   rf   row_nonzerocol_nonzeron_degree_1_features_outmax_degree_2_idxdata_targetcol_nonzero_targetrX  r   r   x_idxy_idxnnz_per_rowrow_nonzero_targets   `                           r   ;test_csr_polynomial_expansion_index_overflow_non_regressionr|    sL    / 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j#c.>*>&?"@#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s   1P!!P*zdegree, n_features)r     )rA   i(	  )rA   r}  c                    dg}|dz
  t        j                  t         j                        j                  k  rt         j                  nt         j                  }t        j
                  dg|      }t        j
                  |dz
  g|      }|dz
  t        |      z   g}	|	j                  ||dz   z  dz  |	d   z          |	j                  ||dz   z  |dz   z  dz  |	d   z           ||||ff      }
t        |||       }|j                  |d| |j                  |j                        }|t        j                  t         j                        j                  kD  r8d	}t        j                  t        |
      5  |j!                  |
       ddd       yt"        t%        d      k  rd}t        j                  t         j                        j                  }||z   }t'        d| dz         D ]M  }t)        |
j*                  ||      }t-        |||      dz
  }||dz   z  }t        ||      |kD  }|| xr ||kD  z  }O |r8d}t        j                  t        |
      5  |j/                  |
      }ddd       yt"        t%        d      k  rD|dk(  r?| dk(  r:|s8d}t        j                  t        |
      5  |j/                  |
      }ddd       y|j/                  |
      }|t        j                  t         j                        j                  kD  rt         j                  nt         j                  }d| dz
  t        |       z  z   }t        |      |z   }|j0                  |
j0                  k(  sJ |j2                  d|j4                  fk(  sJ |j*                  j0                  |j6                  j0                  cxk(  r|k(  sJ  J |j8                  |k(  sJ |r|d   t        j:                  d      k(  sJ t'        |      D ]$  }|d|	|   f   t        j:                  d      k(  r$J  ||z  }| dk(  r|d|z   z  }|j4                  |	| dz
     dz   |z
  k(  sJ y# 1 sw Y   yxY w# 1 sw Y   yxY w# 1 sw Y   yxY w)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   r\  r   r   r]  r=  r^  r-   Nr   Fz>In scipy versions `<1.8.0`, the function `scipy.sparse.hstack`z1.9.2r}  z>In scipy versions `<1.9.2`, the function `scipy.sparse.hstack`r   r   rA   )r   rb  ri  r   r`  r   re  rf  r   ra  r   rG   rc  r1   r2   r3   r4   r   r   r   r   rh  r   r'   r(  re   r   r   nnzapprox)rB   r;  r   rG   r5  rk  indices_dtypern  ro  expected_indicesr(   rp  rq  r   has_bug	max_int32cumulative_sizer'  
max_indptrmax_indicesneeds_int64rf   expected_dtypenon_bias_termsexpected_nnzidxoffsets                              r   ,test_csr_polynomial_expansion_index_overflowr    s1   4 5D *Q"((2882D2H2H HBHHbhhM
((A3m
,C
((JN#=
9C 	Q\** J*q.9Q>AQRSATTUj1n%a8A=@PQR@SS 	tc3Z()A	)V
B ++,,__ ,  "((277+///> 	 ]]:S1FF1I 2
 M'**HHRXX&**	$|3FQJ'C(3CSIJ,Z9I3ORSSK{Q.Ok:6BK;F?Y+FFG ( SCz5**1- 6 	]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.   $4VaZ$@1$Dv$MMMMs 2" 6 2s$   3Q	Q(Q!	QQ!Q*c                    t        j                  t         j                        j                  dz  }dg}dg}|dz
  g} ||||ff      }t	        | |d      }d}	t        j                  t        |	      5  |j                  |       d d d        t        j                  t        |	      5  |j                  |       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)	Nr   r   r   r+   r  r]  r^  r-   )
r   rb  r`  r   r   r1   r2   r3   r4   r'   )
r   rG   r5  r;  rk  rn  ro  r(   rp  r   s
             r   0test_csr_polynomial_expansion_too_large_to_indexr  |  s     "((#''1,J5D#C>
Ctc3Z()A	)V
B	6  
z	-
q	 
.	z	-
 
.	- 
.	-	-	-s   4C)CCCsparse_containerc                 n   t        j                  d      }t        dd      }d}t        j                  t
        |      5  |j                  |       ddd       t        dd      }d	}t        j                  t
        |      5  |j                  |       ddd       | | |      fD ]s  }t        dd
      }|j                  |      }t        j                  |      r|j                         }t        |t        j                  |j                  d   df             u y# 1 sw Y   xY w# 1 sw Y   xY w)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   r1   r2   r3   r'   r   r   r   r   re   )r  r(   r%  r7   _Xoutputs         r   1test_polynomial_features_behaviour_on_zero_degreer    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(+D4c                      t         j                  dk(  s&t         j                  dk  rt         j                  dk7  rd} nd} t               | k(  sJ y )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))r   runc                    t        t        j                  t        j                        j                  dz  dz         }dg}dg}|dz
  g}|dz
  g}|j                  t        ||dz   z  dz  |d   z                |j                  t        ||dz   z  |dz   z  dz  |d   z                 | |||ff      }t        ddd	      }t        j                  d
k  r8d}t        j                  t        |      5  |j                  |       d d d        y |j                  |      }	t        d      D ]$  }
|	d||
   f   t        j                  d      k(  r$J  y # 1 sw Y   y xY w)NgUUUUUU?rA   r   r   r+   r   r   Fr]  r  r^  r-   )re  r   rb  r`  r   rf  r   r  r  r1   r2   r3   r'   r   r  )r5  r;  rk  rn  ro  r  r(   rp  r   rf   r  s              r   *test_csr_polynomial_expansion_windows_failr    sq    RXXbhh'++6:;J5D#C>
C 	Q J*q.)Q.1A!1DDE J*q.)Z!^<ADTUVDWWX 	tc3Z()A	Uq	QB
{{e: 	
 ]]:S1Q 21 ""1%8C1.s334c8JJJJ 	 21s   1EE)Ur  numpyr   r1   numpy.testingr   r   scipyr   scipy.interpolater   scipy.sparser   rI  sklearn.linear_modelr   sklearn.pipeliner	   sklearn.preprocessingr
   r   r   /sklearn.preprocessing._csr_polynomial_expansionr   r   r   sklearn.utils._testingr   sklearn.utils.fixesr   r   r   r   markparametrizer)   r8   rD   r^   rg   r   rs   r   r   r   r   r   r   r   r   r   skipifr   r   r   r   fixturer   slicer  r  r  r&  re  r_  float64r4  r:  rC  rJ  rP  rR  rU  r|  sqrtrb  r`  r   r  r  r  r  xfailr  r  r/   r!   r   <module>r     s   
   =  % 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, ;	AtXRXX1v1v2w&?@ABHH*+BHHq!fq!fq"g./		
 
AtXRXX1v1v2wB&HIJ	QhbhhAAB'@ABBHH*+BHHq!fq!fq"g./		
(0)(0 &+.0NOI PI>$4, Aq6*#" +#"L &+.0NO?33 4 P3l0( w''F   5A;/9j"9:L %7-
 8 ; 0	-
` -((F  5	5 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dN : 8 <!&dNN +dE];$7.9 : 8 <* +^n-LM= N=<8 LLG	6 	   .9"K :"Kr!   