
    PiIK                     z   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZ d dlmZmZ d fdZd Zd	 Zd
 Zd Zd Zd Zej                            ddgez   ez             d             Zd Zd Zej                            dddg          d             Zd Zd Zej                            dej                             dd          dddfej                             d          ej                             d          ddddfej                             dd          d ddfej                             d          ej                             d          dd dd fej                             dd          d! dd"fej                             d          ej                             d          dd# dd$fej                             dd          dd$d$fej                             d          ej                             d          ddddfej                             dd          d% d$d&fej                             d          ej                             d          dd' dd$fg
          ej                            d(d)d*g          d+                         Z!d, Z"d- Z#d. Z$d/ Z%ej                            d0dd1d2gfd3 d4d5ggg          ej                            d6d)d*g          d7                         Z&d8 Z'd9 Z(ej                            d:d;d<g          ej                            d=g d>          d?                         Z)ej                            d@ddA g          dB             Z*ej                            d:d;d<g          ej                            d@ddC g          dD                         Z+dS )E    N)make_pipeline)FunctionTransformerStandardScaler)_convert_containerassert_allclose_dense_sparseassert_array_equal)CSC_CONTAINERSCSR_CONTAINERSc                     | S N )Xaks      /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/preprocessing/tests/test_function_transformer.py<lambda>r      s         c                       fd}|S )Nc                                          |                                |                               |            |           S r   )appendextendupdate)r   argskwargs
args_storefunckwargs_stores      r   _funcz_make_func.<locals>._func   sL    !$F###tAwwr   r   )r   r   r   r   s   ``` r   
_make_funcr      s/           Lr   c                     g } i }t          j        d                              d          }t          t	          t          | |                                        |          |d           | |gk    sJ d                    |                       |rJ d                    |                      g | d d <   |                                 t	          t          | |                                        |          }t          ||d           | |gk    sJ d                    |                       |rJ d                    |                      d S )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AKKANN	4   !?FFJFWW    =DD,DWW 
 JqqqM%:|,, ill  Q L   
 !?FFJFWW    =DD,DWW   r   c                      t          j        d                              d          } t          t	          t           j                                      |           t          j        |                      d S )Nr!   r"   )r&   r'   r(   r   r   log1pr)   r   s    r   test_np_logr1   D   sa    
	"f%%A BH%%//22
    r   c                     t          j        ddd                              d          } t          t           j        t          d                    }t          |                    |           t          j        | d                     d S 	Nr      r!   numr"      decimalskw_args)r&   linspacer(   r   arounddictr   r)   r   Fs     r   test_kw_argrA   N   sv    
Aqb!!!))&11ABItQ/?/?/?@@@A q{{1~~ryQ'?'?'?@@@@@r   c                  .   t          j        ddd                              d          } t          t           j        t          d                    }d|j        d	<   t          |                    |           t          j        | d                     d S )
Nr   r4   r!   r5   r"   r7   r8   r:   r9   	r&   r<   r(   r   r=   r>   r;   r   r)   r?   s     r   test_kw_arg_updaterD   W   s    
Aqb!!!))&11ABItQ/?/?/?@@@AAIj q{{1~~ryQ'?'?'?@@@@@r   c                  D   t          j        ddd                              d          } t          t           j        t          d                    }t          d          |_        t          |                    |           t          j        | d                     d S r3   rC   r?   s     r   test_kw_arg_resetrF   b   s    
Aqb!!!))&11ABItQ/?/?/?@@@Aa   AI q{{1~~ryQ'?'?'?@@@@@r   c                  x   t          j        g d                              d          } t          t           j        t           j        t          d                    }t          |                    |	                    |                     t          j        t          j        |           d                     d S )Nr4      	      r$   r$   r7   r8   )r   inverse_funcinv_kw_args)
r&   arrayr(   r   sqrtr=   r>   r   inverse_transformr)   r?   s     r   test_inverse_transformrR   m   s    
''//A 	WY!$$$	 	 	A
 	AKKNN++
	"'!**q)))    r   sparse_containerc                    t          j        g dt           j                                      d          }|  | |          }t	          t           j        t           j        | d udd          }d}t          j        t          |          5  |
                    |           d d d            n# 1 swxY w Y   t	          t           j        t           j        | d udd          }t          j                    5  t          j        dt                     |                    |          }d d d            n# 1 swxY w Y   t#          ||                    |                     d S )	NrH   dtyperL   T)r   rM   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&   rO   float64r(   r   rP   r=   pytestwarnsUserWarningfitexpm1r/   warningscatch_warningssimplefilterfit_transformr   rQ   )rS   r   transwarning_messageXts        r   test_check_inverserj   |   s   
bj11199&AAA#QWY&d2  E	"  
k	9	9	9  		!                XX&d2  E 
	 	"	" $ $g{333  ##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ !E$;$;B$?$?@@@@@s$   
B,,B03B040D00D47D4c                  N   t          j        g dt           j                                      d          } t	          t           j        d dd          }t          j                    5  t          j        dt                     |
                    |            d d d            n# 1 swxY w Y   t	          d t           j        dd          }t          j                    5  t          j        dt                     |
                    |            d d d            d S # 1 swxY w Y   d S )NrH   rU   rL   T)r   rM   rX   rY   r\   )r&   rO   r]   r(   r   rb   rc   rd   re   r`   ra   )r   rg   s     r   /test_check_inverse_func_or_inverse_not_providedrl      s    	bj11199&AAAXDt  E 
	 	"	"  g{333		!                t  E 
	 	"	"  g{333		!                 s$   &0B""B&)B&0DD!Dc                      t          j        d          } |                     t          j                            dd                    }t                      }|                    |          }t          |d          sJ d S )Npandasd   r!   loc)	r^   importorskip	DataFramer&   randomrandnr   rf   hasattr)pdX_dftransformer
X_df_transs       r   test_function_transformer_framerz      sm    		X	&	&B<<	R0011D%''K**400J:u%%%%%%%r   X_typerO   seriesc                 b    ddddddd                                  D             dg d	}t          | d
g          }fd} fd}t          ||dd          }d}t          j        t
          |          5  |                    |           ddd           dS # 1 swxY w Y   dS )zKCheck that `FunctionTransformer.check_inverse` raises error on mixed dtype.r4   r$   r7   fivesix)onetwothreer#      c                     i | ]\  }}||	S r   r   ).0keyvalues      r   
<dictcomp>zJtest_function_transformer_raise_error_with_mixed_dtype.<locals>.<dictcomp>   s    DDDjc5ucDDDr   object)r   r   r   r   r   r#   r   r   columns_namerV   c                 z     t          j         fdt           j                  D             t                    S )Nc                 ,    g | ]}|                  S r   r   )r   ir   mappings     r   
<listcomp>zXtest_function_transformer_raise_error_with_mixed_dtype.<locals>.func.<locals>.<listcomp>   s!    >>>11>>>r   rU   )r&   rO   rangesizer   )r   r   s   `r   r   zDtest_function_transformer_raise_error_with_mixed_dtype.<locals>.func   s9    x>>>>>af>>>fMMMMr   c                 D    t          fd| D             dg          S )Nc                      g | ]
}|         S r   r   )r   xinverse_mappings     r   r   z`test_function_transformer_raise_error_with_mixed_dtype.<locals>.inverse_func.<locals>.<listcomp>   s    +++A_Q+++r   r   r   )r   )r   r{   rV   r   s    r   rM   zLtest_function_transformer_raise_error_with_mixed_dtype.<locals>.inverse_func   s<    !+++++++!	
 
 
 	
r   FT)r   rM   rY   rX   L'check_inverse' is only supported when all the elements in `X` is numerical.rZ   N)itemsr   r   r^   raises
ValueErrorra   )	r{   datar   rM   rx   msgrV   r   r   s	   `     @@@r   6test_function_transformer_raise_error_with_mixed_dtyper      sQ    A&UCCGDDGMMOODDDOE666DdF'%PPPDN N N N N
 
 
 
 
 
 
 &uD  K YC	z	-	-	-                   s   B$$B(+B(c                      t          j        d          } |                     g dg dd          }t          d d d          }|                    |          }t          ||d	z              d
S )z8Check support for dataframes with only numerical values.rn   r4   r$   r7   )rI   r#   r   r   bc                     | dz   S Nr$   r   r   s    r   r   z`test_function_transformer_support_all_nummerical_dataframes_check_inverse_True.<locals>.<lambda>   s
    q1u r   c                     | dz
  S r   r   r   s    r   r   z`test_function_transformer_support_all_nummerical_dataframes_check_inverse_True.<locals>.<lambda>   s
    QU r   Tr   rM   rX   r$   N)r^   rq   rr   r   rf   r   )rv   dfrx   df_outs       r   Ntest_function_transformer_support_all_nummerical_dataframes_check_inverse_Truer      s    		X	&	&B	IIIIII66	7	7B%_??$  K
 &&r**F a00000r   c                  $   t          j        d          } t          d d d          }|                     g dg dd          }d	}t          j        t
          |
          5  |                    |           ddd           dS # 1 swxY w Y   dS )zYCheck error is raised when check_inverse=True.

    Non-regresion test for gh-25261.
    rn   c                     | S r   r   r   s    r   r   zQtest_function_transformer_with_dataframe_and_check_inverse_True.<locals>.<lambda>   s    q r   c                     | S r   r   r   s    r   r   zQtest_function_transformer_with_dataframe_and_check_inverse_True.<locals>.<lambda>   s     r   Tr   r   r   r   cr   r   rZ   N)r^   rq   r   rr   r   r   ra   )rv   rx   df_mixedr   s       r   ?test_function_transformer_with_dataframe_and_check_inverse_Truer      s    
 
	X	&	&B%[{{$  K ||)))///BBCCH
XC	z	-	-	- " "!!!" " " " " " " " " " " " " " " " " "s   "BB	B	z.X, feature_names_out, input_features, expectedro   r7   
one-to-one)x0x1x2r   c                     dS )Nr   r   rx   input_featuress     r   r   r     s    
 r   c                     dS )Nr   der   r   s     r   r   r     s     r   r   c                 &    t          |          dz   S )N)r   tupler   s     r   r   r         n0E0E0N r   )r   r   r   r   c                 &    t          |          dz   S N)r   r   r   s     r   r   r      r   r   r   c                 &    t          |          dz   S )N)r   r   r   s     r   r   r   5  r   r   )r   r   r   r   c                 &    t          |          dz   S r   r   r   s     r   r   r   <  r   r   rY   TFc                 t   t          | t                    r)t          j        d          }|                    |           } t          ||          }|                    |            |                    |          }t          |t          j	                  sJ |j
        t          k    sJ t          ||           d S )Nrn   feature_names_outrY   )
isinstancer>   r^   rq   rr   r   ra   get_feature_names_outr&   ndarrayrV   r   r   )r   r   r   expectedrY   rv   rx   namess           r   /test_function_transformer_get_feature_names_outr      s    ^ !T  **LLOO%+h  K OOA--n==EeRZ(((((;&    uh'''''r   c                  8   t          dd          } t          j                            dd          }|                     |           |                     d          }t          |t          j                  sJ |j        t          k    sJ t          |d           d S )Nr   Fr   ro   r$   r   )r   r&   rs   randrf   r   r   r   rV   r   r   )rx   r   r   s      r   Btest_function_transformer_get_feature_names_out_without_validationr   T  s    %uUUUK
	sAAa   --j99EeRZ(((((;&    uj)))))r   c                      t                      } t          j                            dd          }|                     |           d}t          j        t          |          5  |                                  d d d            d S # 1 swxY w Y   d S )Nro   r$   zCThis 'FunctionTransformer' has no attribute 'get_feature_names_out'rZ   )	r   r&   rs   r   rf   r^   r   AttributeErrorr   )rx   r   r   s      r   3test_function_transformer_feature_names_out_is_Noner   _  s    %''K
	sAAa   
OC	~S	1	1	1 , ,))+++, , , , , , , , , , , , , , , , , ,s   !BB
Bc                     d } d }t          | |t          d          d          }t          j        d          }|                    t
          j                            d          t
          j                            d          d	          }|                    |           |	                                }t          |t
          j                  sJ |j        t          k    sJ t          |d
           d S )Nc                     t          j        | t           j                            t	          |           |          gd          S )Nr4   axis)r&   concatenaters   r   len)r   ns     r   add_n_random_featureszYtest_function_transformer_feature_names_out_uses_estimator.<locals>.add_n_random_featuresj  s2    ~q")..Q";";<1EEEEr   c                 n    | j         d         }t          |          d t          |          D             z   S )Nr   c                     g | ]}d | S )rndr   )r   r   s     r   r   zitest_function_transformer_feature_names_out_uses_estimator.<locals>.feature_names_out.<locals>.<listcomp>o  s    &C&C&CQyQyy&C&C&Cr   )r;   listr   )rx   r   r   s      r   r   zUtest_function_transformer_feature_names_out_uses_estimator.<locals>.feature_names_outm  s7    $N##&C&C%((&C&C&CCCr   r7   )r   T)r   r   r;   rY   rn   ro   r   )r   r   rnd0rnd1rnd2)r   r>   r^   rq   rr   r&   rs   r   rf   r   r   r   rV   r   r   )r   r   rx   rv   r   r   s         r   :test_function_transformer_feature_names_out_uses_estimatorr   i  s    F F FD D D &"+q				  K 
	X	&	&B	BINN3//binnS6I6IJJ	K	KBb!!!--//EeRZ(((((;&    u@AAAAAr   c                  $   d } d }t          j        ddgddgddgg          }t          | |d          }|                    |          }|j        |j        d         k    sJ |                    |           |j        |j        d         k    sJ d	S )
zSTest that function transformer does not reset estimator in
    `inverse_transform`.c                 t    t          j        | j        d         df          }t          j        | |fd          S )Nr   r4   r   )r&   onesshaper   )r   X_ones     r   add_constant_featurezHtest_function_transformer_validate_inverse.<locals>.add_constant_feature  s4    Q((~q%jq1111r   c                     | d d d df         S )Nr   r0   s    r   inverse_add_constantzHtest_function_transformer_validate_inverse.<locals>.inverse_add_constant  s    CRCyr   r4   r$   r7   rI   T)r   rM   rY   N)r&   rO   r   rf   n_features_in_r   rQ   )r   r   r   rg   X_transs        r   *test_function_transformer_validate_inverser     s    2 2 2   	1a&1a&1a&)**A!)  E
 !!!$$G171:----	G$$$171:------r   zfeature_names_out, expectedpetcolorc                     d |D             S )Nc                     g | ]}| d S )_outr   )r   r   s     r   r   z<lambda>.<locals>.<listcomp>  s    777AZZZ777r   r   )estr   s     r   r   r     s    77777 r   pet_out	color_outin_pipelinec                     t          j        d          }|                    ddgddgd          } fd}t          |           }|rt	          |          }|                    |          }t          ||j                  sJ |                                }t          |t          j	                  sJ |j
        t          k    sJ t          ||           d	S )
zHCheck that get_feature_names_out works with DataFrames with string data.rn   dogcatredgreen)r   r   c                     dk    r| S  d | j                   }|                     t          t          | j         |                              S )Nr   columns)r   renamer>   zip)r   namer   s     r   r   zCtest_get_feature_names_out_dataframe_with_string_data.<locals>.func  sO    ,,H$$T1955D88DQY)=)=$>$>8???r   r   r   N)r^   rq   rr   r   r   rf   r   r   r&   r   rV   r   r   )	r   r   r   rv   r   r   rx   r   r   s	   `        r   5test_get_feature_names_out_dataframe_with_string_datar    s     
	X	&	&B
eU^ug6FGGHHA@ @ @ @ @ &4CTUUUK 1#K00''**Ggr|,,,,,--//EeRZ(((((;&    uh'''''r   c                     t          j        d          } |                     g dg dd          }t          t          j        d          }t          j                    5  t          j        dt                     |
                    d           d	d	d	           n# 1 swxY w Y   |                    |          }t          || j                  sJ t          |j        d
dg           t          d           }|
                    d           t          j                    5  t          j        dt                     |                    |          }d	d	d	           n# 1 swxY w Y   t          || j                  sJ t          |j        d
dg           t          d           }dD ]i}|
                    |           d| d| d}t          j        t          |          5  |                    |           d	d	d	           n# 1 swxY w Y   j|
                    d           t          j                    5  t          j        dt                     |                    |           d	d	d	           d	S # 1 swxY w Y   d	S )z5Check behavior of set_output with different settings.rn   r   r!      ro   r   r   r   r\   r)   Nr   r   c                     d| z  S r   r   r   s    r   r   z&test_set_output_func.<locals>.<lambda>  s
    q1u r   c                 *    t          j        |           S r   )r&   asarrayr   s    r   r   z&test_set_output_func.<locals>.<lambda>  s    "*Q-- r   )rn   polarsz'When `set_output` is configured to be 'z'.*z DataFrame.*rZ   default)r^   rq   rr   r   r&   logrc   rd   re   r`   
set_outputrf   r   r   r   r_   )rv   r   ftr   ft_npr)   r   s          r   test_set_output_funcr    s   		X	&	&B
999===99::A	RV|	D	D	DB 
	 	"	" * *g{333
)))* * * * * * * * * * * * * * * q!!Ggr|,,,,,wc
333	__	-	-BMMHM%%% 
	 	"	" & &g{333""1%%& & & & & & & & & & & & & & & gr|,,,,,wc
333   7 788E) # #	9---i  I    	 \+S111 	# 	#"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 
y)))		 	"	"  g{333A                 sH   1BB #B #0EE#&E#&HH	H	=0I::I>I>c                     t          j        d          } d }t          t          t          j        |          t                                }|                     ddgddgdd	ggd
dg          }|                    |          }|	                                
                                ddgk    sJ t          |t          j                  sJ dS )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
    rn   c                     d |D             S )Nc                     g | ]}|d z   S __logr   r   r  s     r   r   zStest_consistence_column_name_between_steps.<locals>.with_suffix.<locals>.<listcomp>      1114w111r   r   _r   s     r   with_suffixz?test_consistence_column_name_between_steps.<locals>.with_suffix      1151111r   r  r4   r$   r7   rI   r#   r   r   r   r   a__logb__logN)r^   rq   r   r   r&   r/   r   rr   rf   r   tolistr   r   )rv   r  pipeliner   r   s        r   *test_consistence_column_name_between_stepsr#    s     
	X	&	&B2 2 2 BHDDDnFVFV H 
1v1v1v.c
	C	CB$$R((G))++224488LLLLLgrz*******r   dataframe_librn   r  transform_output)r  rn   r  c                 F   t          j        |           }|dk    rt          j        |           |                    g dg dd          }d }t          |                              |          }|                    |          }t          t          j        |          t          j        |                     |	                                }t          |j                   |d|j                  k    sJ |                                 |d|j                  k    sJ dS )	z8Check that we overwrite the column names when we should.numpyr   r  r   c                     d |D             S )Nc                     g | ]}|d z   S r  r   r  s     r   r   zYtest_function_transformer_overwrite_column_names.<locals>.with_suffix.<locals>.<listcomp>  r  r   r   r  s     r   r  zEtest_function_transformer_overwrite_column_names.<locals>.with_suffix  r  r   r  r	  N)r^   rq   rr   r   r  rf   r   r&   r  r   r   r   r!  )r$  r%  libr   r  rx   r   feature_namess           r   0test_function_transformer_overwrite_column_namesr,    s.    
m
,
,C7"",---	YYY]]];;	<	<B2 2 2 &DDDOO" P  K ''++Grz'**BJrNN;;;5577M  KKbj$A$AAAAA!![[rz%B%BBBBBBBr   r   c                     d |D             S )Nc                     g | ]}| d S _logr   r  s     r   r   z<lambda>.<locals>.<listcomp>      $E$E$Et]]]$E$E$Er   r   r  s     r   r   r         $E$Eu$E$E$E r   c                    t          j        d          }|                    g dg dd          }t          |           }|                    |          }t          t          j        |          t          j        |                     |                                }t          |j
                  t          |          k    sJ dS )zCheck the same as `test_function_transformer_overwrite_column_names`
    but for the specific case of pandas where column names can be numerical.rn   r   r  )r   r4   r  N)r^   rq   rr   r   rf   r   r&   r  r   r   r   )r   rv   r   rx   r   r+  s         r   :test_function_transformer_overwrite_column_names_numericalr4    s     
	X	&	&B	)))66	7	7B%8IJJJK''++Grz'**BJrNN;;;5577M  D$7$7777777r   c                     d |D             S )Nc                     g | ]}| d S r/  r   r  s     r   r   z<lambda>.<locals>.<listcomp>/  r1  r   r   r  s     r   r   r   /  r2  r   c                 4    t          j                   }|                    g dg dd          } fd}t          ||          }d}t          j        t
          |          5  |                    |          j         ddd           dS # 1 swxY w Y   dS )	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                 n    dk    r|                      ddi          S |                      ddi          S )Nrn   r   r   r   )r   )r   r$  s    r   r   zAtest_function_transformer_error_column_inconsistent.<locals>.func:  s<    H$$99c3Z900099c3Z(((r   r  z:The output generated by `func` have different column namesrZ   N)r^   rq   rr   r   r   r   rf   r   )r$  r   r*  r   r   rx   r%   s   `      r   3test_function_transformer_error_column_inconsistentr9  ,  s     
m
,
,C	YYY]]];;	<	<B) ) ) ) ) &4CTUUUKJG	z	1	1	1 . .!!"%%--. . . . . . . . . . . . . . . . . .s   %BBB),rc   r'  r&   r^   sklearn.pipeliner   sklearn.preprocessingr   r   sklearn.utils._testingr   r   r   sklearn.utils.fixesr	   r
   r   r-   r1   rA   rD   rF   rR   markparametrizerj   rl   rz   r   r   r   rs   r   r   r   r   r   r   r  r  r#  r,  r4  r9  r   r   r   <module>r@     s         * * * * * * E E E E E E E E         
 ? > > > > > > > /C.B    ' ' 'T  A A AA A AA A A   +dVn-D~-UVV A  A WV AF  && & & GX#677  87:1 1 1" " "  4 INN3""	
 )..%%BINN3,?,?@@	
 INN3""::	
 )..%%BINN3,?,?@@??	
 INN3""NN#	
 )..%%BINN3,?,?@@NN	
 INN3""	
 )..%%BINN3,?,?@@	
 INN3""NN 	
 )..%%BINN3,?,?@@NN	
AGJ JV dE]33( ( 43WJ JX("* * *, , ,B B B0. . .0 !	w'(	7	7)[9QR  u66( ( 76 (6+ + +\+ + +. 8X*>??+-L-L-LMMC C NM @?C, EEF 8 8	 8 8X*>??EEF . .	  @?
. . .r   