o
    iր                    @   sp  d dl Z d dlZd dlZd dlmZ d dlZd dlm	Z	m
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 d d
lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZKmLZL d dlMmNZN eO ZPejQRd ZSdZTdZUeSjVddeTdZWeSjVddeTdZXeSYeUeTeX eW ZZeZd ddf [deTZ\eZddd f [eUdZ]e\^ Z_e]^ Z`dd Zadd Zbdd Zcd d! Zdejefg d"g d#g d$gg d#g d#g d$gd%d&gfg d'g d(gg d'g d(g d(g d(gegdd)gfdejhdgejhejhdggdejhdgejhejhdgejhejhdgejhejhdggegdd)gfgejefd*g d+d,d- Zid.d/ Zjejefd0dgeI eJ ejefd1d2d3gd4d5 Zkejefd6e$d2d7e#d2d8gejefd0dgeI eJ ejefd1d2d3gejefd9ejlejmgejefd:g d;d<d= Znejefd>g d?ejefd@g dAejefd9ejlejmgejefd0dgeI eJ dBdC ZodDdE ZpeDdFdG ZqdHdI ZrdJdK ZsdLdM ZtdNdO ZudPdQ Zvejefd0eIeJ dRdS ZwejefdTd3dgejefd0eIeJ dUdV ZxejefdTd3dgdWdX ZydYdZ Zzejejfd[e8 e7d\ejejfd]eFge:d\ejejfd^e e ed3d_e e d`dae dbdae dcdae ge:d\ddde Z{dfdg Z|dhdi Z}djdk Z~dldm ZejefdTd3dgejefd0eIeJ dndo Zejefdpd3d2gejefdqd3d2gejefd0dgeI eJ drds Zdtdu Zejefd0eIeJ dvdw Zejefd0eIeJ dxdy Zejefd0eJeI dzd{ Zejefd0eJeI d|d} Zd~d Zdd Zejefdd3d2gejefdd3d2gejefdejQYdd)e	jdd)ddgdd ZejefdeJdd Zdd Zejefdg dejefdg ddd ZejefdeJdd Zdd Zdd ZejefdeIdd ZejefdeIdd ZejefdeIdd Zdd Zdd Zdd ZejefdeIdd Zdd ZejefdeIdd Zdd Zdd Zejefdddgdd Zdd ZejefdeJdd Zdd Zdd Zdd Zdd Zejefd0eIeJ ddÄ Zddń ZejefdeJddǄ ZddɄ ZejefdeJdd˄ Zdd̈́ Zejefdg dϢejefdeJddф Zejefdg dϢejefd0eHeI eK ddӄ ZejefdeJddՄ ZejefdeJddׄ ZejefdejgegeI eJ ddڄ Zejefd[e8 dd܄ Zddބ Zdd Zdd Zdd Zdd Zejefd0eHeI eJ dd Zdd Zejefdddgdd Zejefdddgejefdd3d2gejefde]eZgdd Zdd Zdd Zdd ZejefdeZeeZeeZ eeZjgdd Zejefdddgdd Zdd Zdd  Zejefdg ddd ZÐdd ZĐdd Zejefdddgd	d
 Zejefdddgejefdd3d2gdd Zejefdddgejefdd3d2gdd Zejefdddgejefdd3d2gdd Zɐdd Zejefde	jQdddd dgdd eJD  dd Zejefdddgdd Z̐dd  Z͐d!d" Zejefd#eee#e$e"e!gd$d% Zejefd#eee#e$e"e!e egd&d' ZАd(d) Zejefdd3d2gd*d+ ZejejeLed,k d-d.d/d0 ZԐd1d2 ZdS (3      N)sparsestats)config_contextdatasets)clone)NotFittedError)parse)linear_kernel)cross_val_predict)Pipeline)	BinarizerKernelCentererMaxAbsScalerMinMaxScaler
NormalizerPowerTransformerQuantileTransformerRobustScalerStandardScaleradd_dummy_featuremaxabs_scaleminmax_scale	normalizepower_transformquantile_transformrobust_scalescale)BOUNDS_THRESHOLD_handle_zeros_in_scale)SVR)gen_batchesshuffle)_convert_to_numpy_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinations)_get_check_estimator_ids)	_array_api_for_tests_convert_containerassert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equalassert_array_lessskip_if_32bit) check_array_api_input_and_values)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSLIL_CONTAINERS
sp_version)mean_variance_axis        size
   c                 C   s   t | dr	|  } | S )Ntoarray)hasattrr=   a rA   t/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/preprocessing/tests/test_data.pyr=   U   s   
r=   c                 C   s   t | jd S )Nr   )npasarrayshaper?   rA   rA   rB   _check_dim_1axis[   s   rF   c                 C   s<   ||kr| d | |ksJ d S | | ||  |ksJ d S )Nr9   rA   )ibatch_start
batch_stopn
chunk_sizen_samples_seenrA   rA   rB   assert_correct_incr_   s   rM   c               	   C   s   ddg} ddg}t | |D ]7\}}t||}t|}t }t|dd }tt |j|||d W d    n1 s?w   Y  qd S )N      r9   sample_weight)ziprngrandnr   pytestraises
ValueErrorfit)Z
n_samplessZn_featuress	n_samples
n_featuresXyscalerZsample_weight_notOKrA   rA   rB   9test_raises_value_error_if_sample_weights_greater_than_1df   s   
r^   )Xwr[   rQ   )r9   rN   rO   )                @      ?r9   r   r9   )r   r   r9   rO   array_constructor)arrayZ
sparse_csrZ
sparse_cscc           
      C   s   | d }t||}t| |} t| jd }t|d}|j| ||d t|jd }t|d}||| g dg dg}	t|j|j t|j	|j	 t|
|	|
|	 d S )Nr   r   	with_meanrP   )      ?      @      @)rl   g      @g      @)
startswithr'   rC   onesrE   r   rX   r*   mean_var_	transform)
r_   r[   rQ   rf   ri   ZywZscaler_wr\   r]   X_testrA   rA   rB   "test_standard_scaler_sample_weightx   s   



rs   c                  C   s  t tttfD ]} t }|| j| dd}t| trt	| } t
| dkrOt|j|   t|jtt t|jddtt t|jddtt n.t|j|   t|j|   t|jddtt t|jddd t|jddd |j| jd ksJ ||}t||  qtd} t }|| j| dd}t|jd t|jd t|jddd t|jddd |j| jd ksJ d S 	NTcopyr9   r   axis        rd   ra   r9   )X_1rowX_1colX_list_1rowr   rX   rq   
isinstancelistrC   rg   rF   r*   ro   ravelscale_rn   rZ   r+   mean
zeros_likestdn_samples_seen_rE   inverse_transform)r[   r]   X_scaledX_scaled_backrA   rA   rB   test_standard_scaler_1d   s4   



r   sparse_containeradd_sample_weightFTc                 C   s   t jd}d}d}| rt |}nd }d}|d ur!t jt jg}nt jt jt jg}|D ]>}||||}	|d ur@||	}	d}t	|d}
|
j
|	|d|	}|	j|jksWJ |
jjt jks`J |
jjt jksiJ q+d S )Nr   r<   rO   TFrh   rP   )rC   randomRandomStatern   float64float32float16rT   astyper   rX   rq   dtypero   r   )r   r   rS   rY   rZ   rQ   ri   Zsupported_dtyper   r[   r]   r   rA   rA   rB   test_standard_scaler_dtype   s*   
r   r]   rh   with_centeringr   constant)r   rd         Y@c                 C   s(  t | tr|rt| jj d tjd}d}d}|r)t	|j
|dd d}ni }tj||f||d}	|d u r;|	n||	}
| j|
fi ||
}t | tr^t| jt|
jd d	d
 t| jt|
jd  ||
uspJ t||
 t | tr|st|
| jd}||
usJ t||
 d S d S d S )Nz# does not yet support sample_weightr   d   r9   r:   rN   rP   )rE   
fill_valuer   Hz>Zatolrh   )r~   r   rU   skip	__class____name__rC   r   r   dictuniformfullrX   rq   r   r(   rp   zerosrE   r   rn   r)   r   ri   )r]   r   r   r   r   rS   rY   rZ   Z
fit_paramsX_arrayr[   r   Z
X_scaled_2rA   rA   rB   &test_standard_scaler_constant_features   s*   

r   rY   )r<   r   i'  average)g|=r9   g    _Bc                 C   s  d\}}t jdd t||d D |d}|jd }t j| |f|d}|| |d | d d d f< || || d d d d f< |d u rE|n||}	tdd	|	}
t t jj	}| | |d  | d |d  |d   }|d |k}t 
|syJ t|
j| || ksJ t|
j| d
 |dd d f |dd d f  dk}t|
jt | d t|
jt | d t |d |k|}t|
j| t |
j|  d S )N)i   c                 S   s   g | ]}d | qS )r<   rA   .0rG   rA   rA   rB   
<listcomp>   s    z?test_standard_scaler_near_constant_features.<locals>.<listcomp>r9   r   r   rN   Frh   rd   r8   )rC   rg   rangerE   emptyr   rX   finfor   epsanyallrp   r(   r   Zlogical_notlogical_andsqrt)rY   r   r   r   Z	scale_minZ	scale_maxscalesrZ   r[   r   r]   r   ZboundsZwithin_boundsZrepresentable_diffZcommon_maskrA   rA   rB   +test_standard_scaler_near_constant_features  s&   
"
($ r   c                  C   s\   g d} t | }| |fD ]}t|}t| d t| d tt|ddd| qd S )N)rd         @      @ry   ry   rd   Fri   with_std)rC   rg   r   r+   r   r   r,   )ZX_listZX_arrr[   r   rA   rA   rB   test_scale_1dK  s   
r   c                  C   s  t jdt dt jd} t  tdt t|  W d    n1 s%w   Y  t	t| t 
d t jdt dt jd} d}tjt|d t| }W d    n1 sXw   Y  t	|t 
d t jddt jd} t  tdt t| }W d    n1 sw   Y  t	|t 
d t jdd	t jd}d
}tjt|d t|}W d    n1 sw   Y  t	|t 
d t	|| tjt|d t|dd}W d    n1 sw   Y  t	|t 
d t	|| d S )N   h㈵>r   errorr<   z:standard deviation of the data is probably very close to 0matchg0.++g}Ô%ITz$Dataset may contain too large valuesFr   )rC   r   logr   warningscatch_warningssimplefilterUserWarningr   r+   r   rU   warns)xwarning_messageZx_scaledZx_small_scaledZx_bigZx_big_scaledZx_big_centeredrA   rA   rB   (test_standard_scaler_numerical_stabilityW  s<   






r   c                  C   sX  t jd} d}d}| ||}d|d d df< t }||j|dd}t t |r/J |j	|ks6J t
|jdd|dg  t
|jddg d ||usSJ ||}||us^J ||usdJ t
|| t|d	d
d}t t |rzJ t
|jd	d|dg  t|d	dd}t t |rJ t
|jd	d|dg  t
|jd	d|dg  ||usJ ||j|d
d}t t |rJ t
|jdd|dg  t
|jddg d ||u sJ | dd}d|d d df< t }||j|dd}t t |rJ t
|jdd|dg  t
|jddg d ||us*J d S )Nr   ra   r`   ry   Tru   rw   ry   rd   rd   rd   rd   r9   F)rx   r   rd   )rC   r   r   rT   r   rX   rq   r   isnanr   r+   r   r   r   r   )rS   rZ   rY   r[   r]   r   r   rA   rA   rB   test_scaler_2d_arrays~  sJ   

r   c                  C   s   t jd} | ddddgt j}t jdd t |}|	|}W d    n1 s/w   Y  t 
|t j}t t |sHJ t||dd	 d S )
Nr   ra   r<   i@ r9   raise)ZoverrN   decimal)rC   r   r   r   r   r   Zerrstater   rX   rq   fit_transformr   r   isfiniter+   )rS   r[   r]   r   ZX_scaled_f64rA   rA   rB   test_scaler_float16_overflow  s   r   c                  C   sF   t g d} t| dd}t| t g d t|t g d d S )N)r   gؗҜ<r9   rN   rO   Tru   )r9   r9   r9   rN   rO   )rC   rg   r   r(   )s1s2rA   rA   rB   test_handle_zeros_in_scale  s   r   c               
   C   s  t } | jd }ddd||d fD ]}t | }t }tt|D ]	}|| | }q t|j|j t|j	|j	 |j
|j
ks@J t|j|j t|j|j t|j|j td|}t | | }t | | }t|j|j t|j	|j	 |j
|j
ksJ t|j|j t|j|j t|j|j t | }t }ttt|D ]\}}|| | }t||j|j|||j
d qqd S )Nr   r9   rN   2   *   rH   rI   rJ   rK   rL   )X_2drE   r   rX   r    rY   partial_fitr+   Z	data_min_Z	data_max_r   Zdata_range_r   min_slice	enumeraterM   startstopr[   rJ   rK   scaler_batchscaler_incrbatchbatch0rG   rA   rA   rB   test_minmax_scaler_partial_fit  sH   

r   c               
   C   s  t } | jd }ddd||d fD ]}tdd| }tdd}tt|D ]	}|| | }q$t|j|j |j	|j	ks=J |j
|j
ksEJ td|}t | | }|dkrottjttjd|j	 ttjttjd|j nttj| | dd	|j	 ttj| | dd	|j t | }t }ttt|D ]\}}|| | }t||j|j|||j
d
 qt|j	|j	 |j
|j
ksJ qd S )Nr   r9   rN   r   r   Fr   r   rw   r   )r   rE   r   rX   r    rY   r   r+   ro   rp   r   r   rC   r   rZ   r   rn   r   varr   r   rM   r   r   r   rA   rA   rB    test_standard_scaler_partial_fit  sL   


	r   c                 C   sT  t jd}d}d}|jdd|d}|jdd|d}|||| | }t |}t }|D ]}	||	d	|}q/d
}
t	|j
|j
|
d t	|j|j|
d t	|j|j|
d d}d}| |dd|t j| }tdd|}tdd}|D ]}	|	jd	kr|	d	d}	||	}qzd
}
|j
d usJ t	|j|j|
d t	|j|j|
d d S )Nr   rN   r   g  4&kg  4&kCr:   g     @@    .Ar9   gư>)Zrtol)r   rO   g@xDFrh   r8   )rC   r   r   r   rT   r   rX   r   reshaper(   ro   rp   r   randintr   r   ndim)r   rS   rZ   rY   offsetsr   r[   r   r   chunkZtolr;   r   r]   rA   rA   rB   4test_standard_scaler_partial_fit_numerical_stability6  s6   

r   rQ   c                 C   s   |t dgdgdgdgg}| rt|jd } tdddd}|j|| d|}t|	 |	  |
|}t|	 |	  t|	 |	  d S )	Nrd   ry   r   r   FTri   r   rv   rP   )rC   rg   rS   randrE   r   r   rq   r,   r=   r   )rQ   r   r[   null_transformX_nullX_origrA   rA   rB   test_partial_fit_sparse_inpute  s   
r   c                 C   sv  t d dd d f }| rt|jd } t }tt|jd dD ]\}}|d |d d d f }| }| d u rGt |}|	|| }nt j|| d |d  d}|j	|| | | d}|
|}t|| t|| ||}	t||	 t|jd }
ttj}t|
|j|  t|
|j|  | d u r|d |jksJ q!t| d |d  t|jksJ q!d S )Nr   r   r9   rP   )r   rS   r   rE   r   r   r    rv   r   r   rq   r+   r   rC   r   r   floatr   r-   rp   r   r   sumrU   approx)rQ   r[   r   rG   r   ZX_sofarZchunks_copyZscaled_batchZscaled_incrZright_inputzeroepsilonrA   rA   rB   .test_standard_scaler_trasform_with_partial_fitv  s>   




r   c                  C   sR   t jg dg dg dg dg dg dgt jd} t }||  ||  d S )N)r9   r9   r9   r   r9   r   )r   r   r   r9   r   r   )r9   r`   r9   r9   r   r   )r   r9   r   r   r9   r   )r   r`   r   r9   r   r9   r   )rC   rg   int32r   rX   r   )r   r]   rA   rA   rB   .test_standard_check_array_of_inverse_transform  s   
r   z#array_namespace, device, dtype_name)Zidscheck	estimator)clipl1norml2maxc                 C   s   | j j}||| |||d d S )N)device
dtype_name)r   r   )r   r   array_namespacer  r  namerA   rA   rB   'test_preprocessing_array_api_compliance  s   r  c                  C   s*  t j} t }|| }t|jddd t|jddd ||}t| | tdd}|| }t|jddd t|jddd ||}t| | tdd}|| }t|jddd t|jddd	 ||}t| | td
d}t	t
 ||  W d    d S 1 sw   Y  d S )Nr   rw   r9   r9   rN   feature_rangerN   )      333333?r  r  )rN   r9   )irisdatar   r   r+   minr  r   rU   rV   rW   rX   )r[   r]   X_transX_trans_invrA   rA   rB   test_min_max_scaler_iris  s.   











"r  c            	      C   s   g dg dg dg} g dg dg dg}t  }|| }g dg dg d	g}t|| ||}t| | ||}g dg d
g dg}t||dd t dd}|| }g dg dg dg}t|| t| }t|| t| dd}t|| d S )Nry   rd         ?ry   rd   gry   rd   g?ry   rc   r        rd   ry   ry   rd   rj   )ry   ry   r  ry   ry   ry   ry   ry   rd   )r  ry   gsh|??)ry   ry   gS?rN   r   r	  r
  )rd   rd   rj   rd   rd   rd   )rd   rd   rc   )r   r   r+   r   rq   r   )	r[   X_newr]   r  ZX_expected_0_1r  X_trans_newZX_expected_0_1_newZX_expected_1_2rA   rA   rB   *test_min_max_scaler_zero_variance_features  s&   








r!  c                  C   s>   t j} t| dd}ttj|ddd ttj|ddd d S )Nr9   rw   r   )r  r  r   r+   rC   r  r  )r[   r  rA   rA   rB   test_minmax_scale_axis1  s   r"  c                  C   sX  t tttfD ]^} tdd}|| | }t| trt	| } t
| dkr>t|jddtt t|jddtt nt|jddd t|jddd |j| jd ksZJ ||}t||  qtd} t }|| | }| dks}J | dksJ |j| jd ksJ t  }| }| }t|| ||  t|dd d S rt   )r{   r|   r}   r   rX   rq   r~   r   rC   rg   rF   r+   r  r   rZ   r  r   rE   r   rn   r   r   )r[   r]   r   r   X_1dr   Zmax_rA   rA   rB   test_min_max_scaler_1d  s2   




r$  c                 C   sL  t jd}|dd}d|d d df< ||}| r"||jd } tt t	 
| W d    n1 s8w   Y  t	ddj
|| d}|j|d	d
}t t |rXJ t	ddj
|| d}|j|d	d
}t t |jrtJ t|j|j t|j|j t|j|j t|j|j | d u rt|jddg dd t|jddg d t|d\}	}
t|	|jdd t|
|jdd ||usJ ||usJ ||}||usJ ||usJ t|| ||}||usJ ||usJ t| | |tv r$t	ddd	d}||}t|j|j ||}t|j|j d S d S )Nr   r`   ra   ry   r   Frh   rP   Tru   rw   ry   g{GzgQ@gffffffֿg(\rN   r   r   )rC   r   r   rT   r   rE   rU   rV   rW   r   rX   rq   r   r   r  r+   ro   rp   r   r   r   r   r5   r   r   r=   r2   r   r,   )rQ   r   rS   r[   X_sparser]   r   scaler_sparseX_sparse_scaledX_sparse_scaled_meanZX_sparse_scaled_varr   X_sparse_scaled_backr   r   r   rA   rA   rB   test_scaler_without_centeringC  s\   






r+  ri   r   c                 C   s   t jg dt jddgddt jgddt jggt jd}|d ur"||}t|r.| r.td	 t| |d
}|	| t
|jt g d d S )Nr   r9   rO   rb   r<   ra   r`   r   r   r   z3'with_mean=True' cannot be used with sparse matrix.r   )rO   r`   rN   )rC   rg   nanr   r   issparserU   r   r   rX   r,   r   )ri   r   r   r[   transformerrA   rA   rB   #test_scaler_n_samples_seen_with_nan  s   *

r0  c                 C   st   | j |j   u rd u sJ  J | j|j  u rd u s J  J | j|j  u r-d u s0J  J | j|jks8J d S N)ro   rp   r   r   )Zscaler_1Zscaler_2rA   rA   rB   "_check_identity_scalers_attributes  s      r2  c                 C   s   t jg dg dg dgt jd}| |}tddd}||}t|| t|}||}t|| t|| |	| |	| t|| |
| |
| t|| d S )Nr,  )ra   rb   r   )r   r   r<   r   Fr   )rC   rg   r   r   r   r(   r   r)   r2  r   rX   )r   X_denser&  transformer_denseZX_trans_denseZtransformer_sparseX_trans_sparserA   rA   rB   test_scaler_return_identity  s   "









r6  c                 C   sr  t jd}|jddd}d|d d df< | |}tjdd tdd	|}|j|dd
}W d    n1 s9w   Y  t 	t 
|rHJ tjdd tdd	|}|j|dd
}W d    n1 shw   Y  t 	t 
|jrxJ t|j|j t|j|j t|j|j t|jddg dd t|jddg d t|td\}}	t||jdd t|	|jdd ||usJ ||usJ ||}
|
|usJ |
|usJ t|
| ||}||usJ ||usJ t| | | tv r7tdddd}tjdd ||}W d    n	1 sw   Y  t|j|j ||}t|j|j d S d S )Nr      r`   ra   r:   r   TrecordFrh   ru   rw   )ry   gX9v?gV-?g      5@gl?rN   r   r   )rC   r   r   r   r   r   r   rX   rq   r   r   r  r+   ro   rp   r   r   r   r5   r   r   r   r=   r2   r   r,   )r   rS   r[   r&  r]   r   r'  r(  r)  ZX_sparse_scaled_stdr   r*  r   r   r   rA   rA   rB   test_scaler_int  sZ   





r;  c                 C   s   t jd}|dd}d|d d df< | |}| }tdd| t|| | }tddd| t| |  d S )	Nr   r`   ra   ry   r   Fru   )ri   rv   )	rC   r   r   rT   rv   r   rX   r,   r=   )r   rS   r[   r&  ZX_copyZX_sparse_copyrA   rA   rB   test_scaler_without_copy  s   
r<  c                 C   s  t jd}|dd}| |}tt t|dd W d    n1 s&w   Y  tt tdd	| W d    n1 sCw   Y  tdd	|}tt |
| W d    n1 sew   Y  | |
|}tt || W d    d S 1 sw   Y  d S )Nr   r`   ra   Trh   )rC   r   r   rT   rU   rV   rW   r   r   rX   rq   r   )r   rS   r[   r&  r]   ZX_transformed_sparserA   rA   rB   +test_scale_sparse_with_mean_raise_exception  s"   "r=  c                  C   sN   t jddddgg} tjtdd t|  W d    d S 1 s w   Y  d S )Nra   rb      r   z,Input contains infinity or a value too larger   )rC   infrU   rV   rW   r   r[   rA   rA   rB   &test_scale_input_finiteness_validation  s   
"rA  c                  C   sX   t dd} tdd}d}tjt|d ||  W d    d S 1 s%w   Y  d S )Nr7   r<   Tr   zCannot center sparse matricesr   )r   r   r   rU   rV   rW   rX   )r&  r]   err_msgrA   rA   rB   test_robust_scaler_error_sparse  s   
"rC  r   with_scalingr[   r  densityc                 C   s   |rt | rtd t||d}||  |r#t|jtj	s"J n|jd u s*J |r7t|j
tj	s5J d S |j
d u s>J d S )Nz(RobustScaler cannot center sparse matrix)r   rD  )r   r.  rU   r   r   rX   r~   center_rC   ndarrayr   )r[   r   rD  r]   rA   rA   rB   test_robust_scaler_attributes%  s   

rI  csr_containerc                 C   s   t jdd}d|d d df< | |}tdd}|| |jd tdks)J ||}t	|d d dgf 
 |d d dgf 
  d S )Nr<   ra   r   Fr   r9   )rC   r   rT   r   rX   r   rU   r   rq   r(   r=   )rJ  r[   r]   r  rA   rA   rB   "test_robust_scaler_col_zero_sparse:  s   


2rK  c                  C   sr   t jd} | dd}d|d d df< t }|||}tt j|ddddg  t|j	ddd d d S )Nr   r`   ra   ry   rw   )
rC   r   r   rT   r   rX   rq   r+   medianr   )rS   r[   r]   r   rA   rA   rB   test_robust_scaler_2d_arraysJ  s   rM  rF  )r   g?皙?r  r9   strictly_signed)positivenegativer   Nc                 C   s   t jdd| d }|dkrt|j|_n|dkr#t|j |_n|dkr2tj|jjtjd|_|	 }t
dd	}t
dd	}|| || t|j|j d S )
Nr7   ra   rE  rP  rQ  r   r   Fr   )r   r   tocscrC   absr  r   rE   r   r=   r   rX   r(   r   )rF  rO  r&  r3  r'  Zscaler_denserA   rA   rB   +test_robust_scaler_equivalence_dense_sparseW  s   



rT  c                 C   s~   t jd}|dd}t g dg}tdd}||}|| |}||j }t	|
 | ||}t	||
  d S )Nr   r`   ra   )rN  rd   rc   ry   r  Fr   )rC   r   r   rT   rg   r   rX   rq   r   r+   r=   r   )rJ  rS   r[   Z
single_rowr]   Z	row_transZrow_expectedZrow_scaled_backrA   rA   rB   (test_robust_scaler_transform_one_row_csrm  s   



rU  c                  C   sl   t j} t }|| }ttj|ddd ||}t| | tj|ddd}|d |d  }t|d d S )Nr   rw      K   qrx   r9   	r  r  r   r   r+   rC   rL  r   
percentile)r[   r]   r  r  rZ  iqrrA   rA   rB   test_robust_scaler_iris|  s   


r^  c                  C   sp   t j} tdd}|| }ttj|ddd ||}t| | tj|ddd}|d |d  }t|d d S )N)r<   Z   quantile_ranger   rw   rY  r9   r[  )r[   r]   r  r  rZ  Zq_rangerA   rA   rB   !test_robust_scaler_iris_quantiles  s   



rb  csc_containerc                 C   s   t j}tdd}||}||}t|| tddd}||}||}t|| | |}||}||}t| |  d S )Nr6   n_quantilesnormal)re  Zoutput_distribution)r  r  r   r   r   r+   r=   )rc  r[   r/  r  r  r&  ZX_sparse_tranZX_sparse_tran_invrA   rA   rB   test_quantile_transform_iris  s   








rg  c                 C   s"  t g dg dg dg}| |}t g dg dg dg}| |}d}tjt|d tdd| W d    n1 s@w   Y  tdd	}d
}tjt|d || W d    n1 scw   Y  || d
}tjt|d || W d    n1 sw   Y  t g dg dg}d}tjt|d || W d    n1 sw   Y  tdd	|}tjtdd |d W d    n1 sw   Y  tdd	}d}tj	t
|d}|| W d    n1 sw   Y  t|dksJ |j|jd ksJ d S )N)
r   rW  r   r   r   r   rX  r   r   r   )
rN   r`   r   r   rb   r   r   r<   r   r   )
r   r   @ffffff@r   r   ffffff@r         #@rN  )
r`   r   r   rb   r   r   r<   r   r   zmThe number of quantiles cannot be greater than the number of samples used. Got 1000 quantiles and 10 samples.r   r<   )	subsamplerd  z>QuantileTransformer only accepts non-negative sparse matrices.zKX has 2 features, but QuantileTransformer is expecting 3 features as input.z+Expected 2D array, got scalar array insteadr   zn_quantiles is set to n_samplesr9   r   )rC   Z	transposerU   rV   rW   r   rX   rq   r   r   r   lenZn_quantiles_rE   )rc  r[   ZX_negrB  r/  Z
X_bad_featZwarn_msgr:  rA   rA   rB   #test_quantile_transform_check_error  s`   


ro  c           
      C   s8  t ddgddgddgddgddgg}| |}tddd}d}tjt|d || W d    n1 s7w   Y  t ddgddgddgddgddgg}||}t||	  t g d	}t g d
}t g d}	| ||	|ff}||}t ddgddgddgddgddgddgddgddgddgg	}t||	  tddd}t g d}t g d}t g d}	| ||	|ff}||}t ddgddgddgddgddgddgddgg}t||	  t|	 |
|	  tddddd}||}t||	  t|	 |
|	  d S )Nr   r9   rN   Tra   )ignore_implicit_zerosre  z['ignore_implicit_zeros' takes effect only with sparse matrix. This parameter has no effect.r   )r   r   r9   r   rN   rN   r9   r   r9   rN   r   )r   r   r9   r9   r9   r9   r9   r9   r9   r9   r9   )r   r`   r   r9   rN   rO   r`   ra   rb   r>  r   ry   r  rd   )	r8   r8   r9   r   r   r   r9   r8   r9   )	r   r   r9   r9   r9   r9   r9   r9   r9   )	r   r`   r   r9   rN   rO   r`   ra   rb   g      ?r   )rp  re  rm  random_state)rC   rg   r   rU   r   r   rX   r   r*   r=   r   )
rc  r[   r&  r/  r   
X_expectedr  ZX_dataZX_colZX_rowrA   rA   rB   +test_quantile_transform_sparse_ignore_zeros  sd   ((


,
rs  c                  C   s   t g dg dg dg dg dg} tdd}||  || }t t jdd	dd
dj}tt j	|dd| t g dg dg}t g dg dg}t
||| ||}t
| | d S )N)r   rN   rh  )rW  r`   ri  )r   rb   rj  )rX  r   rk  )r   r<   rN  ra   rd  r   r9   )num)rO   r9   rw   )r8   r9   r   )e      r<   )r   r   r   r9   r9   r9   )rC   rg   r   rX   r   ZtilelinspaceTr*   sortr+   rq   r   )r[   r/  r  rr  rr   r  rA   rA   rB   !test_quantile_transform_dense_toy%  s*    



r{  c            	      C   sN  d} d}t jt j| dfdd}d}g }t|D ]0}t||| d d}|| t dd|t |j	 }t 
t |}|d	k sDJ || qtt |t|ksWJ tj| dd
ddd}g }t|D ]0}t||| d d}|| t dd|t |j	 }t 
t |}|dk sJ || qgtt |t|ksJ d S )N@B r7   r9   r   rw   ra   r<   )rq  re  rm  {Gz?gGz?Zcsc)rF  formatrq  rN  )rC   rz  r   sampler   r   rX   rx  r   
quantiles_r  rS  appendrn  uniquer   r   )	rY   re  r[   ZROUNDZinf_norm_arrrq  r/  diffZinf_normrA   rA   rB   #test_quantile_transform_subsamplingE  s>   

r  c                  C   sh   t jdjdd} d}t|dd| }t dd|}t|j| t 	| 
 |}t|j
 | dS )zCCheck the behaviour of `QuantileTransformer` when `subsample=None`.r   )   r9   r:   ra   N)re  rm  r9   )rC   r   r   rf  r   rX   rx  r(   references_Zquantiler   r  )r[   re  r/  Zexpected_referencesZexpected_quantilesrA   rA   rB   ,test_quantile_transform_subsampling_disabledt  s   r  c                 C   s&  t g dg dg dg dg dg dg dg dg d	g d
g
}| |}tdd}|| ||}tt j| ddd tt j| ddd |	|}t| |  tdd| }|
|}tt j| ddd tt j| ddd |	|}t| |  d S )N)ry   rc   ry   )g      9@      @ry   )g      I@ry   rh  )ry   ry   ri  )ry   g      @ry   )ry   g       @ry   )g     R@ry   rj  )ry   g      $@ry   )ry   ry   rk  )r   ry   rN  r<   rd  r   rw   ry   rd   )rC   rg   r   rX   r   r+   r  r=   r  r   rq   )rc  r[   r/  r  r  r4  rA   rA   rB   "test_quantile_transform_sparse_toy  s6   





r  c                  C   sJ   t g dg dg dg} t| jddd}t| ddd}t||j d S )N)r   rW  r   rX  r   )rN   r`   rb   r   r<   )rh  ri  rj  rk  rN  r   ra   )rx   re  r9   )rC   rg   r   ry  r+   )r[   Z
X_trans_a0Z
X_trans_a1rA   rA   rB   test_quantile_transform_axis1  s   r  c                 C   s  t ddgddgddgg}| |}tddd|}t|| tddd|}t| | t||  t ddgddgddgg}t ddgddgddgg}tdd|}||}t|| t jd}t }|| |d	gg|t 	|ggksJ |d
gg|t 
|ggksJ |d	gg|t 	|jggksJ |d
gg|t 
|jggksJ d S )Nr   r9   rO   re  rq  r  rN  rd  )r7   r9   r<   )rC   rg   r   r   r+   r=   rX   rq   r   r  r  r   r  )rc  r3  r&  r  Z
X_trans_spr[   ZX1r/  rA   rA   rB   test_quantile_transform_bounds  s2   



&&
r  c               	   C   sp   t j} tdgtd gdgdgdgdgdgg}| |fD ]}tddd	}||}||}t||d
d qd S )Nry   r<   rj   rN   rO   r`   r7   r   r  	   r   )	r  r  rC   rg   r   r   r   r   r+   )X_1X_2r[   r/  r  r  rA   rA   rB   #test_quantile_transform_and_inverse  s   *

r  c                  C   s   t t jdddgt jt jddgt jdddgg} tddd}||  t |jd d df  s3J t |jd d dd f  rEJ d S )Nr   r9   r  r<   r   r  )	rC   rg   r-  r   r   r   r  r   r   )r[   r/  rA   rA   rB   test_quantile_transform_nan  s
   0
 (r  
array_typerg   r   c                 C   s|   t g dd }d|dd }t|| }d}t|d|}|jd d df }t|dks1J tt 	|dks<J d S )	N)r   r9   r9   rN   rN   rO   rO   r`   ra   ra   r9   r9   r  r  r  r   r   r>  r<   rN  r8   r9   r   rd  r   )
rC   rg   r   r'   r   rX   r  rn  r   r  )r  r[   re  ZqtZ	quantilesrA   rA   rB   *test_quantile_transformer_sorted_quantiles  s   
r  c               	   C   sR   dD ]$} t | d}tjtdd |tj W d    n1 s!w   Y  qd S )N))r8   r_  )rl  )r<   ru  )g      Y@ru  )r_  r   r`  zInvalid quantile range: \(r   )r   rU   rV   rW   rX   r  r  )Zrange_r]   rA   rA   rB    test_robust_scaler_invalid_range   s   
r  c           	      C   sZ  t jd}|dd}d|d d df< | |}t|dd}t t |r(J t|dd}t t |jr9J t| dd}t	||
  tt t|ddd	 W d    n1 s_w   Y  t	|jdd
g dd t	|jdd
g d ||usJ t|d\}}t	||jdd
 t	||jdd
 t|dddd}t	|
 |
  d S )Nr   r`   ra   ry   r   Frh   r9   )ri   rx   rw   r%  rN   r   Tr   )rC   r   r   rT   r   r   r   r  rR  r+   r=   rU   rV   rW   r   r   r5   )	rJ  rS   r[   X_csrr   ZX_csr_scaledZX_csc_scaledZX_csr_scaled_meanZX_csr_scaled_stdrA   rA   rB   %test_scale_function_without_centering  s.   r  c                  C   sT   t j} t| dd}ttj|ddd tj|ddd}|d |d  }t|d d S )Nr9   rw   r   rV  rY  r  r  r   r+   rC   rL  r\  r[   r  rZ  r]  rA   rA   rB   test_robust_scale_axis13  s   r  c                  C   sV   t jd d df } t| }tt|d tj|dd}|d |d  }t|d d S )Nr9   r   rV  )rZ  r  r  rA   rA   rB   test_robust_scale_1d_array<  s   r  c                  C   s   g dg dg dg} t  }|| }g dg dg dg}t|| ||}t| | g dg dg d	g}||}g d
g dg dg}t||dd d S )Nr  r  r  r  )ry   ry   r  r  r  r  r  )ry   rd   ry   )r  ry   g_)ry   ry   gіs)?rO   r   )r   r   r+   r   rq   )r[   r]   r  rr  r  r  r   X_expected_newrA   rA   rB   )test_robust_scaler_zero_variance_featuresE  s   




r  c                  C   s   t jd} | dd}t |t dd t dd g}d}t|dd	|}||}|j	t
jd
ddks:J |jt
jdddksFJ | t
jdddksSJ d S )Nr   r|  r9   )r   r9   r   i)r9   c   T)ra  Zunit_variancer   MbP?)rS  r}  )rC   r   r   rT   vstackrn   r   rX   rq   rG  rU   r   r   r   )rS   r[   ZX_with_outliersra  Zrobust_scalerr  rA   rA   rB    test_robust_scaler_unit_variance^  s   $
r  c                 C   s  g dg dg dg dg}t  }||}g dg dg dg dg}t|| ||}t|| g dg d	g dg}||}g d
g d	g dg}t||dd t|}t|| | |}	||	}
g dg dg dg dg}t|
 | ||
}t||  d S )Nr  )ry   rd   333333ӿr  r  )ry   rd   UUUUUU?)ry   rd   gɿ)ry   rd   rd   r  r  )ry   rc   r  rN   r   )r   r   r+   r   rq   r   r=   )r   r[   r]   r  rr  r  r  r   r  r&  r5  ZX_trans_sparse_invrA   rA   rB   )test_maxabs_scaler_zero_variance_featuresp  s6   







r  c                  C   sV   g dg dg dg dg} t  }|| }g dg dg dg dg}t|| d S )	N)ry   rd   r  r  )ry   rd   r  r  )ry   rd   g      Yry   )ry   ry   ry   g       )ry   rd   g{Gzt?r  )ry   rd   g~jthg      п)ry   rd   r  ry   )ry   ry   ry   r  )r   r   r+   )r[   r]   r  rr  rA   rA   rB   'test_maxabs_scaler_large_negative_value  s   
r  c                 C   sh   | g dg}t  }||}||}| g dg}t| |  ||}t| |  d S )N)r  rd   rd   r  )r   rX   rq   r+   r=   r   )rJ  r[   r]   r  rr  r   rA   rA   rB   (test_maxabs_scaler_transform_one_row_csr  s   


r  c                  C   s(  t tttfD ]O} tdd}|| | }t| trt	| } t
| dkr5tt|jddtt ntt|jddd |j| jd ksKJ ||}t||  qtd} t }|| | }tt|jddd |j| jd ks|J t  }t| }t|| t|dd d S )NTru   r9   r   rw   rd   rz   )r{   r|   r}   r   rX   rq   r~   r   rC   rg   rF   r+   rS  r  rn   rZ   r   rE   r   r   r   )r[   r]   r   r   r#  Zmax_absrA   rA   rB   test_maxabs_scaler_1d  s&   


 

r  c              
   C   s  t d dd d f }|jd }ddd||d fD ]}t |}t }t }t }t||D ]}||| }| || }	||	}| || }
||
}q.t|j|j t|j|j t|j|j |j|jkskJ |j|jkssJ |j|jks{J t|j	|j	 t|j	|j	 t|j	|j	 t|
||
| td|}t || }t || }t|j|j |j|jksJ t|j	|j	 t|
||
| t |}t }tt||D ]\}}||| }t||j|j|||jd qqd S )Nr   r   r9   rN   r   r   r   )r   rE   r   rX   r    r   r+   Zmax_abs_r   r   rq   r   r   rM   r   r   )rJ  r[   rJ   rK   r   r   Zscaler_incr_csrZscaler_incr_cscr   r  ZX_cscr   rG   rA   rA   rB   test_maxabs_scaler_partial_fit  sX   


r  c                 C   s   | dkr$t |jdd}tdD ]	}t|| d qt|d d d	S | dkrEtdD ]}tt|| d q,tt|d d d	S | dkrht|jdd}tdD ]	}t|| d qUt|d d d	S d	S )
zr
    Convenient checking function for `test_normalizer_l1_l2_max` and
    `test_normalizer_l1_l2_max_non_csr`
    r   r9   rw   rO   rd   ry   r  r  N)rC   rS  r   r   r*   lar  r  )r  X_normrow_sumsrG   Zrow_maxsrA   rA   rB   check_normalizer  s   r  r  r   r  r  c                 C   s   t jd}|dd}||}d|dd d f< |jd }|jd }d|j||< ||}|||fD ]8}t| dd}	|	|}
|
|usEJ t|
}
t| dd}	|	|}||u sZJ t|}|
|fD ]}t	| | qbq2d S )	Nr   r`   ra   ry   rO   Tr  rv   F)
rC   r   r   rT   Zindptrr  r   rq   r=   r  )r  rJ  rS   r3  ZX_sparse_unprunedZindptr_3Zindptr_4ZX_sparse_prunedr[   
normalizerZX_norm1ZX_norm2r  rA   rA   rB   test_normalizer_l1_l2_max)  s*   



r  c                 C   s|   t jd}|dd}d|dd d f< ||}t| dd|}||us'J t|r1|jdks3J t	|}t
| | d S )	Nr   r`   ra   ry   rO   Fr  Zcsr)rC   r   r   rT   r   rq   r   r.  r~  r=   r  )r  r   rS   r3  r[   r  rA   rA   rB   !test_normalizer_l1_l2_max_non_csrK  s   r  c                 C   s   t jd}|dd}d|dd d f< |dt|dd d f  f  d9  < t | }| |}|||fD ]#}tdd	}||}||usIJ t|}t	t 
|t 
t| q7d S )
Nr   r`   ra   ry   rO   rN   r8   r  r   )rC   r   r   rT   rS  Zargmaxr   rq   r=   r,   sign)rJ  rS   r3  Z	X_all_negZX_all_neg_sparser[   r  r  rA   rA   rB   test_normalizer_max_sign`  s   (

r  c              	   C   s  t jddd}tt|ddt|jdddj t jd}|dd	}| |}t d}||fD ]C}t jt j	fD ]:}d
D ]5}|
|}t||d}|j|ksSJ t|}|dkret |jdd}	n
|d }
|
jdd}	t|	| q?q;q3t g dg dg dg}dD ]3}t||dd\}}|dkrt|t g d q|dkrt|t g d qt|t g d q| |}d
D ]}tt t||dd W d    n1 sw   Y  qt|ddd\}}t|t g d d S )N%   rO   rN   Fru   r   )rx   rv   r<   ra   )r   r  r   r   r9   rw   )r   r   r  )rd   ry   ry   )rc   r   ry   r  T)r  Zreturn_norm)      @rd   r   r  )r   rd   g1C+@)r  rd   r   r  )rC   r   r   rT   r,   r   ry  rn   r   r   r   r   r=   rS  r   r+   rg   rU   rV   NotImplementedError)rJ  r[   rsr3  r&  rn   r   r  r  r  ZX_norm_squared_ZnormsrA   rA   rB   test_normalizeu  sH    

r  constructorc                 C   s  t g dg dg}| | }tddd}t||}t |dkdks)J t |dkd	ks4J ||}t|t|ksEJ tdd
	|}t||}||usZJ t |dkd	kseJ t |dkdkspJ tdd
}||}||usJ t|}t |dkd	ksJ t |dkdksJ tdd
}||}| t
ur||u sJ tdd
}t jg dg dgt jd}||}| t
ur||u sJ t|}t |dkd	ksJ t |dkdksJ tddd}| t jt
fv r"| | }t||}t |dkdksJ t |dkdksJ ||}| tv rGtt || | W d    d S 1 s@w   Y  d S d S )N)r9   r   ra   )rN   rO   r8   rc   T)	thresholdrv   r   r`   r9   rN   ru   Fr   r  ra   )rC   rg   rv   r   r=   rq   r   r   r.  rX   r   r   r1   rU   rV   rW   )r  ZX_r[   Z	binarizerZX_binZX_floatrA   rA   rB   test_binarizer  sV   








$r  c           	   	   C   s   t | |}|ddfD ]C}ttjg d|dd}|j||d}tdd|}td	d
 tdd|}W d    n1 s@w   Y  tt||| q
d S )Nr   Zint64)r   r9   rN   rO   r`   r   )r8   r9   )r  rk   )r  T)Zarray_api_dispatch)	r&   rC   r   rD   r   r   r   r,   r"   )	r  r  r  ZxpZdtype_name_ZX_npZX_xpZbinarized_npZbinarized_xprA   rA   rB   test_binarizer_array_api_int  s   
r  c                  C   s.  t jd} | d}tdd}|| ||}t ||j}t	 }t ||j}|
|}t|| | d}t ||j}	||}
t |
|j}||	}t|| t ||jd  }|||  ||  || |  }t|| t |	|jd  }|	||  |	|  || |  }t|| d S )Nr   ra   r`   Fr   )rN   r`   )rC   r   r   random_sampler   rX   rq   dotry  r   r   r+   	ones_likerE   r(   )rS   ZX_fitr]   ZX_fit_centeredZK_fitcentererZK_fit_centeredZK_fit_centered2ZX_predZK_predZX_pred_centeredZK_pred_centeredZK_pred_centered2ones_MZK_fit_centered3ones_prime_MZK_pred_centered3rA   rA   rB   test_center_kernel  s.   









	 
r  c                  C   s@  t jd} | dd| dd}}dd }||}||}tdd}||}||}||j }	||j }
||j }||j }t }|	|	 t
||	| t
||
| t |	|	jd  }|	||	  |	|  ||	 |  }t
||	| t |
|	jd  }|
||	  |
|  ||	 |  }t
||
| d	S )
z-Check kernel centering for non-linear kernel.r   r   r   r7  c                 S   s(   t t j| dddt j| ddd gS )zOur mapping function phi.r   N)Za_minZa_max)rC   r  r   r@  rA   rA   rB   phi  s
   z2test_kernelcenterer_non_linear_kernel.<locals>.phiFr   N)rC   r   r   rT   r   r   rq   ry  r   rX   r(   r  rE   )rS   r[   rr   r  Zphi_XZ
phi_X_testr]   Zphi_X_centerZphi_X_test_centerKZK_testZK_centerZK_test_centerkernel_centererr  Z
K_centeredr  ZK_test_centeredrA   rA   rB   %test_kernelcenterer_non_linear_kernel  s.   	







	 r  c                  C   s   t g dg dg dg dg} t d}| | j}t }td|fdt fg}| j	j
s2J t|||dd	}t|| d S )
N)rO   r   r   )r   rO   r   )r   r   rO   rw  )r`   r  ZsvrrN   )Zcv)rC   rg   rn   r  ry  r   r   r   Z__sklearn_tags__Z
input_tagspairwiser
   r+   )r[   Zy_truer  ZkcentZpipelineZy_predrA   rA   rB   test_cv_pipeline_precomputedM  s   "
r  c                  C   sT   t jd} | d}t t t fD ]}|||}|	|}t
|| qd S )Nr   r  )rC   r   r   r  r   r   r   rX   rq   r   r,   )rS   r[   objX_transformedZX_transformed2rA   rA   rB   test_fit_transforma  s   

r  c                  C   s>   ddgddgddgg} t | } t| g dg dg dg d S Nr9   r   )r9   r9   r   re   )r   r,   r@  rA   rA   rB   test_add_dummy_featurej  s    r  c                 C   sh   | ddgddgddgg}|j }t|}t|r|j |ks"J |t| g dg dg dg d S r  )r~  r   r   r.  r,   r=   )r   r[   Zdesired_formatrA   rA   rB   test_add_dummy_feature_sparsep  s
   $r  c                  C   sR   t j} | d d d df }tdddt t g}|D ]}||  || qd S )NrN   Fr   )r  r  r   r   r   r   )r[   r   Zscalersr]   rA   rA   rB   test_fit_cold_start{  s   

r  methodbox-coxyeo-johnsonc                 C   s   t | d}tt}tt || W d    n1 sw   Y  tt || W d    d S 1 s:w   Y  d S )Nr  )	r   rC   rS  r|   rU   rV   r   rq   r   )r  ptr[   rA   rA   rB    test_power_transformer_notfitted  s   

"r  standardizec                 C   s@   | dkr	t |n|}t| |d}||}t||| d S )Nr  r  r  )rC   rS  r   r   r*   r   )r  r  r[   r  r  rA   rA   rB   test_power_transformer_inverse  s   
r  c                  C   s   t t} dD ]Z}td|d}|| }t| d|d}t|  \}}|r*t	|}t
|dd| t
|dd| t
| || t
||jd  t|j| jd ksXJ t|jt jsaJ qd S )NTFr  r  r8   r9   r   )rC   rS  r|   r   r   r   r   boxcoxflattenr   r*   r   r   lambdas_rn  rE   r~   rH  )r[   r  r  r  X_trans_funcrr  Zlambda_expectedrA   rA   rB   test_power_transformer_1d  s   

r  c            
      C   s   t t} dD ]l}td|d}|| }t| d|d}||fD ]>}t|jd D ]*}t	| d d |f 
 \}}|r?t|}t|d d |f | t||j|  q(||}	t|	|  qt|j| jd ksjJ t|jt jssJ qd S )Nr  r  r  r9   )rC   rS  r   r   r   r   r   rE   r   r  r  r   r*   r  r   r+   rn  r~   rH  )
r[   r  r  ZX_trans_classr  r  jrr  lmbdaX_invrA   rA   rB   test_power_transformer_2d  s"   


r  c                  C   s  t dd} | tt t}d}tjt|d | | W d    n1 s(w   Y  tjt|d | | W d    n1 sDw   Y  tjt|d t	|dd W d    n1 saw   Y  tjt|d | t
tj W d    n1 sw   Y  tjt|d | t
tj W d    n1 sw   Y  tjt|d t	t
tjdd W d    d S 1 sw   Y  d S )Nr  r  zstrictly positiver   )r   rX   rC   rS  r   rU   rV   rW   rq   r   r   rE   )r  ZX_with_negativesZnot_positive_messagerA   rA   rB   9test_power_transformer_boxcox_strictly_positive_exception  s,   
"r  c                 C   s   t | dd d S )Nr  r  )r   r@  rA   rA   rB   +test_power_transformer_yeojohnson_any_input  s   r  c                 C   s   t | d}tt}|| d}tjt|d ||d d ddf  W d    n1 s0w   Y  tjt|d |	|d d ddf  W d    d S 1 sUw   Y  d S )Nr  zBX has \d+ features, but PowerTransformer is expecting \d+ featuresr   r   r9   )
r   rC   rS  r   rX   rU   rV   rW   rq   r   )r  r  r[   Zwrong_shape_messagerA   rA   rB   &test_power_transformer_shape_exception  s   


"r  c                  C   sR   t ddd} ttd d ddf }tdg| _| |}t| || d S )Nr  Fr  r   r9   )	r   rC   rS  r   rg   r  rq   r+   r   r  r[   r  rA   rA   rB   "test_power_transformer_lambda_zero	  s
   
r  c                  C   sL   t ddd} ttd d ddf }tdg| _| |}t|| d S )Nr  Fr  r   r9   )r   rC   rS  r   rg   r  rq   r+   r  rA   rA   rB   !test_power_transformer_lambda_one	  s
   
r  zmethod, lmbda))r  rN  )r  r  )r  rN  )r  r  )r  rd   c                 C   s   t jd}d}|jdd|dfd}| dkr!t |d| d d }t| dd	}|g|_||}t| dd	}||}t	dt j
|| | d
d t	d| dd t	d| dd d S )Nr   i N  r9   )locr   r;   r  r8   r   Fr  rN   r   )rC   r   r   rf  r   r   r  r   r   r*   linalgr  r   r   )r  r  rS   rY   r[   r  r  X_inv_transrA   rA   rB   #test_optimization_power_transformer	  s   

r  c                  C   s4   t ddd} dg| _| dgg}t|sJ d S )Nr  Fr  r  g )r   r  r   rC   r   )r  r  rA   rA   rB   test_invserse_box_coxE	  s   r  c                  C   sD   g d} t | dd} tdd| j}t j|ddds J d S )	N)gffffff@g rd   rc   gffffff?g333333@rl   gffffff@g?g@r  r   g"@g      @g      r8   r9   r  r  gzG?r  r   )rC   rg   r   r   rX   r  Zallclose)r[   r  rA   rA   rB   test_yeo_johnson_darwin_exampleM	  s   r  c                 C   s   t t}t| d}|| |jd }t |t |t jg}t	|dd}|| |jd }t
||dd ||}tt |t | d S )Nr  r   )rq  ra   r   )rC   rS  r|   r   rX   r  ZconcatenateZ	full_liker-  r!   r*   rq   r,   r   )r  r[   r  Zlmbda_no_nansZ
lmbda_nansr  rA   rA   rB   test_power_transformer_nansV	  s   






r  c                 C   sB   t }| dkrt|}t| |d}t||||| d S )Nr  )r  )r|   rC   rS  r   r+   rX   rq   r   )r  r  r[   r  rA   rA   rB   $test_power_transformer_fit_transformm	  s
   
 r  c                 C   s   t }| dkrt|}| }||usJ t|| t| |dd}|| t|| ||}||us6J ||}t|| ||usFJ |	|}||usQJ d S )Nr  Tr  rv   
r|   rC   rS  rv   r+   r   rX   rq   r   r   r  r  r[   Z
X_originalr  r  r  rA   rA   rB    test_power_transformer_copy_Truey	  s    







r  c                 C   s   t }| dkrt|}| }||usJ t|| t| |dd}|| t|| ||}||u s6J | dkr?t|}||}||u sJJ |	|}||u sUJ d S )Nr  Fr  r  r  rA   rA   rB   !test_power_transformer_copy_False	  s"   







r  c                  C   sh   t d} tj| dddf< d}tdd}tjt|d ||  W d   dS 1 s-w   Y  dS )zqCheck that box-cox raises informative when a column contains all nans.

    Non-regression test for gh-26303
    r8  Nr   zColumn must not be all nan.r  r  r   )	rS   r  rC   r-  r   rU   rV   rW   r   )r[   rB  r  rA   rA   rB   1test_power_transformer_box_cox_raise_all_nans_col	  s   

"r  r  皙?)rF  rq  c                 C   s    g | ]}|t jd t jdqS ))r<   r9   )r   )rC   r   r-  )r   rJ  rA   rA   rB   r   	  s    r   c                 C   sB   t jdddd}tdd}|||  t|jd sJ d S )Nra   r9   r  rE  Frh   r   )r   r   r   rX   r   rC   r   rp   )r  r  r]   rA   rA   rB   7test_standard_scaler_sparse_partial_fit_finite_variance	  s   
r  r  )r   r9   )r  r<   c                 C   s   t j}t| dd|}tj|ddtj|dd}}tj|d d d |dd  d f g}||}t	|| d | d | d | d gg d S )NT)r  r   r   rw   rN   r<   r9   )
r  r  r   rX   rC   r  r  Zr_rq   r(   )r  r[   r]   ZX_minZX_maxrr   r  rA   rA   rB   test_minmax_scaler_clip	  s   (
r  c                  C   sZ   t  t} d}tjt|d | tdddf  W d   dS 1 s&w   Y  dS )zCheck that `inverse_transform` from `StandardScaler` raises an error
    with 1D array.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/19518
    z'Expected 2D array, got 1D array insteadr   Nr   )r   rX   r   rU   rV   rW   r   )r]   rB  rA   rA   rB   -test_standard_scaler_raise_error_for_1d_input	  s
   "r  c                  C   s   dt jg dd g d t jddd } t }t  tdt |	| }W d	   n1 s3w   Y  t 
t |rBJ | td
ksMJ | tdksXJ | dks`J | dk shJ d	S )a  Check that significantly non-Gaussian data before transforms correctly.

    For some explored lambdas, the transformed data may be constant and will
    be rejected. Non-regression test for
    https://github.com/scikit-learn/scikit-learn/issues/14959
    r   )r  rc   r   r  r`   )rv     r        r7  U   r_  r   r8   r9   r   Nry   rd   rl  rN   )rC   rg   r   r   r   r   r   r   RuntimeWarningr   r   r   r   rU   r   r   r  r  )ZX_non_gaussianr  r  rA   rA   rB   1test_power_transformer_significantly_non_gaussian	  s   
r  Transformerc                 C   s*   |   tj}|tj}t|tj dS )9Check one-to-one transformers give correct feature names.N)rX   r  r  get_feature_names_outfeature_namesr,   )r  tr	names_outrA   rA   rB   test_one_to_one_features
  s   r  c                 C   s   t d}|jtjtjd}|  |}| }t|tj |tj}t|tj t	
d}t jt|d td}|| W d   dS 1 sKw   Y  dS )r  Zpandas)columnsz0input_features is not equal to feature_names_in_r   abcdN)rU   ZimportorskipZ	DataFramer  r  r  rX   r  r,   reescaperV   rW   r   )r  pdZdfr	  Znames_out_df_defaultZnames_out_df_valid_inmsginvalid_namesrA   rA   rB   test_one_to_one_features_pandas
  s   

"r  c                  C   sX   t jd} | d}t|}t |}| }|jd }t	|dd t
|D  dS )z.Test that kernel centerer `feature_names_out`.r   )rb   r`   r9   c                 S   s   g | ]}d | qS )ZkernelcentererrA   r   rA   rA   rB   r   A
  s    z:test_kernel_centerer_feature_names_out.<locals>.<listcomp>N)rC   r   r   r  r	   r   rX   r  rE   r,   r   )rS   r[   Z
X_pairwiser  r
  Zsamples_out2rA   rA   rB   &test_kernel_centerer_feature_names_out7
  s   

r  c                 C   s~   g dg dg dg}t d| d|}t|jg d ||}||}||fD ]}| r7t|t| q*t|| q*dS )z>Check that PowerTransfomer leaves constant features unchanged.)rl  r   rN   r  r  rw  N)r   rX   r(   r  r   rq   rC   r   )r  r[   r  ZXftZXtZXt_rA   rA   rB   'test_power_transformer_constant_featureD
  s   

r  z1.12z2scipy version 1.12 required for stable yeo-johnson)reasonc                  C   sB   t g d} dd }|| dd || dd dd dS )a-  Verify that PowerTransformer operates without raising any warnings on valid data.

    This test addresses numerical issues with floating point numbers (mostly
    overflows) with the Yeo-Johnson transform, see
    https://github.com/scikit-learn/scikit-learn/issues/23319#issuecomment-1464933635
    )
g     L@g     x@g     4@g     @@     d@r  g     @g     <@g     \@g     @c                 S   sl   t jdd}t d tddd|  W d   n1 sw   Y  |r4J ddd	d
 |D  dS )z0Internal helper to test for unexpected warnings.Tr9  alwaysr  r  Nz!Unexpected warnings were raised:

c                 s   s    | ]}t |jV  qd S r1  )strmessage)r   wrA   rA   rB   	<genexpr>w
  s    

zPtest_power_transformer_no_warnings.<locals>._test_no_warnings.<locals>.<genexpr>)r   r   r   r   r   join)r  Zcaught_warningsrA   rA   rB   _test_no_warningsq
  s   
z=test_power_transformer_no_warnings.<locals>._test_no_warningsr8   r9   Nra   )rC   rg   r   )r   r  rA   rA   rB   "test_power_transformer_no_warningsW
  s   r   c                  C   s,   t ddt} | jd tjdddk dS )zFCheck that the results are consistent across different SciPy versions.r  r  r   gd8?r   )relN)r   rX   r|   r  rU   r   )r  rA   rA   rB   +test_yeojohnson_for_different_scipy_version
  s   r"  )r  r   numpyrC   Znumpy.linalgr  r  rU   Zscipyr   r   Zsklearnr   r   Zsklearn.baser   Zsklearn.exceptionsr   Z$sklearn.externals._packaging.versionr   parse_versionZsklearn.metrics.pairwiser	   Zsklearn.model_selectionr
   Zsklearn.pipeliner   Zsklearn.preprocessingr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsklearn.preprocessing._datar   r   Zsklearn.svmr   Zsklearn.utilsr    r!   Zsklearn.utils._array_apir"   r#   r$   Z-sklearn.utils._test_common.instance_generatorr%   Zsklearn.utils._testingr&   r'   r(   r)   r*   r+   r,   r-   r.   Zsklearn.utils.estimator_checksr/   Zsklearn.utils.fixesr0   r1   r2   r3   r4   Zsklearn.utils.sparsefuncsr5   Z	load_irisr  r   r   rS   rZ   rY   r   r   r   rT   r   r   r{   r|   tolistr}   ZX_list_1colr=   rF   rM   r^   markZparametrizerg   r-  rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r!  r"  r$  r+  r0  r2  r6  r;  r<  r=  rA  rC  r   rI  rK  rM  rT  rU  r^  rb  rg  ro  rs  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rS  r   rE   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Zskipifr   r"  rA   rA   rA   rB   <module>   sR  L,*
%"2
&403
.
)
 &;

8

	&



9
A /
&
%


$		
)
 
8 

-
6
,6	

		*





	

	'