
    0Phj                        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j!        "                    deef          d             Z#ej!        "                    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j!        "                    dddg          d             Z%d Z&ej!        "                    dg d          ej!        "                    dddg          d                         Z'ej!        "                    d e(dd                    ej!        "                    d  e(dd                    ej!        "                    dd!d"g          ej!        "                    dd#dg          d$                                                 Z)ej!        "                    d%d&gd'd(g          d)             Z*ej!        "                    g d*d!dd ej+        d dgdd+gd,d-gg          fd!d ej+        g d.           ej+        ddgd/d+gd,d-gg          fd!d/d ej+        d dgdd,gd/d0gd,d-gg          fd"dd ej+        d dgddgd,d-gg          fd"d ej+        g d.           ej+        ddgdd+gd,d-gg          fg          d1             Z,ej!        "                    d%d&gd'd(g          d2             Z-d3 Z.d4 Z/ej!        "                    dddg          d5             Z0ej!        "                    d%d&gd'd(g          ej!        "                    dg d6          d7                         Z1d8 Z2ej!        3                    e  ed9          k     d:;          ej!        "                    d e(dd                    ej!        "                    dd!d"g          ej!        "                    dg d<          ej!        "                    d=d>d?g          d@                                                             Z4ej!        3                    e  ed9          k    d:;          dA             Z5ej!        "                    d dd0g          ej!        "                    d=d?d>g          ej!        "                    ddd/g          ej!        "                    dg d<          ej!        "                    dBd>d?g          dC                                                             Z6ej!        "                    dddDidEfddFidEfddGidEfddHidIfg          dJ             Z7 ej8                    dK             Z9ej!        "                    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j!        "                    dOdgez   ez             dP                         Z; ej8                    dQ             Z<ej!        "                    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j!        "                    dOdgez   ez             d[                         Z=d\ Z>ej!        "                    g d]dd?d>e?fdd?d>e?fdd?d>ej@        fdd?d>ejA        fdd>d>ejA        fdd>d?ejA        fd/d>d>ejA        fd/d>d?ejA        fg          ej!        "                    d^e          d_                         ZBej!        "                    g d]dd?d>e?fdd?d>e?fdd?d>ej@        fdd?d>ejA        fdd>d>ejA        fdd>d?ejA        fg          ej!        "                    d`e          da                         ZCej!        "                    dbg dc          ej!        "                    ddg de          ej!        "                    dfd?d>g          ej!        "                    d=d?d>g          ej!        "                    d`e          dg                                                             ZDej!        "                    g d]dd?d>ej@        fdd?d>ejA        fdd>d>ejA        fdd>d?ejA        fg          ej!        "                    d`e          dh                         ZEej!        "                    g dig dj          ej!        "                    d`e          dk                         ZFej!        "                    d=dfgg dl          ej!        "                    d`e          dm                         ZGej!        "                    g dng do          ej!        "                    d`e          dp                         ZHej!        "                    dfd?d>g          ej!        "                    d=d?d>g          ej!        "                    d`e          dq                                     ZIej!        "                    drdsdtd e? ejJ         ejK        ejL                  jM                  dz             fdud e? ejJ         ejK        ejL                  jM                            fg          ej!        "                    dfd?d>g          ej!        "                    d=d?d>g          ej!        "                    d`e          dv                                                 ZNej!        "                    dfd?d>g          ej!        "                    d=d?d>g          ej!        "                    d`e          dw                                     ZOej!        "                    dxeez             dy             ZPdz ZQej!        R                    e jS        d{k    d|d?}          ej!        "                    d`e          d~                         ZTdS )    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                 f   t          j        d                              dd          }d } | |                                 |                    sJ  | | d                              |                    sJ t          j         | d                              |                    sJ dS )	z+Test that output array has the given order.
         c                 4    t          j        | j                  S )N)np	isfortranT)as    k/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/preprocessing/tests/test_polynomial.pyis_c_contiguousz?test_polynomial_and_spline_array_order.<locals>.is_c_contiguous$   s    |AC       C)orderFN)r   arangereshapefit_transformr   )r   Xr    s      r   &test_polynomial_and_spline_array_orderr)      s     		"a##A! ! ! ?3355..q1122222?33S>>>77::;;;;;<#44Q77888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                     dgdgg}t          j        t          |          5  t          di |                     |           ddd           dS # 1 swxY w Y   dS )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   ,   s     qc
A	z	1	1	1 + +##F##''***+ + + + + + + + + + + + + + + + + +    AAAextrapolationcontinueperiodicc                     t          j        d                              dd          }ddgddgddgddgddgg}t          d	|| 
                              |          }dS )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   <   st     		"b!$$AVaVaVb"XBx8E]	 	 	mA AAr!   c                     t          j        d                              dd          } t          ddd                              |           }|                                }t          |g d           t          ddd                              |           }|                    d	d
g          }t          |g d           dS )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DDHHKKD..00M	
 	
 	
    QquEEEII!LLD..Sz::M		
 		
 		
    r!   )constantlinearr;   r<   rB   rA   c                 j   t          j        d                              dd          }t          ||                               |          }|                    ddg          }t          |          |j        k    sJ |                    |          }|j	        d         t          |          k    sJ dS )	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HHLLQOOD..Sz::M}!55555nnQG=s=11111111r!   r   rF   uniformquantiler_   c                    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|          }|                    |           ||fD ]9}t          t          j        |                    |          d	          d           :dS )
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#qqq$w'AeaSE1SSqS!!!V9se+,Gqt!tQQQwZF
""F"#  D 	HHWv > >t~~a00q9991====> >r!   bias	interceptTFFTc           	      h   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          }|                    ||           t          |                    |          |d           dS )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NNNDLLOOQT22222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	          ||           d
S )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      sv    0 	1a&1a&1a&1a&1a&1a&1b'JK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          }|                    | ||dddf                              t          j        ddd          dddf         }|                    |          }t          | ||dddf                   dd           t          |dd         |dd         d           dS )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:    va"%i!m$$rva"%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      sB   
A A A 	Aq#qqq$w'A !!%",	   $9===>
  D 	HHQ!AAAqD'

 
RC	 	 D	)B,,r""KK2aaad84dCCCCK#&CG(<4HHHHHHr!   c                  x   t          j        ddd          dddf         } d}t          |ddgdgd	gg
          }|                    |           }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          ||           dS )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 8c3Z#sc3Z#sDEED
")B""D&*
=
=C3qAw<<DBr!   c            
      J   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          }|                    |           }|                    |           }t	          ||ddg df                    dS )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$qqq///1233333r!   c           
      j   t          j        ddd          dddf         }t          | ddgdgdgd	gd
gdgg          }|                    |          }|                                |                                z
  t          |          z  }d|z  }|}t          d| dz             D ]I}t          j        |d          }t          j	        |                                          |k     sJ ||z  }Jt          j        |d          }t          j	        |                                          dk    sJ dS )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     sF    	BF##AAAtG,A# usecUSEC53%8  K
 
	"	"1	%	%BUUWWquuww#a&&(E
u*C
C 1fqj!!  ws###vd||!!C''''Ul
 73QD6$<<!!!!!!r!   )r+   r   rA   r   r   c           	         t          j        ddd          dddf         }|                                }t          dt	          d|| d          gd	t          |
          gg          }|                    ||           t          |                    dgdgg          ddg           t          dt	          d|| d          gd	t          |
          gg          }|                    ||           t          |                    dgdgg          ddg           t	          d|| d          }|                    |           d}t          j
        t          |          5  |                    dgg           ddd           n# 1 swxY w Y   t          j
        t          |          5  |                    dgg           ddd           dS # 1 swxY w Y   dS )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NNNDLL3%!..Q888  !!!%"*	   $9===>	
 D 	HHQNNNDLL3%!..a999 &t7  D 	HHQKKK
<C	z	-	-	-    w                             	z	-	-	-  u                 s$    FFF*GGGc                  f   t           j                            d          } |                     d                              dd          }d}|dz   }t          |ddd          }|                    |          }t          |d	d
          }|                    |          }t          ||d           dS )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
&*
U
U
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                            |          }|                    d                              dd          }t          | |||d          }t          | |||d          }|                    |           |                    |           |                    |          }	|                    |          }
t          j	        |	          r|	j
        dk    sJ t          |
|	                                           t          j        |d	          }t          j        |d	          }t           j        t          j        |dz
  |d
          t          j        ||dz   d
          f         }|dk    rd}t#          j        t&          |          5  |                    |           d d d            n# 1 swxY w Y   d}t#          j        t&          |          5  |                    |           d d d            d S # 1 swxY w Y   d S t          |                    |          |                    |                                                     d S )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
3
3C		#r1%%A"#!  J $#!  K NN1OOA **1--N((++M?>**M~/D/M/M/M/MM>#9#9#;#;<<< GAAEGAAEe
EAIub))2;ueai+L+LLG @]:S111 	* 	*  )))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*]:S111 	+ 	+!!'***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	  ));+@+@+I+I+Q+Q+S+S	
 	
 	
 	
 	
s$   F;;F?F?#HH
H
c                      dgdgg} t          j        t          d          5  t          d                              |            ddd           dS # 1 swxY w Y   dS )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	8	8 5 5---11!4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   $AAAr   c                 J   |r,t           t          d          k     rt          j        d           t	          | ||||          }t          j        ddd          dddf         }|                    |           |                    |          j	        d         |j
        k    sJ dS )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      QmG&<&<<<OPPP!##  D 	Aq"aaag&AHHQKKK>>!"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 |                     |           ddd           dS # 1 swxY w Y   dS )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     s     qc
A	z	1	1	1 , ,$$V$$((+++, , , , , , , , , , , , , , , , , ,r9   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     sO    
	!QQQ
]#A
	2<??Aq!tQT233Aa4Kr!   z/degree, include_bias, interaction_only, indicesr   rA   )r   r   rA   X_containerc                 T   | \  }}| ||          }t          |||                              |          }|                    |          }	||	                                }	t	          |	|dd|f                    |j        dk    r|j        j        |j        |j        fk    sJ dS dS )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KNN	LCS
 
 
	c!ff  ,,q//CkkmmC111g:'''	q  zB$92;L#MMMMM ! MMr!   c                     t          j        d                              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	
111bqb5B	
111abb5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                 T   | \  }}| ||          }t          |||                              |          }|                    |          }	||	                                }	t	          |	|dd|f                    |j        dk    r|j        j        |j        |j        fk    sJ dS dS )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KNN	LCS
 
 
	c!ff  ,,q//CkkmmC111g:'''	q  zB$92;L#MMMMM ! MMr!   c                     t          j        d                              dd          } t          dd                              |           }|                                }t          g d|           t          |          |                    |           j	        d         k    sJ t          dd	                              |           }|                    g d
          }t          g d|           t          |          |                    |           j	        d         k    sJ t          dd	                              |           }|                    g d
          }t          g d|           t          |          |                    |           j	        d         k    sJ t          ddd                              |           }|                    g d
          }t          ddg|           t          |          |                    |           j	        d         k    sJ t          dd                              |           }|                    g d          }t          g d|           d S )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AAD..00MRRR   }!2!2!8!;;;;;QU;;;??BBD..??M	
 	
 	
* 	-  0 }!2!2!8!;;;;;V%@@@DDQGGD..??M	
 	
 	
$ 	'  * }!2!2!8!;;;;;D4  	c!ff 	 ..??MW~}555}!2!2!8!;;;;; QT:::>>qAAD../Q/Q/QRRM>>>NNNNNr!   )degrG   r   dtypecsc_containerc                    t           j                            d          }|                    ddd          } ||          }t	          | ||          }|                    |                    |                    }	|                    |                    |                    }
t          j        |	          r|	j	        dk    sJ |	j
        |
j
        k    sJ t          |	                                |
           d S )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M!E
,9I  C u||E2233F  %11H?6""=v}'='='='=<8>))))fnn..99999r!   csr_containerc                    t           j                            d          }|                    ddd          } ||          }t	          | ||          }|                    |                    |                    }	|                    |                    |d                    }
t          j        |	          r|	j	        dk    sJ |	j
        |
j
        k    sJ t          |	                                |
           d S )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M!E
,9I  C u||E2233F  %e!<!<==H?6""=v}'='='='=<8>))))fnn..9999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        }t          j        | d|||          }	|t	          d |	D                       k    sJ dS )z?
    Test that n_output_features_ is calculated correctly.
    r+   r   )rB   r   rG   r;  
min_degree
max_degreer   rG   c                     g | ]}d S )r+   r/   ).0rC   s     r   
<listcomp>z)test_num_combinations.<locals>.<listcomp>  s    000Aa000r!   N)r   r4   r   _combinationsrp   )
r;  r>  r?  r   rG   r5  r   r   
num_comboscomboss
             r   test_num_combinationsrF    s     	saS:>"23455A
)!  C
 GGAJJJ'J-)!  F 0000011111111r!   c                     |t          dddd                    }|                                }t          | ||          }|                    |                    |                    }|                    |                    |                    }	t          j        |          r|j        dk    sJ |j        |	j        k    sJ t          |                                |	           d S )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_floatsrM    s     M-b#AFFFGGEA
,9I  C u||E2233F  %11H?6""=v}'='='='=<8>))))fnn..9999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                     |t          dddd                    }d|| d d f<   |                                }t          |d|          }|                    |          }|                    |          }t	          j        |          r|j        d	k    sJ |j        |j        k    sJ t          |                                |           d S )
NrA   r   r   r   rJ  r   Fr,  r   	rL  r   r   r'   r   r   r   r(  r   )	rN  r'  r   r5  r8  r(   r   r9  r3  s	            r   'test_polynomial_features_csr_X_zero_rowrS  6  s    * M-2sCCCDDE"E.!!!
A
SuGW
X
X
XCu%%F  ##H?6""=v}'='='='=<8>))))fnn..99999r!   ))TTrv   rw   )FFc                     |t          dddd                    }|                                }t          d| |          }|                    |          }|                    |          }t	          j        |          r|j        dk    sJ |j        |j        k    sJ t          |                                |           d S )	NrH  r   rI  r   rJ  r   r,  r   rR  )rG   r   r5  r8  r(   r   r9  r3  s           r   'test_polynomial_features_csr_X_degree_4rU  Z  s     M-b#AFFFGGEA
	7G  C u%%F  ##H?6""=v}'='='='=<8>))))fnn..99999r!   )r'  dimr   )
)r   r+   TrO  )rA   r+   T)rA   r   T)rA   rA   T)r   r+   FrP  )rA   r+   F)rA   r   F)rA   rA   Fc                     |t          d|dd                    }|                                }t          | |          }|                    |          }|                    |          }t	          j        |          r|j        dk    sJ |j        |j        k    sJ t          |                                |           d S )NrH  rI  r   rJ  )r   r   rR  )	r'  rV  r   r5  r8  r(   r   r9  r3  s	            r   (test_polynomial_features_csr_X_dim_edgesrX  p  s    " M-c3QGGGHHEA
S3C
D
D
DCu%%F  ##H?6""=v}'='='='=<8>))))fnn..99999r!   c           
           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	          }|                    |d
d|j        |j                  }|t          j	        t           j
                  j        k    rLd}t          j        t          |          5  |                    |
           ddd           n# 1 swxY w Y   dS |                    |
          }|                                \  }}||z   } |||	t%                               |	d                   |z   }|r	dg|dz
  z  ng }|r	d
g|dz
  z  ng }t'          d          D ]R}|d|z           }|d|z  dz            }|	d|z           }|	d|z  dz            }|r*|                    d           |                    d
           |                    ||g           |                    |t%          |          z   |t%          |          z   g            se|                    ||z  ||z  ||z  g           |                     ||||          |z    ||||          |z    ||||          |z   g           |                    ||z  g           |                     ||||          |z              Tt%          |          dz   dt%                      z  z   }|j        |dz   k    sJ |j        |k    sJ |j        ||dz   fk    sJ |j        j        |j        j        cxk    rt           j        k    sn J |j                                        t          j	        t           j                  j        k    sJ |rt9          t'          |dz
                      ng }|                    |dz
  g|z  |dz
  g|z  z              t;          |j        |           t?          ||           t?          ||           dS )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  sU     	/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  r]  	n_samplesr;  
data_dtypern  rowcolr(   pfnum_combinationsr   rf   row_nonzerocol_nonzeron_degree_1_features_outmax_degree_2_idxdata_targetcol_nonzero_targetr[  r   r   x_idxy_idxnnz_per_rowrow_nonzero_targets   `                           r   ;test_csr_polynomial_expansion_index_overflow_non_regressionr    s    / / / / / IJJ9Q***D
(IM9q=)a-QO
P
PC (	aaaaHPRPX  C 		Sz*%	 	 	A
 
)Q
 
 
B ++,_ ,   "(27++///> 	 ]:S111 	 	FF1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	q!!G&00K(<7j#c.>*>&?&?"@#a&II
!	"  ,8?1#Q''RK2>F!	A..B1XX  QKQOAE
AEAI 	)q!!!%%a(((Aq6"""!!S&&&L0A0A(AB	
 	
 	
   	Aq1ua!e4555%%!M*eU;;>UU!M*eU;;>UU!M*eU;;>UU    Aw'''%%j%77:QQ    l##a'!c6F2F.G.G*GGK $4q$88888=J&&&&=Y(81(<=====>7?#8DDDDBHDDDDDD?  28BH#5#5#999997CKeIM22333	Q+%Q+(EE   GL+...{$6777{$677777s   D<<E E 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}	|	                    ||dz   z  dz  |	d         z              |	                    ||dz   z  |dz   z  dz  |	d         z               ||||ff          }
t          |||           }|	                    |d| |j
        |j                  }|t          j        t           j                  j        k    rLd	}t          j        t          |
          5  |                    |
           ddd           n# 1 swxY w Y   dS t"          t%          d          k     rd}t          j        t           j                  j        }||z   }t'          d| dz             D ]T}t)          |
j        ||          }t-          |||          dz
  }||dz   z  }t          ||          |k    }|| o||k    z  }U|rLd}t          j        t          |
          5  |                    |
          }ddd           n# 1 swxY w Y   dS t"          t%          d          k     rZ|dk    rT| dk    rN|sLd}t          j        t          |
          5  |                    |
          }ddd           n# 1 swxY w Y   dS |                    |
          }|t          j        t           j                  j        k    rt           j        nt           j        }d| dz
  t          |           z  z   }t          |          |z   }|j        |
j        k    sJ |j        d|j        fk    sJ |j        j        |j        j        cxk    r|k    sn J |j        |k    sJ |r |d         t          j        d          k    sJ t'          |          D ]*}|d|	|         f         t          j        d          k    sJ +||z  }| dk    r|d|z   z  }|j        |	| dz
           dz   |z
  k    sJ dS )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=  ra  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   re  rl  r   rc  r   rh  ri  r   rd  r   rG   rf  r1   r2   r3   r4   r   r   r   r   rk  r   r'   r(  re   r   r   nnzapprox)rB   r;  r   rG   r5  rn  indices_dtyperq  rr  expected_indicesr(   rs  rt  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    s   4 5D *Q"(282D2D2H H HBHHbhM
(A3m
,
,
,C
(JN#=
9
9
9C 	Q\*** J*q.9Q>AQRSATTUUUj1n%a8A=@PQR@SS   	tc3Z())A	)V
 
 
B ++,_ ,   "(27++///> 	 ]:S111 	 	FF1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 M'****HRX&&*	$|3FQJ'' 	G 	GC(3CSIIJ,Z9I3OORSSK{Q.Ok:66BK;F?Y+FFGG 	SCz555 . .**1--. . . . . . . . . . . . . . .F 	]7++++%aKK   P]:S111 	* 	*&&q))G	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*q!!G!1BHRX4F4F4J!J!JRXXPRPXN&1*0@,@(A(AAAN|$$~5L=AG####=Q 566666>7?#8JJJJNJJJJJJ;,&&&& 3t}c 2 22222^$$ G Gq*3//0FM#4F4FFFFFF
*F{{!j.  $4VaZ$@1$Dv$MMMMMMMs6   *FFF"JJJK66K:=K:c                    t          j        t           j                  j        dz  }dg}dg}|dz
  g} ||||ff          }t	          | |d          }d}	t          j        t          |	          5  |                    |           d d d            n# 1 swxY w Y   t          j        t          |	          5  |	                    |           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r+   r  r`  ra  r-   )
r   re  rc  r   r   r1   r2   r3   r4   r'   )
r   rG   r5  r;  rn  rq  rr  r(   rs  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$   1BBB9CC #C sparse_containerc                    t          j        d          }t          dd          }d}t          j        t
          |          5  |                    |           ddd           n# 1 swxY w Y   t          dd          }d	}t          j        t
          |          5  |                    |           ddd           n# 1 swxY w Y   | | |          fD ]}t          dd
          }|                    |          }t          j        |          r|	                                }t          |t          j        |j        d         df                     dS )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	1  1               V%@@@D	8  
z	1	1	1  1               ""1%%& = =!>>>##B''?6"" 	&^^%%F627AGAJ?#;#;<<<<= =s$   A%%A),A)C  CCc                      t           j        dk    s t           j        dk    rt           j        dk    rd} nd} t                      | k    sJ d S )Nwin32        
emscriptenr      )sysplatformmaxsizer   )expected_sizes    r   test_sizeof_LARGEST_INT_tr    sS     |wu!=!=$&&-777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}|                    t          ||dz   z  dz  |d         z                        |                    t          ||dz   z  |dz   z  dz  |d         z                         | |||ff          }t          ddd	          }t          j        d
k    rMd}t          j
        t          |          5  |                    |           d d d            d S # 1 swxY w Y   d S |                    |          }	t          d          D ]*}
|	d||
         f         t          j        d          k    sJ +d S )NgUUUUUU?rA   r   r   r+   r   r   Fr`  r  ra  r-   )rh  r   re  rc  r   ri  r   r  r  r1   r2   r3   r'   r   r  )r5  r;  rn  rq  rr  r  r(   rs  r   rf   r  s              r   *test_csr_polynomial_expansion_windows_failr    s    RXbh''+6:;;J5D#C>
C 	Q J*q.)Q.1A!1DDEE   J*q.)Z!^<ADTUVDWWXX   	tc3Z())A	Uq	Q	Q	QB
{e: 	
 ]:S111 	  	 Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ""1%%88 	K 	KC1.s334c8J8JJJJJJ	K 	Ks   D((D,/D,)Ur  numpyr   r1   numpy.testingr   r   scipyr   scipy.interpolater   scipy.sparser   rL  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&  rh  rb  float64r4  r:  rF  rM  rS  rU  rX  r  sqrtre  rc  r   r  r  r  r  xfailr  r  r/   r!   r   <module>r     s   



      = = = = = = = =       % % % % % % 0 0 0 0 0 0 1 1 1 1 1 1 % % % % % %         
         
 = < < < < <            !35F GHH	9 	9 IH	9 
QC5	NO
QFQF#	$&ST
QC!:	 JK + + + :z*BCC  DC# # #L 222  Aq6**2 2 +*	 
2 55A;;//EE!QKK009j"9:::z*BCC> > DC ;: 10 0/>2 &+.0NOO3 3 PO3, ;;;	AtXRX1v1v2w&?@@ABH***++BHq!fq!fq"g.//		
 
AtXRX1v1v2wB&HIIJ	QhbhAAB'@AABBH***++BHq!fq!fq"g.//		
 (0 0) (0 &+.0NOOI I POI>  $4 4 4, Aq6**#" #" +*#"L &+.0NOO???333 3 43 PO3l0 0 0( w'''F    55A;;//9j"9::LLL  %77-
 -
 87  ;: 0/	 -
` --(((F   5 5	 5 QG,,$77Aq6**LLL  5$-88> > 98  +* 87 -,>( 
G	GH
H	HI
F	FG
I	 JK	 , , ,    5	
D%tT**+	
E5%%4..)	
D$A	
E4!	uiii(	1v&	taS!	b!	  (?.(PQQN N RQ N.   * 5	
D%q!%	
E5%%1++&	
D$%	
E4#	ulll+	yyy)	taV$	qc"	
D%tT**+	
E5%%4..)	
D$%	
E4#	u6667	uuQ~~.	taV$	qc"	uooo.	|||,	taS!	b!) 2 (?.(PQQN N RQ3 4N.IO IO IOX 888	
D%	
D%	
D%$	
D%$	
E5"*%	
E4$	
E5"*%	
E4$	  .99: : :9 :$ 888	
D%	
D%	
D%$	
D%$	
E5"*%	
E4$
 
 .99: : :9
 
:$ yyy11FFF  +dE];;$77.992 2 :9 87 <;  2122 888	
D%$	
D%$	
E5"*%	
E4$	  .99: : :9 :" 111   " .99: : :9# $:$ '(@@@  .99: : :9	 
:" &&&    .99
: 
: :9  
: +dE];;$77.99o8 o8 :9 87 <;o8d  	 
CC**.//!3445 
CC**.//001   +dE];;$77.99dN dN :9 87 <;! &dNN +dE];;$77.99  :9 87 <;* +^n-LMM= = NM=<8 8 8 LG	6 	    .99"K "K :9 "K "K "Kr!   