a
    �ù»j±8  ã                
   @   s  d dl Z d dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ ejd d
�Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z ej! "deed  e #ed ed d d f¡j$fg¡dd„ ƒZ%ej! "deed  e #ed ed d d f¡j$fg¡dd„ ƒZ&dd„ Z'd d!„ Z(d"d#„ Z)G d$d%„ d%e	eƒZ*G d&d'„ d'eƒZ+d(d)„ Z,G d*d+„ d+e	eƒZ-ej! "d,d-d.g¡d/d0„ ƒZ.G d1d2„ d2eƒZ/d3d4„ Z0d5d6„ Z1G d7d8„ d8eƒZ2d9d:„ Z3ej! "d;d<d=g¡d>d?„ ƒZ4dS )@é    N)Úconfig_contextÚdatasets)ÚBaseEstimatorÚTransformerMixinÚclone)ÚTransformedTargetRegressor)ÚDummyRegressor)ÚLinearRegressionÚOrthogonalMatchingPursuit)ÚPipeline)ÚFunctionTransformerÚStandardScaler©Úassert_allclose)Zrandom_statec                  C   sL  t \} }ttƒ tƒ tjtjd�}tjt	dd�� | 
| |¡ W d   ƒ n1 sP0    Y  t |jd f¡}ttƒ tƒ d�}tjtdd��  |j
| ||d� W d   ƒ n1 s°0    Y  ttjd�}tjt	d	d�� | 
| |¡ W d   ƒ n1 sö0    Y  ttjd
�}tjt	dd�� | 
| |¡ W d   ƒ n1 �s>0    Y  d S )N)Ú	regressorÚtransformerÚfuncÚinverse_funczE'transformer' and functions 'func'/'inverse_func' cannot both be set.©Úmatchr   ©r   r   z:fit\(\) got an unexpected keyword argument 'sample_weight')Úsample_weight)r   z=When 'func' is provided, 'inverse_func' must also be provided)r   z=When 'inverse_func' is provided, 'func' must also be provided)Úfriedmanr   r	   r   ÚnpÚexpÚlogÚpytestÚraisesÚ
ValueErrorÚfitZonesÚshaper
   Ú	TypeError)ÚXÚyÚregrr   © r%   úGE:\soccer\ml_env\Lib\site-packages\sklearn/compose/tests/test_target.pyÚ%test_transform_target_regressor_error   sB    üþ*ÿþ.þ*þr'   c                  C   s¼   t \} }ttƒ tjtjdd�}tjtdd�� | 	| |¡ W d   ƒ n1 sN0    Y  ttƒ tjtjd�}|j
dd� t ¡ �( t dt¡ | 	| |¡ W d   ƒ n1 s®0    Y  d S )	NT)r   r   r   Úcheck_inversez?The provided functions.* are not strictly inverse of each otherr   ©r   r   r   F)r(   Úerror)r   r   r	   r   Úsqrtr   r   ZwarnsÚUserWarningr   Z
set_paramsÚwarningsÚcatch_warningsÚsimplefilter©r"   r#   r$   r%   r%   r&   Ú*test_transform_target_regressor_invertible;   s&    üþ*ÿ
r1   c                 C   s2   t j| dd�}t j| dd�}t| | | |ƒ d S )Nr   )Zaxis)r   ÚmeanZstdr   )r#   Úy_predZy_meanZy_stdr%   r%   r&   Ú_check_standard_scaledR   s    r4   c                 C   s   t | d |ƒ d S ©Né   r   )r#   r3   r%   r%   r&   Ú_check_shifted_by_oneX   s    r7   c                  C   sÌ   t \} }ttƒ tjtjd�}| | |¡ | ¡}|j 	| 
dd¡¡ ¡ }tt |¡|ƒ t||j | 
dd¡¡ ¡ ƒ |j|jks„J ‚t|| |j | ¡¡ƒ tƒ  | | |¡¡}t|jj ¡ |j ¡ ƒ d S )Nr)   éÿÿÿÿr6   )r   r   r	   r   r   r   r   ÚpredictÚtransformer_Ú	transformÚreshapeÚsqueezer   Úinverse_transformr    r   Ú
regressor_r   Úcoef_Úravel©r"   r#   r$   r3   Úy_tranÚlrr%   r%   r&   Ú)test_transform_target_regressor_functions\   s    ÿÿrE   c                  C   sÔ   t d } t t d t d d d f¡j}ttƒ tjtjd�}| | |¡ 	| ¡}|j
 |¡}tt |¡|ƒ t||j
 |¡ƒ |j|jksŒJ ‚t|| |j 	| ¡¡ƒ tƒ  | | |¡¡}t|jj ¡ |j ¡ ƒ d S )Nr   r6   é   r)   )r   r   ÚvstackÚTr   r	   r   r   r   r9   r:   r;   r   r>   r    r   r?   r   r@   rA   rB   r%   r%   r&   Ú5test_transform_target_regressor_functions_multioutputo   s     ÿrI   zX,yr6   rF   c           	      C   sÎ   t dd„ dd„ d�}ttƒ |d�}| | |¡ | ¡}|j|jksDJ ‚|j |¡}t||ƒ |j|jksjJ ‚t	||j 
|¡ ¡ ƒ tƒ }t|ƒ}| | | |¡¡ | | ¡}t	|| 
|¡ƒ t	|jj|jƒ d S )Nc                 S   s   | d S r5   r%   ©Úxr%   r%   r&   Ú<lambda>Š   ó    z@test_transform_target_regressor_1d_transformer.<locals>.<lambda>c                 S   s   | d S r5   r%   rJ   r%   r%   r&   rL   Š   rM   ©r   r   r   )r   r   r	   r   r9   r    r:   r;   r7   r   r>   r=   r   Úfit_transformr?   r@   ©	r"   r#   r   r$   r3   rC   rD   Útransformer2Ú	y_lr_predr%   r%   r&   Ú.test_transform_target_regressor_1d_transformer�   s$    ÿÿ

rS   c           
   	   C   s2  t ƒ }ttƒ |d�}| | |¡ | ¡}|j|jks6J ‚|jdkrV|j | 	dd¡¡}n|j |¡}t
|| ¡ ƒ |j|jks€J ‚t||j |¡ ¡ ƒ tƒ }t|ƒ}|jdkrî| | | | 	dd¡¡ ¡ ¡ | | ¡ 	dd¡}| |¡ ¡ }	n&| | | |¡¡ | | ¡}| |¡}	t||	ƒ t|jj|jƒ d S )Nr   r6   r8   )r   r   r	   r   r9   r    Úndimr:   r;   r<   r4   r=   r   r>   r   rO   r?   r@   )
r"   r#   r   r$   r3   rC   rD   rQ   rR   Zy_pred2r%   r%   r&   Ú.test_transform_target_regressor_2d_transformer    s.    ÿ




rU   c            	      C   sè   t d } t t d t d d d f¡j}tƒ }ttƒ |d�}| | |¡ | ¡}|j	|j	ks^J ‚|j
 |¡}t||ƒ |j	|j	ks„J ‚t||j
 |¡ ¡ ƒ tƒ }t|ƒ}| | | |¡¡ | | ¡}t|| |¡ƒ t|jj|jƒ d S )Nr   r6   rF   r   )r   r   rG   rH   r   r   r	   r   r9   r    r:   r;   r4   r   r>   r=   r   rO   r?   r@   rP   r%   r%   r&   Ú:test_transform_target_regressor_2d_transformer_multioutputÅ   s$     ÿ

rV   c                  C   sv   t d } t t d  ddd¡g d¢¡}dd„ }dd„ }t||d	�}ttƒ |d
�}| | |¡ | ¡}|j	|j	ksrJ ‚d S )Nr   r6   r8   )r6   é   rF   c                 S   s   |   | jd d¡S )Nr   r8   ©r<   r    ©Údatar%   r%   r&   Úflatten_dataæ   s    z?test_transform_target_regressor_3d_target.<locals>.flatten_datac                 S   s   |   | jd dd¡S )Nr   r8   rF   rX   rY   r%   r%   r&   Úunflatten_dataé   s    zAtest_transform_target_regressor_3d_target.<locals>.unflatten_datarN   r   )
r   r   Ztiler<   r   r   r	   r   r9   r    )r"   r#   r[   r\   r   r$   r3   r%   r%   r&   Ú)test_transform_target_regressor_3d_targetß   s    ÿr]   c                  C   s°   t d } t t d t d d d g¡}dd„ }dd„ }t||dd	�}| | |¡ | | ¡}|jd
kshJ ‚dd„ }t||dd	�}| | |¡ | | ¡}|jd
ks¢J ‚t||ƒ d S )Nr   r6   rF   c                 S   s@   t  | d d …df d | d d …df d  ¡}|d d …t jf S ©Nr   rF   r6   )r   r+   Znewaxis)r#   Úoutr%   r%   r&   r   ø   s    .z=test_transform_target_regressor_multi_to_single.<locals>.funcc                 S   s   | S ©Nr%   ©r#   r%   r%   r&   r   ü   s    zEtest_transform_target_regressor_multi_to_single.<locals>.inverse_funcF)r   r   r(   )éd   r6   c                 S   s.   t  | d d …df d | d d …df d  ¡S r^   )r   r+   ra   r%   r%   r&   r     s    )r   r   Z	transposer   r   r9   r    r   )r"   r#   r   r   ÚttZy_pred_2d_funcZy_pred_1d_funcr%   r%   r&   Ú/test_transform_target_regressor_multi_to_singleô   s$    ÿ
ÿ
rd   c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚDummyCheckerArrayTransformerNc                 C   s   t |tjƒsJ ‚| S r`   ©Ú
isinstancer   Zndarray©Úselfr"   r#   r%   r%   r&   r     s    z DummyCheckerArrayTransformer.fitc                 C   s   t |tjƒsJ ‚|S r`   rf   ©ri   r"   r%   r%   r&   r;     s    z&DummyCheckerArrayTransformer.transformc                 C   s   t |tjƒsJ ‚|S r`   rf   rj   r%   r%   r&   r>     s    z.DummyCheckerArrayTransformer.inverse_transform)N)Ú__name__Ú
__module__Ú__qualname__r   r;   r>   r%   r%   r%   r&   re     s   
re   c                       s*   e Zd Zd‡ fdd„	Z‡ fdd„Z‡  ZS )ÚDummyCheckerListRegressorNc                    s   t |tƒsJ ‚tƒ  |||¡S r`   )rg   ÚlistÚsuperr   )ri   r"   r#   r   ©Ú	__class__r%   r&   r   #  s    zDummyCheckerListRegressor.fitc                    s   t |tƒsJ ‚tƒ  |¡S r`   )rg   ro   rp   r9   rj   rq   r%   r&   r9   '  s    z!DummyCheckerListRegressor.predict)N)rk   rl   rm   r   r9   Ú__classcell__r%   r%   rq   r&   rn   "  s   rn   c                  C   s®   t \} }ttƒ tƒ dd�}| |  ¡ | ¡ ¡ | |  ¡ ¡ t t	¡�  | | | ¡ ¡ W d   ƒ n1 sl0    Y  t t	¡� | | ¡ W d   ƒ n1 s 0    Y  d S )NF)r   r   r(   )
r   r   re   rn   r   Útolistr9   r   r   ÚAssertionError)r"   r#   rc   r%   r%   r&   Ú.test_transform_target_regressor_ensure_y_array,  s    ý.rv   c                   @   s4   e Zd ZdZddd„Zddd„Zdd	„ Zd
d„ ZdS )ÚDummyTransformerz;Dummy transformer which count how many time fit was called.r   c                 C   s
   || _ d S r`   ©Úfit_counter)ri   ry   r%   r%   r&   Ú__init__A  s    zDummyTransformer.__init__Nc                 C   s   |  j d7  _ | S r5   rx   rh   r%   r%   r&   r   D  s    zDummyTransformer.fitc                 C   s   |S r`   r%   rj   r%   r%   r&   r;   H  s    zDummyTransformer.transformc                 C   s   |S r`   r%   rj   r%   r%   r&   r>   K  s    z"DummyTransformer.inverse_transform)r   )N)rk   rl   rm   Ú__doc__rz   r   r;   r>   r%   r%   r%   r&   rw   >  s
   

rw   r(   FTc                 C   s6   t \}}ttƒ | d�}| ||¡ |jjdks2J ‚d S )N)r   r(   r6   )r   r   rw   r   r:   ry   )r(   r"   r#   Zttrr%   r%   r&   Ú)test_transform_target_regressor_count_fitO  s    ÿr|   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )Ú DummyRegressorWithExtraFitParamsNTc                    s   |rJ ‚t ƒ  |||¡S r`   )rp   r   )ri   r"   r#   r   Úcheck_inputrq   r%   r&   r   \  s    z$DummyRegressorWithExtraFitParams.fit)NT)rk   rl   rm   r   rs   r%   r%   rq   r&   r}   [  s   r}   c                  C   s<   t \} }ttƒ tƒ d�}|j| |dd� |jjdks8J ‚d S )Nr   F©r~   r6   )r   r   r}   rw   r   r:   ry   r0   r%   r%   r&   Ú3test_transform_target_regressor_pass_fit_parametersc  s    ÿr€   c                  C   s^   t \} }ttƒ tƒ d�}dtƒ fd|fg}t|ƒ}|j| |fi ddi¤Ž |jjdksZJ ‚d S )Nr   Ú	normalizeZestZest__check_inputFr6   )	r   r   r}   rw   r   r   r   r:   ry   )r"   r#   r$   Z
estimatorsÚpipr%   r%   r&   Ú.test_transform_target_regressor_route_pipelinem  s    ÿrƒ   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )Ú$DummyRegressorWithExtraPredictParamsTc                    s   d| _ |rJ ‚tƒ  |¡S )NT)Úpredict_calledrp   r9   )ri   r"   r~   rq   r%   r&   r9   |  s    z,DummyRegressorWithExtraPredictParams.predict)T)rk   rl   rm   r9   rs   r%   r%   rq   r&   r„   {  s   r„   c                  C   sB   t \} }ttƒ tƒ d�}| | |¡ |j| dd� |jjs>J ‚d S )Nr   Fr   )r   r   r„   rw   r   r9   r?   r…   r0   r%   r%   r&   Ú=test_transform_target_regressor_pass_extra_predict_parameters„  s    ÿr†   Úoutput_formatZpandasZpolarsc              	   C   s–   t  ¡ \}}t |¡d }t| d��^ t ¡ �6 t d¡ tt	ƒ tj
tjd� ||¡ W d  ƒ n1 sj0    Y  W d  ƒ n1 sˆ0    Y  dS )z©Test that TransformedTargetRegressor will not raise warnings if
    set_config(transform_output="pandas"/"polars") is set globally; regression test for
    issue #29361.r6   )Ztransform_outputr*   r)   N)r   Zmake_regressionr   Úabsr   r-   r.   r/   r   r	   r   r   r   )r‡   r"   r#   r%   r%   r&   Ú@test_transform_target_regressor_not_warns_with_global_output_set�  s    

ÿþr‰   )5r-   Únumpyr   r   Zsklearnr   r   Zsklearn.baser   r   r   Zsklearn.composer   Zsklearn.dummyr   Zsklearn.linear_modelr	   r
   Zsklearn.pipeliner   Zsklearn.preprocessingr   r   Zsklearn.utils._testingr   Zmake_friedman1r   r'   r1   r4   r7   rE   rI   ÚmarkZparametrizerG   rH   rS   rU   rV   r]   rd   re   rn   rv   rw   r|   r}   r€   rƒ   r„   r†   r‰   r%   r%   r%   r&   Ú<module>   sR   ),ÿ
,ÿ
" 


	