U
    3d3                  
   @   s  d dl Zd dl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 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 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 !d0d1d2gd3d4 Z-G d5d6 d6eZ.d7d8 Z/d9d: Z0G d;d< d<eZ1d=d> Z2dS )?    N)clone)BaseEstimator)TransformerMixin)DummyRegressorassert_allclose)assert_no_warnings)FunctionTransformer)StandardScaler)Pipeline)LinearRegressionOrthogonalMatchingPursuit)datasets)TransformedTargetRegressor)Zrandom_statec               	   C   s   t \} }tt t tjtjd}tjt	dd |
| | W 5 Q R X t|jd f}tt t d}tjtdd |j
| ||d W 5 Q R X ttjd}tjt	d	d |
| | W 5 Q R X 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)friedmanr   r   r
   npexplogpytestraises
ValueErrorfitZonesshaper   	TypeError)Xyregrr    r%   E/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/compose/tests/test_target.py%test_transform_target_regressor_error   s8     r'   c               	   C   sv   t \} }tt tjtjdd}tjtdd |	| | W 5 Q R X tt tjtjd}|j
dd t|j	| | d S )NT)r   r   r   check_inversezMThe provided functions or transformer are not strictly inverse of each other.r   r   r   r   F)r(   )r   r   r   r   sqrtr   r   ZwarnsUserWarningr   Z
set_paramsr   r"   r#   r$   r%   r%   r&   *test_transform_target_regressor_invertible<   s&      r-   c                 C   s2   t j| dd}t j| dd}t| | | | d S )Nr   )Zaxis)r   ZmeanZstdr   )r#   y_predZy_meanZy_stdr%   r%   r&   _check_standard_scaledS   s    r/   c                 C   s   t | d | d S N   r   )r#   r.   r%   r%   r&   _check_shifted_by_oneY   s    r2   c                  C   s   t \} }tt tjtjd}|| || }|j	|
dd }tt|| t||j|
dd  |j|jkstt|||j|  t | ||}t|jj |j  d S )Nr)   r1   )r   r   r   r   r   r   r   predicttransformer_	transformreshapesqueezer   inverse_transformr    AssertionErrorr   
regressor_r   coef_ravelr"   r#   r$   r.   y_tranlrr%   r%   r&   )test_transform_target_regressor_functions]   s"       rA   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stt|||j	|  t | ||}t|jj |j  d S )Nr   r1      r)   )r   r   vstackTr   r   r   r   r   r4   r5   r6   r   r9   r    r:   r   r;   r   r<   r=   r>   r%   r%   r&   5test_transform_target_regressor_functions_multioutputp   s       rE   zX,yr1   rB   c           	      C   s   t dd dd d}tt |d}|| || }|j|jksDt|j|}t	|| |j|jksjtt
||j|  t }t|}|| || || }t
||| t
|jj|j d S )Nc                 S   s   | d S r0   r%   xr%   r%   r&   <lambda>       z@test_transform_target_regressor_1d_transformer.<locals>.<lambda>c                 S   s   | d S r0   r%   rF   r%   r%   r&   rH      rI   r   r   r   )r	   r   r   r   r4   r    r:   r5   r6   r2   r   r9   r8   r   fit_transformr;   r<   	r"   r#   r   r$   r.   r?   r@   transformer2	y_lr_predr%   r%   r&   .test_transform_target_regressor_1d_transformer   s(      

rO   c           
   	   C   s2  t  }tt |d}|| || }|j|jks6t|jdkrV|j	|
dd}n|j	|}t||  |j|jkstt||j|  t }t|}|jdkr|| ||
dd  || 
dd}|| }	n&|| || || }||}	t||	 t|jj|j d S )Nr   r1   r3   )r
   r   r   r   r4   r    r:   ndimr5   r6   r7   r/   r8   r   r9   r   rK   r;   r<   )
r"   r#   r   r$   r.   r?   r@   rM   rN   Zy_pred2r%   r%   r&   .test_transform_target_regressor_2d_transformer   s0     




rQ   c            	      C   s   t d } tt d t d d d fj}t }tt |d}|| || }|j	|j	ks^t
|j|}t|| |j	|j	kst
t||j|  t }t|}|| || || }t||| t|jj|j d S )Nr   r1   rB   r   )r   r   rC   rD   r
   r   r   r   r4   r    r:   r5   r6   r/   r   r9   r8   r   rK   r;   r<   rL   r%   r%   r&   :test_transform_target_regressor_2d_transformer_multioutput   s&      

rR   c                  C   sx   t d } tt d ddddddg}dd }dd	 }t||d
}tt |d}|| || }|j	|j	kstt
d S )Nr   r1   r3      rB   c                 S   s   |  | jd dS )Nr   r3   r7   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   r3   rB   rT   rU   r%   r%   r&   unflatten_data   s    zAtest_transform_target_regressor_3d_target.<locals>.unflatten_datarJ   r   )r   r   Ztiler7   r	   r   r   r   r4   r    r:   )r"   r#   rW   rX   r   r$   r.   r%   r%   r&   )test_transform_target_regressor_3d_target   s      rY   c                  C   s   t d } tt d t d d d g}dd }dd }t||dd	}|| | || }|jd
kshtdd }t||dd	}|| | || }|jd
kstt|| d S )Nr   r1   rB   c                 S   s@   t | d d df d | d d df d  }|d d t jf S Nr   rB   r1   )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   r1   c                 S   s.   t | d d df d | d d df d  S rZ   )r   r*   r]   r%   r%   r&   r     s    )	r   r   Z	transposer   r   r4   r    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,      
  
r`   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t| S r\   
isinstancer   Zndarrayr:   selfr"   r#   r%   r%   r&   r     s    z DummyCheckerArrayTransformer.fitc                 C   s   t |tjst|S r\   rb   re   r"   r%   r%   r&   r6     s    z&DummyCheckerArrayTransformer.transformc                 C   s   t |tjst|S r\   rb   rf   r%   r%   r&   r9     s    z.DummyCheckerArrayTransformer.inverse_transform)N)__name__
__module____qualname__r   r6   r9   r%   r%   r%   r&   ra     s   
ra   c                       s*   e Zd Zd fdd	Z fddZ  ZS )DummyCheckerListRegressorNc                    s   t |tstt |||S r\   )rc   listr:   superr   )re   r"   r#   r   	__class__r%   r&   r   $  s    zDummyCheckerListRegressor.fitc                    s   t |tstt |S r\   )rc   rk   r:   rl   r4   rf   rm   r%   r&   r4   (  s    z!DummyCheckerListRegressor.predict)N)rg   rh   ri   r   r4   __classcell__r%   r%   rm   r&   rj   #  s   rj   c               	   C   s   t \} }tt t dd}||  |  ||   tt	 || |  W 5 Q R X tt	 ||  W 5 Q R X d S )NF)r   r   r(   )
r   r   ra   rj   r   tolistr4   r   r   r:   )r"   r#   r_   r%   r%   r&   .test_transform_target_regressor_ensure_y_array-  s    rq   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)re   rt   r%   r%   r&   __init__B  s    zDummyTransformer.__init__Nc                 C   s   |  j d7  _ | S r0   rs   rd   r%   r%   r&   r   E  s    zDummyTransformer.fitc                 C   s   |S r\   r%   rf   r%   r%   r&   r6   I  s    zDummyTransformer.transformc                 C   s   |S r\   r%   rf   r%   r%   r&   r9   L  s    z"DummyTransformer.inverse_transform)r   )N)rg   rh   ri   __doc__ru   r   r6   r9   r%   r%   r%   r&   rr   ?  s
   

rr   r(   FTc                 C   s6   t \}}tt | d}||| |jjdks2td S )N)r   r(   r1   )r   r   rr   r   r5   rt   r:   )r(   r"   r#   Zttrr%   r%   r&   )test_transform_target_regressor_count_fitP  s     rw   c                       s   e Zd Zd fdd	Z  ZS ) DummyRegressorWithExtraFitParamsNTc                    s   |rt t |||S r\   )r:   rl   r   )re   r"   r#   r   check_inputrm   r%   r&   r   ]  s    z$DummyRegressorWithExtraFitParams.fit)NT)rg   rh   ri   r   ro   r%   r%   rm   r&   rx   \  s   rx   c                  C   s<   t \} }tt t d}|j| |dd |jjdks8td S )Nr   Fry   r1   )r   r   rx   rr   r   r5   rt   r:   r,   r%   r%   r&   3test_transform_target_regressor_pass_fit_parametersd  s     r{   c                  C   sZ   t \} }tt t d}dt fd|fg}t|}|j| |fddi |jjdksVt	d S )Nr   	normalizeZestZest__check_inputFr1   )
r   r   rx   rr   r
   r   r   r5   rt   r:   )r"   r#   r$   Z
estimatorspipr%   r%   r&   .test_transform_target_regressor_route_pipelinen  s     r~   c                       s   e Zd Zd fdd	Z  ZS )$DummyRegressorWithExtraPredictParamsTc                    s   d| _ |rtt |S )NT)predict_calledr:   rl   r4   )re   r"   ry   rm   r%   r&   r4   }  s    z,DummyRegressorWithExtraPredictParams.predict)T)rg   rh   ri   r4   ro   r%   r%   rm   r&   r   |  s   r   c                  C   sB   t \} }tt t d}|| | |j| dd |jjs>td S )Nr   Frz   )	r   r   r   rr   r   r4   r;   r   r:   r,   r%   r%   r&   =test_transform_target_regressor_pass_extra_predict_parameters  s     r   )3Znumpyr   r   Zsklearn.baser   r   r   Zsklearn.dummyr   Zsklearn.utils._testingr   r   Zsklearn.preprocessingr	   r
   Zsklearn.pipeliner   Zsklearn.linear_modelr   r   Zsklearnr   Zsklearn.composer   Zmake_friedman1r   r'   r-   r/   r2   rA   rE   markZparametrizerC   rD   rO   rQ   rR   rY   r`   ra   rj   rq   rr   rw   rx   r{   r~   r   r   r%   r%   r%   r&   <module>   sX   ! *
 *
" 


	