U
    9%el                  
   @   s  d dl Z 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mZ d dlmZmZmZm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 m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z? dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEd d! ZFe
G ZHeHjIZJeHjKZLe;eLd"d#ZMe;eLd$d#ZNeOeLeMeNfZPeJjQ\ZRZSePjQd" ZTeUeVeLZWeXeYejVeLeMeNfZZd%d& Z[d'd( Z\d)d* Z]d+d, Z^d-d. Z_d/d0 Z`d1d2 Zad3d4 Zbd5d6 Zcd7d8 Zdd9d: Zeejfgd;d<d=gd>d? Zhd@dA ZidBdC ZjdDdE ZkdFdG ZldHdI ZmdJdK ZndLdM ZodNdO ZpdPdQ ZqejfgdRed$dSe1ed$dSe0ed$dSgdTdU ZrG dVdW dWeZsG dXdY dYeZtejfudZejfgd[e1etd\d]e
 fe2es e
jd^d d_fgd`da Zvdbdc Zwejfgdde1e!fe2e$fgdedf ZxejfgdgeXejyezgdhdi Z{djdk Z|dldm Z}dndo Z~dpdq Zejfgdre0dsfe1dtfgdudv Zdwdx ZdS )y    N)	cpu_count)datasets)ClassifierMixinclone)load_linnerudmake_classificationmake_multilabel_classificationmake_regression)DummyClassifierDummyRegressor)GradientBoostingRegressorRandomForestClassifierStackingRegressor)NotFittedError)SimpleImputer)LassoLinearRegressionLogisticRegressionOrthogonalMatchingPursuitPassiveAggressiveClassifierRidgeSGDClassifierSGDRegressor)jaccard_scoremean_squared_error)GridSearchCVtrain_test_split)OneVsRestClassifier)ClassifierChainMultiOutputClassifierMultiOutputRegressorRegressorChain)make_pipeline)	LinearSVC)DecisionTreeClassifier)shuffle)assert_almost_equalassert_array_almost_equalassert_array_equalc            
      C   s   t jddd\} }| d d |d d  }}| dd  |dd   }}t|}tdD ]<}tdd}|||d d |f  |||d d |f< qXttdd}||| ||}	t	||	 d S N   r   	n_targetsrandom_state2   r-   )
r   r	   np
zeros_likeranger   fitpredictr    r&   )
XyX_trainy_trainX_testy_test
referencesnrgry_pred r?   ]/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/tests/test_multioutput.pytest_multi_target_regression6   s    


rA   c                  C   s8  t jddd\} }| d d |d d  }}| dd  |dd   }}t|}d}tdD ]f}tddd}	|	|d | |d ||f  |	||d  ||d |f  |	||d d |f< q\ttddd}	|	|d | |d |  |	||d  ||d   |	|}
t	||
 t
ttdr4td S )	Nr*   r   r+   r.         r-   max_iterpartial_fit)r   r	   r0   r1   r2   r   rF   r4   r    r&   hasattrr   AssertionError)r5   r6   r7   r8   r9   r:   r;   
half_indexr<   sgrr>   r?   r?   r@   (test_multi_target_regression_partial_fitH   s     
  

rK   c               	   C   sN   t jddd\} }ttdd}d}tjt|d || | W 5 Q R X d S )N   r   r+   r/   zat least two dimensionsmatch)r   r	   r    r   pytestraises
ValueErrorr3   )r5   r6   r=   msgr?   r?   r@   'test_multi_target_regression_one_target_   s
    rS   c                  C   s   t jddd\} }| d d |d d  }}| dd  }tjtjtjtjtjfD ]V}tt	dd}tt	dd}|
|| |
||| t||||| qPd S r)   )r   r	   sp
csr_matrixZ
csc_matrixZ
coo_matrixZ
dok_matrixZ
lil_matrixr    r   r3   r&   r4   )r5   r6   r7   r8   r9   sparser=   Z
rgr_sparser?   r?   r@   #test_multi_target_sparse_regressionh   s    rW   c               	   C   s   dddgdddgg} ddgddgg}d	d
g}t t }d}tjt|d || || W 5 Q R X t tdd}|| || d S )NrL      r*      rC      T㥛 	@X9v@g?g333333?zdoes not support sample weightsrM   r   r/   )r    r   rO   rP   rQ   r3   r   )r5   r6   wr=   rR   r?   r?   r@   $test_multi_target_sample_weights_api}   s    
r^   c                  C   s   dddgdddgg} ddgddgg}d	d
g}t tddd}|| || d	d	g}t tddd}|| || || d d || d d kstd S )NrL   rX   r*   rY   rC   rZ   r[   r\          @      ?r   rD   )r    r   rF   r4   rH   )r5   r6   r]   rgr_wr=   r?   r?   r@   +test_multi_target_sample_weight_partial_fit   s    rb   c                  C   s   dddgdddgg} ddgddgg}d	d
g}t tdd}|| || dddgdddgdddgg}ddgddgddgg}t tdd}||| dddgdddgg}t|||| d S )NrL   rX   r*   rY   rC   rZ   r[   r\   r_   r`   r   r/         ?      @      @      @      @)r    r   r3   r&   r4   )Xwywr]   ra   r5   r6   r=   r9   r?   r?   r@    test_multi_target_sample_weights   s    rj   rL   r/   rX   c                  C   sb   t dddd} t| dd}|ttt |jd }|tt |jd }t dkr^||k	s^td S )Nlog_lossrL   rC   lossr-   rE   rY   )Zn_jobsr   )	r   r   rF   r5   r6   classesestimators_r   rH   )sgd_linear_clfZmorest1est2r?   r?   r@   8test_multi_output_classification_partial_fit_parallelism   s    


rs   c                  C   sb   t ddd} t| }|tt t|dr.tt dddd} t| }|tt t|ds^td S )NrL   rC   rD   predict_probark   rl   )r   r   r3   r5   r6   rG   rH   )rp   multi_target_linearr?   r?   r@   'test_hasattr_multi_output_predict_proba   s    rv   c               	   C   s   t ddd} ddi}dd }t| ||dd	d
}t|}|tt |t t ddd} t| }|tt d}tjt	|d |t W 5 Q R X d S )NrL   rC   rD   rm   )Zhingerk   Zmodified_huberc                 S   s   t | drdS dS d S )Nrt   r`   g        )rG   )	estimatorr5   r6   r?   r?   r@   custom_scorer   s    
z6test_multi_output_predict_proba.<locals>.custom_scorerr*   raise)Z
param_gridZscoringcvZerror_scorez8probability estimates are not available for loss='hinge'rM   )
r   r   r   r3   r5   r6   rt   rO   rP   AttributeError)rp   paramrx   Zgrid_clfru   err_msgr?   r?   r@   test_multi_output_predict_proba   s&    
r~   c                  C   s2  t dddd} t| }tjd d }|jtd | td | td |t}tt	f|jks`t
|t|d  t|d   |t}tt	f|jkst
tdD ]}t| } | jtd | td ||f t| d t| t|d d |f  | t|d  t|d |f  t| t|d d |f  qd S )	Nrk   rL   rC   rl   r   rX   )rn   r*   )r   r   r5   shaperF   r6   rn   r4   	n_samples	n_outputsrH   r2   r   r(   )rp   ru   rI   Zfirst_predictionsZsecond_predictionsir?   r?   r@   ,test_multi_output_classification_partial_fit   s&     


   r   c               	   C   sD   t dddd} t| }d}tjt|d |tt W 5 Q R X d S )Nrk   rL   rC   rl   z8classes must be passed on the first call to partial_fit.rM   )r   r   rO   rP   rQ   rF   r5   r6   )rp   ru   rR   r?   r?   r@   Gtest_multi_output_classification_partial_fit_no_first_classes_exception  s
    r   c                  C   s   t ddd} t| }|tt |t}ttf|jks<t	|
t}t|tksVt	|D ]}ttf|jksZt	qZttjt|dd| tdD ]f}t| }|ttd d |f  t|tt|d d |f kst	tt|
tt||  qd S )N
   rL   n_estimatorsr-   Zaxisr*   )r   r   r3   r5   r6   r4   r   r   r   rH   rt   len	n_classesr(   r0   ZargmaxZdstackr2   r   list)forestZmulti_target_forestpredictionsrt   Zclass_probabilitiesr   Zforest_r?   r?   r@    test_multi_output_classification!  s    

&r   c                  C   s   t ddd} t| }t|}|tt |t}ttf|j	ksDt
tdD ]J}t|}|ttd d |f  t|tt|d d |f ksLt
qLd S )Nautor   dualr-   r*   )r#   r   r   r3   r5   r6   r4   r   r   r   rH   r2   r   r   )ZsvcZmulti_class_svcZmulti_target_svcr   r   Zmulti_class_svc_r?   r?   r@   %test_multiclass_multioutput_estimator>  s    
r   c            
   
   C   s  d} t j| }|jdd}t dddddgdd}t dd	d
d	dgdd}t j||gdd}ttd| d}|	|| |
|}t ddgddgddgddgddggt dddgdddgddd gd!d"d#gd$d%d&ggg}tt|D ]}	t||	 ||	  qd S )'Ni  )rC   rC   )sizebarC   rL   defr   Z	liblinear)Zsolverr-   gu)"?gu_|?gtĳ?gv?g/?g ?gK[aS?g[rO?ga]q?g?kDQ?g 8칌?g?go|̋<?gOW?gڔ#K?gz~?gP1s&q?gf^?g]=!?g{Y;?ghJ?gL$$S?gXA	?g 7%?g?)r0   randomRandomStatenormalarrayZreshapeZconcatenater   r   r3   rt   r2   r   r&   )
seedrngr5   y1y2YclfZy_resultZy_actualr   r?   r?   r@   3test_multiclass_multioutput_estimator_predict_probaP  s<    

	r   c            	      C   s   dddgdddgg} ddgddgg}t ddg}td	dd
}t|}|| || dddgdddgdddgg}ddgddgddgg}td	dd
}t|}||| dddgdddgg}t|||| d S )NrL   rX   r*   rY   rC   rZ   r_   r`   r   r   rc   rd   re   rf   rg   )r0   asarrayr   r   r3   r&   r4   )	rh   ri   r]   r   clf_wr5   r6   r   r9   r?   r?   r@   /test_multi_output_classification_sample_weights  s    r   c            	      C   s   dddgdddgddd	gg} ddgddgddgg}t d
ddg}tddd}t|}|| || dddgdddgdddgddd	gg}ddgddgddgddgg}tddd}t|}||| ddd	gg}t|||| d S )NrL   rX   r*   rY   rC   rZ   rc   rd   re   r_   r`      rD   )r0   r   r   r   r3   r'   r4   )	rh   ri   r]   rp   r   r5   r6   r   r9   r?   r?   r@   ;test_multi_output_classification_partial_fit_sample_weights  s    $r   c               	   C   s   t tddd} tt | tt W 5 Q R X t	t
tf}| tt tt | t| W 5 Q R X d}tjt|d | ttd d df  W 5 Q R X d S )Nr   r   r   zUnknown label typerM   rL   )r   r#   rO   rP   r   scorer5   r6   r0   column_stackr   r   r3   rQ   )mocZy_newrR   r?   r?   r@   test_multi_output_exceptions  s    r   response_methodrt   r4   c              	   C   s2   t t }tt t|| t W 5 Q R X dS )zECheck that we raise the proper error when the estimator is not fittedN)r   r   rO   rP   r   getattrr5   )r   r   r?   r?   r@   "test_multi_output_not_fitted_error  s    
r   c               	   C   s   t t } t| dst| tt t| ds2tt tdd} t| drNtd}tj	t
|d | t W 5 Q R X | tt t| drttj	t
|d | t W 5 Q R X dS )zVCheck the behavior for the delegation of predict_proba to the underlying
    estimatorrt   r   r   z3'LinearSVC' object has no attribute 'predict_proba'rM   N)r   r   rG   rH   r3   r5   r6   r#   rO   rP   r{   rt   )r   rR   r?   r?   r@   (test_multi_output_delegate_predict_proba  s    
r   c                  C   s2   t dddddd\} }tdd |D }| |fS )	Ni  d      r   r   )r   
n_featuresr   Zn_informativer-   c                 S   s(   g | ] }d d t |ddd D qS )c                 S   s   g | ]}t |qS r?   )int).0Zyyyr?   r?   r@   
<listcomp>  s     zLgenerate_multilabel_dataset_with_correlations.<locals>.<listcomp>.<listcomp>z#06brX   N)format)r   yyr?   r?   r@   r     s     zAgenerate_multilabel_dataset_with_correlations.<locals>.<listcomp>)r   r0   r   )r5   r6   ZY_multir?   r?   r@   -generate_multilabel_dataset_with_correlations  s        
r   c                  C   sl   t  \} }ttdd}|| | || }|j|jks>t|| }|dk}t|| t	|drhtd S )Nr   r   r   rt   )
r   r   r#   r3   r4   r   rH   Zdecision_functionr(   rG   )r5   r   classifier_chainY_predZ
Y_decisionY_binaryr?   r?   r@   5test_classifier_chain_fit_and_predict_with_linear_svc  s    



r   c                  C   sb   t  \} }t| }tt }||| ||}tt }|| | || }t|| d S N)r   rT   rU   r   r   r3   r4   r(   )r5   r   X_sparser   ZY_pred_sparseZY_pred_denser?   r?   r@   6test_classifier_chain_fit_and_predict_with_sparse_data  s    





r   c            
      C   s   t  \} }| d dd d f }| dd d d f }|d dd d f }|dd d d f }tt }||| ||}tt }||| ||}	t||	ddt||ddkstd S )NiX  samplesZaverage)r   r   r   r3   r4   r   r   rH   )
r5   r   r7   r9   ZY_trainZY_testZovrZ
Y_pred_ovrchainZY_pred_chainr?   r?   r@   +test_classifier_chain_vs_independent_models  s     




  r   c                  C   s   t  \} }tt tt g}|D ]b}|| | || }|j|jksLtdd |j	D t
t| jd | jd |jd  ks"tq"|d | }|dk}t|| t|d tstd S )Nc                 S   s   g | ]}|j jqS r?   )coef_r   )r   cr?   r?   r@   r   #  s     z3test_base_chain_fit_and_predict.<locals>.<listcomp>rL         ?)r   r!   r   r   r   r3   r4   r   rH   ro   r   r2   rt   r(   
isinstancer   )r5   r   chainsr   r   ZY_probr   r?   r?   r@   test_base_chain_fit_and_predict  s    


r   c                  C   sd   t  \} }t| }tt ddtt ddg}|D ]*}||| ||}|j	|j	ks4t
q4d S )Nr*   rz   )r   rT   rU   r   r   r!   r   r3   r4   r   rH   )r5   r   r   Zbase_chainsr   r   r?   r?   r@   7test_base_chain_fit_and_predict_with_sparse_data_and_cv.  s    


r   c                  C   s   t  \} }tt tt fD ]}t|jddd}|| | t|j|jd}|| | t	|j|j t
|jt
tdkstt|jdksttt|jdkstt|j|jD ]\}}t|j|j qqd S )Nr   *   )orderr-   r   rY   )r   r   r   r!   r   r   
set_paramsr3   Zorder_r(   r   r   r2   rH   r   setzipro   r'   r   )r5   r   r   Zchain_randomZchain_fixedrq   rr   r?   r?   r@   test_base_chain_random_order<  s    
r   c                  C   s   t  \} }tt tt fD ]}|| | t|jdd}|| | || }|| }|j	|j	ksnt
t||krt
t|trt||dddkst
qt||dk st
qd S )Nr*   r   r   r   g?g      ?)r   r   r   r!   r   r3   r   r   r4   r   rH   r0   allr   r   r   )r5   r   r   Zchain_cvZ	Y_pred_cvr   r?   r?   r@   (test_base_chain_crossval_fit_and_predictN  s    



r   rw   )r   c                 C   sR   |  tt t| jtstt| jtks.tt	t
| jD ]\}}t|| q:d S r   )r3   r5   r6   r   Zclasses_r   rH   r   r   r   rn   r(   )rw   Zestimator_classesZexpected_classesr?   r?   r@   test_multi_output_classes_b  s
    r   c                       s   e Zd Zd fdd	Z  ZS )DummyRegressorWithFitParamsNc                    s   || _ t |||S r   _fit_paramssuperr3   selfr5   r6   sample_weight
fit_params	__class__r?   r@   r3   u  s    zDummyRegressorWithFitParams.fit)N__name__
__module____qualname__r3   __classcell__r?   r?   r   r@   r   t  s   r   c                       s   e Zd Zd fdd	Z  ZS )DummyClassifierWithFitParamsNc                    s   || _ t |||S r   r   r   r   r?   r@   r3   {  s    z DummyClassifierWithFitParams.fit)Nr   r?   r?   r   r@   r   z  s   r   z%ignore:`n_features_in_` is deprecatedzestimator, datasetZprior)Zstrategyr*   r+   c                 C   s@   |\}}t |}| j|||d | jD ]}d|jks(tq(d S )N)
some_paramr   )r0   r1   r3   ro   r   rH   )rw   Zdatasetr5   r6   r   Zdummy_estimatorr?   r?   r@   *test_multioutput_estimator_with_fit_params  s
    

r   c                  C   s~   t jd} tjddd\}}| |jd }G dd dt}t| }d|i}|j	||f| |j
D ]}|j|ksftqfd S )Nr   r*   r+   c                       s   e Zd Z fddZ  ZS )z0test_regressor_chain_w_fit_params.<locals>.MySGDc                    s    |d | _ t j||f| d S )Nr   )sample_weight_r   r3   )r   r5   r6   r   r   r?   r@   r3     s    
z4test_regressor_chain_w_fit_params.<locals>.MySGD.fitr   r?   r?   r   r@   MySGD  s   r   r   )r0   r   r   r   r	   Zrandr   r   r!   r3   ro   r   rH   )r   r5   r6   weightr   modelZ	fit_paramestr?   r?   r@   !test_regressor_chain_w_fit_params  s    

r   zMultiOutputEstimator, Estimatorc                 C   s|   t jd}|dd|ddd }}|jddg|jdd	gd
t}t j	||< t
t | }| ||||| d S )Nr   r.   rX   rL   r   )r.   r*   r   g{Gz?gGz?)p)r0   r   r   ZrandnZbinomialchoicer   Zastypeboolnanr"   r   r3   r   )ZMultiOutputEstimatorZ	Estimatorr   r5   r6   maskpiper?   r?   r@   test_support_missing_values  s    
 
r   
order_typec                 C   s   dddgdddgddd	gg}ddgddgddgg}| dd
g}t t |d}||| ddd	gg}ddgg}t||| d S )NrL   rX   r*   rY   rC   rZ   rc   rd   re   r   r   )r   r   r3   r'   r4   )r   r5   r6   r   r   r9   r:   r?   r?   r@   !test_classifier_chain_tuple_order  s    
r   c               	   C   sv   dddgdddgddd	gg} ddgddgddgg}t ddg}tt |d
}tjtdd || | W 5 Q R X d S )NrL   rX   r*   rY   rC   rZ   rc   rd   re   r   zinvalid orderrM   )tupler   r   rO   rP   rQ   r3   )r5   r6   r   r   r?   r?   r@   )test_classifier_chain_tuple_invalid_order  s    r   c           	      C   sp   t dddddd\}}t||dd\}}}}d}tt ddd	gdd
d}||| t||  d sltd S )Nr   rC   r*   r   )r   r   r   Zn_labelsr-   r/   z\[Chain\].*\(1 of 3\) Processing order 0, total=.*\n\[Chain\].*\(2 of 3\) Processing order 1, total=.*\n\[Chain\].*\(3 of 3\) Processing order 2, total=.*\n$rL   rX   Tr   r-   verbose)	r   r   r   r$   r3   rerN   
readouterrrH   )	capsysr5   r6   r7   r9   r8   r:   pattern
classifierr?   r?   r@   test_classifier_chain_verbose  s$        
r  c           	      C   sl   t dddd\}}t||dd\}}}}d}tt dddgdd	d
}||| t||  d shtd S )N}   r*   r   )r   r,   r-   r/   z\[Chain\].*\(1 of 3\) Processing order 1, total=.*\n\[Chain\].*\(2 of 3\) Processing order 0, total=.*\n\[Chain\].*\(3 of 3\) Processing order 2, total=.*\n$rL   rX   Tr   )	r	   r   r!   r   r3   r   rN   r   rH   )	r   r5   r6   r7   r9   r8   r:   r   Z	regressorr?   r?   r@   test_regressor_chain_verbose  s    r  c                  C   sJ   t dd\} }tdtddfgt dd}t|d| |}||  d	S )
zkTest that MultiOutputRegressor checks the fitted estimator for
    predict. Non-regression test for #16549.T)Z
return_X_yZsgdrL   r/   rX   )Z
estimatorsZfinal_estimatorrz   )rw   N)r   r   r   r   r    r3   r4   )r5   r6   Zstackerregr?   r?   r@   4test_multioutputregressor_ducktypes_fitted_estimator   s    r  zCls, methodr3   rF   c              	   C   sJ   t dd\}}| t }tjtdd t||||dd W 5 Q R X dS )zgCheck that we raise an error when passing metadata not requested by the
    underlying classifier.
    r.   )r   zis only supported ifrM   rL   )testN)r   r   rO   rP   rQ   r   )ZClsmethodr5   r6   r   r?   r?   r@   test_fit_params_no_routing  s    
r	  c               	   C   s6   t t } d}tjt|d t| d W 5 Q R X d S )Nz:This 'MultiOutputRegressor' has no attribute 'partial_fit'rM   rF   )r    r   rO   rP   r{   r   )r   rR   r?   r?   r@   *test_multioutput_regressor_has_partial_fit  s    
r
  )r   numpyr0   rO   Zscipy.sparserV   rT   Zjoblibr   Zsklearnr   Zsklearn.baser   r   Zsklearn.datasetsr   r   r   r	   Zsklearn.dummyr
   r   Zsklearn.ensembler   r   r   Zsklearn.exceptionsr   Zsklearn.imputer   Zsklearn.linear_modelr   r   r   r   r   r   r   r   Zsklearn.metricsr   r   Zsklearn.model_selectionr   r   Zsklearn.multiclassr   Zsklearn.multioutputr   r   r    r!   Zsklearn.pipeliner"   Zsklearn.svmr#   Zsklearn.treer$   Zsklearn.utilsr%   Zsklearn.utils._testingr&   r'   r(   rA   rK   rS   rW   r^   rb   rj   Z	load_irisZirisdatar5   targetr   r   Zy3r   r6   r   r   r   r   r   uniquer   r   maprn   rs   rv   r~   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r  r  r  r	  r
  r?   r?   r?   r@   <module>   s   (
	

!/





 
