o
    tBhQd                  
   @   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 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%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l0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dlm7Z7 dd  Z8d!d" Z9d#d$ Z:d%d& Z;d'd( Z<d)d* Z=d+d, Z>e? Z@e@jAZBe@jCZDe-eDd-d.ZEe-eDd/d.ZFeGeDeEeFfZHeBjI\ZJZKeHjId- ZLeMeNeDZOePeQejNeDeEeFfZRd0d1 ZSd2d3 ZTd4d5 ZUd6d7 ZVd8d9 ZWd:d; ZXd<d= ZYd>d? ZZd@dA Z[dBdC Z\dDdE Z]e j^_dFdGdHgdIdJ Z`dKdL ZadMdN ZbdOdP ZcdQdR ZddSdT ZedUdV ZfdWdX ZgdYdZ Zhd[d\ Zie j^_d]ed/d^e'ed/d^e%ed/d^gd_d` ZjG dadb dbe1ZkG dcdd dde2Zle j^mdee j^_dfe'eldgdhen fe(ek ejodid djfgdkdl Zpdmdn Zqe j^_doe'efe(efgdpdq Zre j^_drePejsetgdsdt Zududv Zvdwdx ZwdS )y    N)	cpu_count)assert_almost_equal)assert_array_equal)assert_array_almost_equal)datasets)clone)make_classification)load_linnerud)GradientBoostingRegressorRandomForestClassifier)NotFittedError)Lasso)LogisticRegression)OrthogonalMatchingPursuit)Ridge)SGDClassifier)SGDRegressor)jaccard_scoremean_squared_error)OneVsRestClassifier)ClassifierChainRegressorChain)MultiOutputClassifier)MultiOutputRegressor)	LinearSVC)ClassifierMixin)shuffle)GridSearchCV)DummyRegressorDummyClassifier)make_pipeline)SimpleImputer)StackingRegressorc            
      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< q,ttdd}||| ||}	t	||	 d S N   r   	n_targetsrandom_state2   r'   )
r   make_regressionnp
zeros_likeranger
   fitpredictr   r   )
XyX_trainy_trainX_testy_test
referencesnrgry_pred r:   u/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/tests/test_multioutput.pytest_multi_target_regression$   s   


r<   c                  C   s6  t jddd\} }| d d |d d }}| dd  |dd  }}t|}d}tdD ]3}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rJ d S )	Nr$   r   r%   r(         r'   max_iterpartial_fit)r   r*   r+   r,   r-   r   rA   r/   r   r   hasattrr   )r0   r1   r2   r3   r4   r5   r6   
half_indexr7   sgrr9   r:   r:   r;   (test_multi_target_regression_partial_fit6   s    
  

rE   c                  C   sd   t jddd\} }ttdd}d}tjt|d || | W d    d S 1 s+w   Y  d S )N   r   r%   r)   zat least two dimensionsmatch)r   r*   r   r
   pytestraises
ValueErrorr.   )r0   r1   r8   msgr:   r:   r;   'test_multi_target_regression_one_targetM   s   "rM   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 ]+}tt	dd}tt	dd}|
|| |
||| t||||| q(d S r#   )r   r*   sp
csr_matrix
csc_matrix
coo_matrix
dok_matrix
lil_matrixr   r   r.   r   r/   )r0   r1   r2   r3   r4   sparser8   
rgr_sparser:   r:   r;   #test_multi_target_sparse_regressionV   s   rV   c                  C   s   g dg dg} ddgddgg}ddg}t t }d}tjt|d || || W d    n1 s4w   Y  t td	d
}|| || d S )NrF      r$      r>      T㥛 	@X9v@g?g333333?zdoes not support sample weightsrG   r   r)   )r   r   rI   rJ   rK   r.   r
   )r0   r1   wr8   rL   r:   r:   r;   $test_multi_target_sample_weights_apik   s   
r_   c                  C   s   g dg d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sJJ d S )
NrW   rY   r\   r]          @      ?r   r>   r?   )r   r   rA   r/   )r0   r1   r^   rgr_wr8   r:   r:   r;   +test_multi_target_sample_weight_partial_fitz   s   ,rc   c                  C   s   g dg dg} ddgddgg}ddg}t tdd}|| || g dg dg dg}ddgddgddgg}t tdd}||| g d	g d
g}t|||| d S )NrW   rY   r\   r]   r`   ra   r   r)   g      ?g      @      @re   g      @g      @)r   r
   r.   r   r/   )Xwywr^   rb   r0   r1   r8   r4   r:   r:   r;    test_multi_target_sample_weights   s   ri   rF   r)   rX   c                  C   sf   t dddd} t| dd}|ttt |jd }|tt |jd }t dkr/||us1J d S d S )Nlog_lossrF   r>   lossr'   r@   rZ   )n_jobsr   )r   r   rA   r0   r1   classesestimators_r   )sgd_linear_clfmorest1est2r:   r:   r;   8test_multi_output_classification_partial_fit_parallelism   s   


rt   c                  C   sb   t ddd} t| }|tt t|drJ t dddd} t| }|tt t|ds/J d S )NrF   r>   r?   predict_probarj   rk   )r   r   r.   r0   r1   rB   )rp   multi_target_linearr:   r:   r;   'test_hasattr_multi_output_predict_proba   s   rw   c                  C   s   t dddd} ddi}dd }t| ||d	d
}t|}|tt |t t ddd} t| }|tt d}tjt	|d |t W d    d S 1 sPw   Y  d S )NrF   r>   rj   )r'   r@   rl   rl   )hingelogmodified_huberc                 S   s   t | drdS dS )Nru   ra   g        )rB   )	estimatorr0   r1   r:   r:   r;   custom_scorer   s   
z6test_multi_output_predict_proba.<locals>.custom_scorerr$   )
param_gridscoringcvr?   z8probability estimates are not available for loss='hinge'rG   )
r   r   r   r.   r0   r1   ru   rI   rJ   AttributeError)rp   paramr|   grid_clfrv   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s0J |t|d  t|d   |t}tt	f|jksLJ t
dD ]F}t| } | jtd | td ||f t| d t| t|d d |f  | t|d  t|d |f  t| t|d d |f  qPd S )	Nrj   rF   r>   rk   r   rX   )rn   r$   )r   r   r0   shaperA   r1   rn   r/   	n_samples	n_outputsr-   r   r   )rp   rv   rC   first_predictionssecond_predictionsir:   r:   r;   ,test_multi_output_classification_partial_fit   s$    

 r   c                  C   sZ   t dddd} t| }d}tjt|d |tt W d    d S 1 s&w   Y  d S )Nrj   rF   r>   rk   z8classes must be passed on the first call to partial_fit.rG   )r   r   rI   rJ   rK   rA   r0   r1   )rp   rv   rL   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J |	t}t
|tks+J |D ]}ttf|jks8J q-ttjt|dd| tdD ]3}t| }|ttd d |f  t|tt|d d |f ksoJ tt|	tt||  qJd S )N
   rF   n_estimatorsr'   axisr$   )r   r   r.   r0   r1   r/   r   r   r   ru   len	n_classesr   r+   argmaxdstackr-   r   list)forestmulti_target_forestpredictionsru   class_probabilitiesr   forest_r:   r:   r;    test_multi_output_classification  s    

&r   c                  C   s   t dd} t| }t|}|tt |t}ttf|j	ks!J t
dD ]%}t|}|ttd d |f  t|tt|d d |f ksJJ q%d S )Nr   r)   r$   )r   r   r   r.   r0   r1   r/   r   r   r   r-   r   r   )svcmulti_class_svcmulti_target_svcr   r   multi_class_svc_r:   r:   r;   %test_multiclass_multioutput_estimator(  s   

(r   c            
   	   C   s   d} t j| }|jdd}t g ddd}t g d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 g dg dg dg dg dgg}tt|D ]}	t||	 ||	  qnd S )Ni  )r>   r>   )size)bar   r   r   r>   rF   )defr   r   r   	liblinear)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?)r+   randomRandomStatenormalarrayreshapeconcatenater   r   r.   ru   r-   r   r   )
seedrngr0   y1y2Yclfy_resulty_actualr   r:   r:   r;   3test_multiclass_multioutput_estimator_predict_proba:  s>   

	r   c            	      C   s   g dg dg} ddgddgg}t ddg}tddd	}t|}|| || g dg dg dg}ddgddgddgg}tddd	}t|}||| g d
g dg}t|||| d S )NrW   rY   r$   rX   r`   ra   r   rF   r   rd   rf   )r+   asarrayr   r   r.   r   r/   )	rg   rh   r^   r   clf_wr0   r1   r   r4   r:   r:   r;   /test_multi_output_classification_sample_weightsi  s   r   c            	      C   s   g dg dg dg} ddgddgddgg}t g d}tddd	}t|}|| || g dg dg dg dg}ddgddgddgddgg}tddd	}t|}||| g dg}t|||| d S )
NrW   rY   rd   r$   rX   )r`   ra   ra   rF      r?   )r+   r   r   r   r.   r   r/   )	rg   rh   r^   rp   r   r0   r1   r   r4   r:   r:   r;   ;test_multi_output_classification_partial_fit_sample_weights}  s   
r   c                  C   s   t tdd} tt | tt W d    n1 sw   Y  t	t
tf}| tt tt | t| W d    n1 sEw   Y  d}tjt|d | ttd d df  W d    d S 1 skw   Y  d S )Nr   r)   zUnknown label typerG   rF   )r   r   rI   rJ   r   scorer0   r1   r+   column_stackr   r   r.   rK   )mocy_newrL   r:   r:   r;   test_multi_output_exceptions  s   "r   response_methodru   r/   c                 C   sH   t t }tt t|| t W d   dS 1 sw   Y  dS )zECheck that we raise the proper error when the estimator is not fittedN)r   r   rI   rJ   r   getattrr0   )r   r   r:   r:   r;   "test_multi_output_not_fitted_error  s   
"r   c                  C   s   t t } t| dsJ | tt t| dsJ t t } t| dr%J d}tjt	|d | 
t W d   n1 s>w   Y  | tt t| drPJ tjt	|d | 
t W d   dS 1 shw   Y  dS )zVCheck the behavior for the delegation of predict_proba to the underlying
    estimatorru   z3'LinearSVC' object has no attribute 'predict_proba'rG   N)r   r   rB   r.   r0   r1   r   rI   rJ   r   ru   )r   rL   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   n_informativer'   c                 S   s(   g | ]}d d t |ddd D qS )c                 S   s   g | ]}t |qS r:   )int).0yyyr:   r:   r;   
<listcomp>      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   r+   r   )r0   r1   Y_multir:   r:   r;   -generate_multilabel_dataset_with_correlations  s
   

r   c                  C   sh   t  \} }tt }|| | || }|j|jksJ || }|dk}t|| t|dr2J d S )Nr   ru   )	r   r   r   r.   r/   r   decision_functionr   rB   )r0   r   classifier_chainY_pred
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   rN   rO   r   r   r.   r/   r   )r0   r   X_sparser   Y_pred_sparse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s]J d S )NiX  samplesaverage)r   r   r   r.   r/   r   r   )
r0   r   r2   r4   Y_trainY_testovr
Y_pred_ovrchainY_pred_chainr:   r:   r;   +test_classifier_chain_vs_independent_models  s   




r   c                  C   s   t  \} }tt tt g}|D ]1}|| | || }|j|jks&J dd |jD t	t
| jd | jd |jd  ksBJ q|d | }|dk}t|| t|d ts\J d S )Nc                 S   s   g | ]}|j jqS r:   )coef_r   )r   cr:   r:   r;   r     r   z3test_base_chain_fit_and_predict.<locals>.<listcomp>rF         ?)r   r   r   r   r   r.   r/   r   ro   r   r-   ru   r   
isinstancer   )r0   r   chainsr   r   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s/J qd S )Nr$   r   )
r   rN   rO   r   r   r   r   r.   r/   r   )r0   r   r   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sCJ t|jdksLJ tt|jdksWJ t|j|jD ]\}}t|j|j q^qd S )Nr   *   )orderr'   r   rZ   )r   r   r   r   r   r   
set_paramsr.   order_r   r   r   r-   r   setzipro   r   r   )r0   r   r   chain_randomchain_fixedrr   rs   r:   r:   r;   test_base_chain_random_order&  s   
r   c                  C   s   t  \} }tt tt fD ]K}|| | t|jdd}|| | || }|| }|j	|j	ks7J t
||kr@J t|trQt||dddksPJ qt||dk sZJ qd S )Nr$   r   r   r   g?g      ?)r   r   r   r   r   r.   r   r   r/   r   r+   allr   r   r   )r0   r   r   chain_cv	Y_pred_cvr   r:   r:   r;   (test_base_chain_crossval_fit_and_predict8  s   



r   r{   )r   c                 C   sR   |  tt t| jtsJ t| jtksJ tt	| jD ]	\}}t
|| qd S r   )r.   r0   r1   r   classes_r   r   r   r   rn   r   )r{   estimator_classesexpected_classesr:   r:   r;   test_multi_output_classes_L  s   r  c                          e Zd Zd fdd	Z  ZS )DummyRegressorWithFitParamsNc                       || _ t |||S r   _fit_paramssuperr.   selfr0   r1   sample_weight
fit_params	__class__r:   r;   r.   _     zDummyRegressorWithFitParams.fitr   __name__
__module____qualname__r.   __classcell__r:   r:   r  r;   r  ^      r  c                       r  )DummyClassifierWithFitParamsNc                    r  r   r  r  r  r:   r;   r.   e  r  z DummyClassifierWithFitParams.fitr   r  r:   r:   r  r;   r  d  r  r  z%ignore:`n_features_in_` is deprecatedzestimator, datasetprior)strategyr$   r%   c                 C   s@   |\}}t |}| j|||d | jD ]	}d|jv sJ qd S )N)
some_paramr  )r+   r,   r.   ro   r	  )r{   datasetr0   r1   r  dummy_estimatorr:   r:   r;   *test_multioutput_estimator_with_fit_paramsj  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i | |j
D ]	}|j|u s>J q5d 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i | d S )Nr  )sample_weight_r
  r.   )r  r0   r1   r  r  r:   r;   r.     s   
z4test_regressor_chain_w_fit_params.<locals>.MySGD.fitr  r:   r:   r  r;   MySGD  s    r   r  )r+   r   r   r   r*   randr   r   r   r.   ro   r  )r   r0   r1   weightr   model	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   rF   r   )r(   r$   r   g{Gz?gGz?)p)r+   r   r   randnbinomialchoicer   astypeboolnanr    r!   r.   r   )MultiOutputEstimator	Estimatorr   r0   r1   maskpiper:   r:   r;   test_support_missing_values  s   
 
r2  
order_typec                 C   sz   g dg dg dg}ddgddgddgg}| ddg}t t |d}||| g dg}ddgg}t||| d S )	NrW   rY   rd   r$   rX   rF   r   r   )r   r   r.   r   r/   )r3  r0   r1   r   r   r4   r5   r:   r:   r;   !test_classifier_chain_tuple_order  s   

r4  c                  C   s   g dg dg dg} ddgddgddgg}t ddg}tt |d}tjtdd	 || | W d    d S 1 s<w   Y  d S )
NrW   rY   rd   r$   rX   rF   r   zinvalid orderrG   )tupler   r   rI   rJ   rK   r.   )r0   r1   r   r   r:   r:   r;   )test_classifier_chain_tuple_invalid_order  s   "r6  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)
return_X_ysgdrF   r)   rX   )
estimatorsfinal_estimatorr   )r{   N)r	   r"   r   r   r   r.   r/   )r0   r1   stackerregr:   r:   r;   4test_multioutputregressor_ducktypes_fitted_estimator  s   r=  )xrI   numpyr+   scipy.sparserT   rN   joblibr   sklearn.utils._testingr   r   r   sklearnr   sklearn.baser   sklearn.datasetsr   r	   sklearn.ensembler
   r   sklearn.exceptionsr   sklearn.linear_modelr   r   r   r   r   r   sklearn.metricsr   r   sklearn.multiclassr   sklearn.multioutputr   r   r   r   sklearn.svmr   r   sklearn.utilsr   sklearn.model_selectionr   sklearn.dummyr   r   sklearn.pipeliner    sklearn.imputer!   r"   r<   rE   rM   rV   r_   rc   ri   	load_irisirisdatar0   targetr   r   y3r   r1   r   r   r   r   r   uniquer   r   maprn   rt   rw   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r  r  r  filterwarningsmake_multilabel_classificationr*   r  r&  r2  r   r5  r4  r6  r=  r:   r:   r:   r;   <module>   s    	

/





