
    -iHK                     l   S SK r S SKrS SKrS SKJr  S SKJrJr  S SK	J
r
JrJr  S SKJrJr  S 4S jrS rS	 rS
 rS rS rS r\R.                  R1                  SS/\-   \-   5      S 5       rS rS r\R.                  R1                  SSS/5      S 5       rS rS r\R.                  R1                  S\R>                  RA                  SS5      SSS4\R>                  RA                  S5      \R>                  RA                  S5      S.SSS4\R>                  RA                  SS5      S SS4\R>                  RA                  S5      \R>                  RA                  S5      S.S SS 4\R>                  RA                  SS5      S! SS"4\R>                  RA                  S5      \R>                  RA                  S5      S.S# SS$4\R>                  RA                  SS5      SS$S$4\R>                  RA                  S5      \R>                  RA                  S5      S.SSS4\R>                  RA                  SS5      S% S$S&4\R>                  RA                  S5      \R>                  RA                  S5      S.S' SS$4/
5      \R.                  R1                  S(S)S*/5      S+ 5       5       r!S, r"S- r#S. r$S/ r%\R.                  R1                  S0SS1S2/4S3 S4S5///5      \R.                  R1                  S6S)S*/5      S7 5       5       r&S8 r'S9 r(\R.                  R1                  S:S;S</5      \R.                  R1                  S=/ S>Q5      S? 5       5       r)\R.                  R1                  S@SSA /5      SB 5       r*\R.                  R1                  S:S;S</5      \R.                  R1                  S@SSC /5      SD 5       5       r+g)E    N)make_pipeline)FunctionTransformerStandardScaler)_convert_containerassert_allclose_dense_sparseassert_array_equal)CSC_CONTAINERSCSR_CONTAINERSc                     U $ N )Xaks      h/var/www/html/venv/lib/python3.13/site-packages/sklearn/preprocessing/tests/test_function_transformer.py<lambda>r      s        c                    ^ ^^ U UU4S jnU$ )Nc                 z   > TR                  U 5        TR                  U5        TR                  U5        T" U 5      $ r   )appendextendupdate)r   argskwargs
args_storefunckwargs_stores      r   _func_make_func.<locals>._func   s6    !$F#Awr   r   )r   r   r   r   s   ``` r   
_make_funcr       s     Lr   c                  
   / n 0 n[         R                  " S5      R                  S5      n[        [	        [        X5      5      R                  U5      US5        X/:X  d   SR                  U S95       eU(       a   SR                  US95       e/ U S S & UR                  5         [	        [        X5      5      R                  U5      n[        X2SS9  X/:X  d   SR                  U S95       eU(       a   SR                  US95       eg )N
         z*transform should have returned X unchangedz5Incorrect positional arguments passed to func: {args})r   z3Unexpected keyword arguments passed to func: {args})err_msg)	nparangereshaper   r   r    	transformformatclear)r   r   r   transformeds       r   test_delegate_to_funcr.      s)    JL
		"f%AJz@AKKAN	4  ?FFJFW  =DD,DW
 JqM%:,il   L
  ?FFJFW  =DD,DW|r   c                      [         R                  " S5      R                  S5      n [        [	        [         R
                  5      R                  U 5      [         R
                  " U 5      5        g )Nr"   r#   )r'   r(   r)   r   r   log1pr*   r   s    r   test_np_logr2   D   sF    
		"f%A BHH%//2
r   c                      [         R                  " SSSS9R                  S5      n [        [         R                  [        SS9S9n[        UR                  U 5      [         R                  " U SS95        g 	Nr      r"   numr#      decimalskw_args)r'   linspacer)   r   arounddictr   r*   r   Fs     r   test_kw_argrB   N   sS    
Aqb!))&1ABIItQ/?@A q{{1~ryyQ'?@r   c                     [         R                  " SSSS9R                  S5      n [        [         R                  [        SS9S9nSUR                  S	'   [        UR                  U 5      [         R                  " U SS95        g )
Nr   r5   r"   r6   r#   r8   r9   r;   r:   	r'   r=   r)   r   r>   r?   r<   r   r*   r@   s     r   test_kw_arg_updaterE   W   sa    
Aqb!))&1ABIItQ/?@AAIIj q{{1~ryyQ'?@r   c                     [         R                  " SSSS9R                  S5      n [        [         R                  [        SS9S9n[        SS9Ul        [        UR                  U 5      [         R                  " U SS95        g r4   rD   r@   s     r   test_kw_arg_resetrG   b   s_    
Aqb!))&1ABIItQ/?@Aa AI q{{1~ryyQ'?@r   c                  P   [         R                  " / SQ5      R                  S5      n [        [         R                  [         R
                  [        SS9S9n[        UR                  UR                  U 5      5      [         R
                  " [         R                  " U 5      SS95        g )Nr5      	      r%   r%   r8   r9   )r   inverse_funcinv_kw_args)
r'   arrayr)   r   sqrtr>   r?   r   inverse_transformr*   r@   s     r   test_inverse_transformrS   m   ss    
''/A 	WWYY!$	A
 	AKKN+
		"''!*q)r   sparse_containerc                    [         R                  " / SQ[         R                  S9R                  S5      nU b  U " U5      n[	        [         R
                  [         R                  U S LSSS9nSn[        R                  " [        US9   UR                  U5        S S S 5        [	        [         R                  [         R                  U S LSSS9n[        R                  " 5          [        R                  " S[        5        UR!                  U5      nS S S 5        [#        XR%                  W5      5        g ! , (       d  f       N= f! , (       d  f       N:= f)	NrI   dtyperM   T)r   rN   accept_sparsecheck_inversevalidatezThe provided functions are not strictly inverse of each other. If you are sure you want to proceed regardless, set 'check_inverse=False'.matcherror)r'   rP   float64r)   r   rQ   r>   pytestwarnsUserWarningfitexpm1r0   warningscatch_warningssimplefilterfit_transformr   rR   )rT   r   transwarning_messageXts        r   test_check_inverserk   |   s   
bjj199&AA#QWWYY&d2E	"  
k	9		! 
:  XXXX&d2E 
	 	 	"g{3  # 
# !$;$;B$?@ 
:	9 
#	"s   D0 -E0
D>
Ec                  @   [         R                  " / SQ[         R                  S9R                  S5      n [	        [         R
                  S SSS9n[        R                  " 5          [        R                  " S[        5        UR                  U 5        S S S 5        [	        S [         R
                  SSS9n[        R                  " 5          [        R                  " S[        5        UR                  U 5        S S S 5        g ! , (       d  f       Ns= f! , (       d  f       g = f)NrI   rV   rM   T)r   rN   rY   rZ   r]   )r'   rP   r^   r)   r   rc   rd   re   rf   ra   rb   )r   rh   s     r   /test_check_inverse_func_or_inverse_not_providedrm      s     	bjj199&AAXXDtE 
	 	 	"g{3		! 
#  tE 
	 	 	"g{3		! 
#	" 
#	" 
#	"s   $-C>-D>
D
Dc                      [         R                  " S5      n U R                  [        R                  R                  SS5      5      n[        5       nUR                  U5      n[        US5      (       d   eg )Npandasd   r"   loc)	r_   importorskip	DataFramer'   randomrandnr   rg   hasattr)pdX_dftransformer
X_df_transs       r   test_function_transformer_framer{      sZ    			X	&B<<		R01D%'K**40J:u%%%%r   X_typerP   seriesc                 V  ^ ^^	^
 SSSSSS.m
T
R                  5        VVs0 s H  u  pX!_M	     snnm	Sm/ SQn[        UT S	/TS
9nU
4S jnU UU	4S jn[        XESSS9nSn[        R                  " [
        US9   UR                  U5        SSS5        gs  snnf ! , (       d  f       g= f)zKCheck that `FunctionTransformer.check_inverse` raises error on mixed dtype.r5   r%   r8   fivesix)onetwothreer$      object)r   r   r   r   r   r$   r   valuecolumns_namerW   c                    > [         R                  " [        U R                  5       Vs/ s H
  nTX      PM     sn[        S9$ s  snf )NrV   )r'   rP   rangesizer   )r   imappings     r   r   Dtest_function_transformer_raise_error_with_mixed_dtype.<locals>.func   s4    xxaff>1>fMM>s   Ac                 P   > [        U  Vs/ s H  nTU   PM
     snTS/TS9$ s  snf )Nr   r   )r   )r   xr|   rW   inverse_mappings     r   rN   Ltest_function_transformer_raise_error_with_mixed_dtype.<locals>.inverse_func   s5    !)*+A_Q+!	
 	
+s   #FT)r   rN   rZ   rY   L'check_inverse' is only supported when all the elements in `X` is numerical.r[   N)itemsr   r   r_   raises
ValueErrorrb   )r|   keyr   datar   rN   ry   msgrW   r   r   s   `       @@@r   6test_function_transformer_raise_error_with_mixed_dtyper      s     A&UCG4;MMODOjcuzODOE6DdF'%PDN
 &uDK YC	z	- 
.	-- E, 
.	-s   B9B
B(c                      [         R                  " S5      n U R                  / SQ/ SQS.5      n[        S S SS9nUR	                  U5      n[        X1S	-   5        g
)z8Check support for dataframes with only numerical values.ro   r5   r%   r8   )rJ   r$   r   r   bc                     U S-   $ Nr%   r   r   s    r   r   `test_function_transformer_support_all_nummerical_dataframes_check_inverse_True.<locals>.<lambda>   s    q1ur   c                     U S-
  $ r   r   r   s    r   r   r      s    QUr   Tr   rN   rY   r%   N)r_   rr   rs   r   rg   r   )rw   dfry   df_outs       r   Ntest_function_transformer_support_all_nummerical_dataframes_check_inverse_Truer      sT    			X	&B	II6	7B%?$K
 &&r*F a0r   c                     [         R                  " S5      n [        S S SS9nU R                  / SQ/ SQS.5      nS	n[         R                  " [
        US
9   UR                  U5        SSS5        g! , (       d  f       g= f)zQCheck error is raised when check_inverse=True.

Non-regresion test for gh-25261.
ro   c                     U $ r   r   r   s    r   r   Qtest_function_transformer_with_dataframe_and_check_inverse_True.<locals>.<lambda>   s    qr   c                     U $ r   r   r   s    r   r   r      s    r   Tr   r   r   r   cr   r   r[   N)r_   rr   r   rs   r   r   rb   )rw   ry   df_mixedr   s       r   ?test_function_transformer_with_dataframe_and_check_inverse_Truer      se    
 
		X	&B%{$K ||)/BCH
XC	z	-! 
.	-	-s   A22
B z.X, feature_names_out, input_features, expectedrp   r8   
one-to-one)x0x1x2r   c                     g)Nr   r   ry   input_featuress     r   r   r     s    
r   c                     g)Nr   der   r   s     r   r   r     s    r   r   c                     [        U5      S-   $ )N)r   tupler   s     r   r   r         n0E0Nr   )r   r   r   r   c                     [        U5      S-   $ N)r   r   r   s     r   r   r      r   r   r   c                     [        U5      S-   $ )N)r   r   r   s     r   r   r   5  r   r   )r   r   r   r   c                     [        U5      S-   $ r   r   r   s     r   r   r   <  r   r   rZ   TFc                 V   [        U [        5      (       a'  [        R                  " S5      nUR	                  U 5      n [        XS9nUR                  U 5        UR                  U5      n[        U[        R                  5      (       d   eUR                  [        :X  d   e[        Xs5        g )Nro   feature_names_outrZ   )
isinstancer?   r_   rr   rs   r   rb   get_feature_names_outr'   ndarrayrW   r   r   )r   r   r   expectedrZ   rw   ry   namess           r   /test_function_transformer_get_feature_names_outr      s    ^ !T  *LLO%+K OOA--n=EeRZZ((((;;&   u'r   c                  "   [        SSS9n [        R                  R                  SS5      nU R	                  U5        U R                  S5      n[        U[        R                  5      (       d   eUR                  [        :X  d   e[        US5        g )Nr   Fr   rp   r%   r   )r   r'   rt   randrg   r   r   r   rW   r   r   )ry   r   r   s      r   Btest_function_transformer_get_feature_names_out_without_validationr   T  ss    %uUK
		sAAa --j9EeRZZ((((;;&   uj)r   c                     [        5       n [        R                  R                  SS5      nU R	                  U5        Sn[
        R                  " [        US9   U R                  5         S S S 5        g ! , (       d  f       g = f)Nrp   r%   zCThis 'FunctionTransformer' has no attribute 'get_feature_names_out'r[   )	r   r'   rt   r   rg   r_   r   AttributeErrorr   )ry   r   r   s      r   3test_function_transformer_feature_names_out_is_Noner   _  sW    %'K
		sAAa 
OC	~S	1))+ 
2	1	1s   A11
A?c                     S n S n[        U U[        SS9SS9n[        R                  " S5      nUR	                  [
        R                  R                  S5      [
        R                  R                  S5      S	.5      nUR                  U5        UR                  5       n[        U[
        R                  5      (       d   eUR                  [        :X  d   e[        US
5        g )Nc                 ~    [         R                  " U [         R                  R                  [	        U 5      U5      /SS9$ )Nr5   axis)r'   concatenatert   r   len)r   ns     r   add_n_random_featuresYtest_function_transformer_feature_names_out_uses_estimator.<locals>.add_n_random_featuresj  s+    ~~q"))..Q";<1EEr   c                     U R                   S   n[        U5      [        U5       Vs/ s H  nSU 3PM
     sn-   $ s  snf )Nr   rnd)r<   listr   )ry   r   r   r   s       r   r   Utest_function_transformer_feature_names_out_uses_estimator.<locals>.feature_names_outm  s>    $N#%(&C(QQCy(&CCC&Cs   ;r8   )r   T)r   r   r<   rZ   ro   rp   r   )r   r   rnd0rnd1rnd2)r   r?   r_   rr   rs   r'   rt   r   rg   r   r   r   rW   r   r   )r   r   ry   rw   r   r   s         r   :test_function_transformer_feature_names_out_uses_estimatorr   i  s    FD &"+q		K 
		X	&B	BIINN3/biinnS6IJ	KBb!--/EeRZZ((((;;&   u@Ar   c                  $   S n S n[         R                  " SS/SS/SS//5      n[        U USS9nUR                  U5      nUR                  UR
                  S   :X  d   eUR                  U5        UR                  UR
                  S   :X  d   eg	)
zOTest that function transformer does not reset estimator in
`inverse_transform`.c                 x    [         R                  " U R                  S   S45      n[         R                  " X4SS9$ )Nr   r5   r   )r'   onesshaper   )r   X_ones     r   add_constant_featureHtest_function_transformer_validate_inverse.<locals>.add_constant_feature  s/    Q(~~qjq11r   c                     U S S 2S S24   $ )Nr   r1   s    r   inverse_add_constantHtest_function_transformer_validate_inverse.<locals>.inverse_add_constant  s    CRCyr   r5   r%   r8   rJ   T)r   rN   rZ   N)r'   rP   r   rg   n_features_in_r   rR   )r   r   r   rh   X_transs        r   *test_function_transformer_validate_inverser     s    2 	1a&1a&1a&)*A!)E
 !!!$G1771:---	G$1771:---r   zfeature_names_out, expectedpetcolorc                 6    U Vs/ s H  o" S3PM	     sn$ s  snf )N_outr   )estr   r   s      r   r   r     s    7As$Z77   pet_out	color_outin_pipelinec                   ^  [         R                  " S5      nUR                  SS/SS/S.5      nU 4S jn[        UT S9nU(       a  [	        U5      nUR                  U5      n[        XsR                  5      (       d   eUR                  5       n[        U[        R                  5      (       d   eUR                  [        :X  d   e[        X5        g	)
zHCheck that get_feature_names_out works with DataFrames with string data.ro   dogcatredgreen)r   r   c                    > TS:X  a  U $ T" S U R                   5      nU R                  [        [        U R                   U5      5      S9$ )Nr   columns)r  renamer?   zip)r   namer   s     r   r   Ctest_get_feature_names_out_dataframe_with_string_data.<locals>.func  sA    ,H$T1995D88DQYY)=$>8??r   r   r   N)r_   rr   rs   r   r   rg   r   r   r'   r   rW   r   r   )	r   r   r   rw   r   r   ry   r   r   s	   `        r   5test_get_feature_names_out_dataframe_with_string_datar    s     
		X	&B
eU^ug6FGHA@ &4CTUK#K0''*Gg||,,,,--/EeRZZ((((;;&   u'r   c                     [         R                  " S5      n U R                  / SQ/ SQS.5      n[        [        R
                  SS9n[        R                  " 5          [        R                  " S[        5        UR                  SS9  S	S	S	5        UR                  U5      n[        X0R                  5      (       d   e[        UR                  S
S/5        [        S 5      nUR                  SS9  [        R                  " 5          [        R                  " S[        5        UR                  U5      nS	S	S	5        [        X0R                  5      (       d   e[        UR                  S
S/5        [        S 5      nS HN  nUR                  US9  SU SU S3n[         R                  " [        US9   UR                  U5        S	S	S	5        MP     UR                  SS9  [        R                  " 5          [        R                  " S[        5        UR                  U5        S	S	S	5        g	! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       M  = f! , (       d  f       g	= f)z5Check behavior of set_output with different settings.ro   r   r"      rp   r   r   r   r]   r*   Nr   r   c                     SU -  $ r   r   r   s    r   r   &test_set_output_func.<locals>.<lambda>  s    q1ur   c                 .    [         R                  " U 5      $ r   )r'   asarrayr   s    r   r   r    s    "**Q-r   )ro   polarsz'When `set_output` is configured to be 'z'.*z DataFrame.*r[   default)r_   rr   rs   r   r'   logrd   re   rf   ra   
set_outputrg   r   r   r  r`   )rw   r   ftr   ft_npr*   r   s          r   test_set_output_funcr    s   			X	&B
9=9:A	RVV|	DB 
	 	 	"g{3
) 
# q!Gg||,,,,wc
3	_	-BMMHM% 
	 	 	"g{3""1% 
# g||,,,,wc
3   78E)	9-5i[I; O  	 \\+S1" 21 * 
y)		 	 	"g{3A 
#	"A 
#	" 
#	" 21
 
#	"s0   +H'-H9/I1-I'
H69
I
I	
I+c                  p   [         R                  " S5      n S n[        [        [        R
                  US9[        5       5      nU R                  SS/SS/SS	//S
S/S9nUR                  U5      nUR                  5       R                  5       SS/:X  d   e[        U[        R                  5      (       d   eg)zCheck that we have a consistence between the feature names out of
`FunctionTransformer` and the feature names in of the next step in the pipeline.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/27695
ro   c                 6    U Vs/ s H  o"S-   PM	     sn$ s  snf N__logr   _r   r  s      r   with_suffix?test_consistence_column_name_between_steps.<locals>.with_suffix      +0154w5111r   r  r5   r%   r8   rJ   r$   r   r   r   r   a__logb__logN)r_   rr   r   r   r'   r0   r   rs   rg   r   tolistr   r   )rw   r  pipeliner   r   s        r   *test_consistence_column_name_between_stepsr%    s     
		X	&B2 BHHDnFVH 
1v1v1v.c
	CB$$R(G))+22488LLLLgrzz****r   dataframe_libro   r  transform_output)r  ro   r  c                    [         R                  " U 5      nUS:w  a  [         R                  " U5        UR                  / SQ/ SQS.5      nS n[        US9R	                  US9nUR                  U5      n[        [        R                  " U5      [        R                  " U5      5        UR                  5       n[        UR                  5      U" SUR                  5      :X  d   eUR                  5       U" SUR                  5      :X  d   eg)	z8Check that we overwrite the column names when we should.numpyr   r	  r   c                 6    U Vs/ s H  o"S-   PM	     sn$ s  snf r  r   r  s      r   r  Etest_function_transformer_overwrite_column_names.<locals>.with_suffix  r   r   r  r  N)r_   rr   rs   r   r  rg   r   r'   r  r   r   r  r#  )r&  r'  libr   r  ry   r   feature_namess           r   0test_function_transformer_overwrite_column_namesr.    s     

m
,C7",-	Y];	<B2 &DOO" P K ''+Grzz'*BJJrN;557M Kbjj$AAAA![rzz%BBBBr   r   c                 6    U Vs/ s H  o" S3PM	     sn$ s  snf N_logr   r  s      r   r   r         u$EutvT]u$E$Er   c                 d   [         R                  " S5      nUR                  / SQ/ SQS.5      n[        U S9nUR	                  U5      n[        [        R                  " U5      [        R                  " U5      5        UR                  5       n[        UR                  5      [        U5      :X  d   eg)zCheck the same as `test_function_transformer_overwrite_column_names`
but for the specific case of pandas where column names can be numerical.ro   r   r	  )r   r5   r  N)r_   rr   rs   r   rg   r   r'   r  r   r   r  )r   rw   r   ry   r   r-  s         r   :test_function_transformer_overwrite_column_names_numericalr4    s     
		X	&B	)6	7B%8IJK''+Grzz'*BJJrN;557M D$7777r   c                 6    U Vs/ s H  o" S3PM	     sn$ s  snf r0  r   r  s      r   r   r   /  r2  r   c                    ^  [         R                  " T 5      nUR                  / SQ/ SQS.5      nU 4S jn[        XAS9nSn[         R                  " [
        US9   UR                  U5      R                    SSS5        g! , (       d  f       g= f)	zCheck that we raise an error when `func` returns a dataframe with new
column names that become inconsistent with `get_feature_names_out`.r   r	  r   c                 X   > TS:X  a  U R                  SS0S9$ U R                  SS05      $ )Nro   r   r   r   )r  )r   r&  s    r   r   Atest_function_transformer_error_column_inconsistent.<locals>.func:  s3    H$99c3Z90099c3Z((r   r  z:The output generated by `func` have different column namesr[   N)r_   rr   rs   r   r   r   rg   r  )r&  r   r,  r   r   ry   r&   s   `      r   3test_function_transformer_error_column_inconsistentr9  ,  sl     

m
,C	Y];	<B) &4UKJG	z	1!!"%-- 
2	1	1s   A??
B),rd   r)  r'   r_   sklearn.pipeliner   sklearn.preprocessingr   r   sklearn.utils._testingr   r   r   sklearn.utils.fixesr	   r
   r    r.   r2   rB   rE   rG   rS   markparametrizerk   rm   r{   r   r   r   rt   r   r   r   r   r   r   r  r  r%  r.  r4  r9  r   r   r   <module>r@     s      * E 
 ? /C 'TAAA +dVn-D~-UV A W AF&& GX#67 8:1"  4 IINN3"	
 ))..%BIINN3,?@	
 IINN3":	
 ))..%BIINN3,?@?	
 IINN3"N#	
 ))..%BIINN3,?@N	
 IINN3"	
 ))..%BIINN3,?@	
 IINN3"N 	
 ))..%BIINN3,?@N	
AGJV dE]3( 4WJX("*,B0.0 !	w'(	7)[9QR u6( 7(6+\+. 8X*>?+-LMC N @C, EF8	8 8X*>?EF.	 @
.r   