o
    tBhf~                     @   sJ  d dl Zd dlm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mZ d dl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#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl6m:Z: d dl;m<Z< e:= Z>ej?@d ZAeABe>jCjDZEe>jFeE e>_Fe>jCeE e>_CdZGdd ZHdd ZIdd  ZJd!d" ZKd#d$ ZLd%d& ZMd'd( ZNd)d* ZOd+d, ZPd-d. ZQd/d0 ZRd1d2 ZSd3d4 ZTd5d6 ZUd7d8 ZVd9d: ZWd;d< ZXd=d> ZYd?d@ ZZdAdB Z[dCdD Z\dEdF Z]dGdH Z^dIdJ Z_dKdL Z`dMdN ZadOdP ZbdQdR ZcdSdT ZddUdV ZedWdX ZfdYdZ Zgd[d\ Zhd]d^ Zid_d` Zjdadb Zkdcdd Zlejmndeeegdfdg Zoejmndeeegdhdi Zpejmndeeegdjdk Zqejmndlejrejsgdmdn Ztdodp ZudS )q    N)assert_allclose)escape)assert_array_equal)assert_almost_equal)CheckingClassifier)OneVsRestClassifier)OneVsOneClassifier)OutputCodeClassifier)check_classification_targetstype_of_target)check_arrayshuffle)precision_score)recall_score)	LinearSVCSVC)MultinomialNB)LinearRegressionLasso
ElasticNetRidge
PerceptronLogisticRegressionSGDClassifier)DecisionTreeClassifierDecisionTreeRegressor)KNeighborsClassifier)GridSearchCVcross_val_score)Pipelinemake_pipeline)SimpleImputer)svm)NotFittedError)datasets)load_breast_cancer   c                  C   s$  t tdd} tt | g  W d    n1 sw   Y  d}tjt|d' tddgddgg}tddgddgg}t t	 
|| W d    n1 sTw   Y  tjt|d( tddgddgg}tdd	gd
dgg}t t	 
|| W d    d S 1 sw   Y  d S )Nr   random_statez@Multioutput target data is not supported with label binarizationmatch      r&   g      ?g333333@g@皙?)r   r   pytestraisesr#   predict
ValueErrornparrayr   fit)ovrmsgXy r9   t/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/tests/test_multiclass.pytest_ovr_exceptions4   s   "r;   c                  C   sR   t g d} t| }tjt|d t|  W d    d S 1 s"w   Y  d S )N)        g?       @g      @r)   )r2   r3   r   r.   r/   r1   r
   )r8   r6   r9   r9   r:   !test_check_classification_targetsH   s
   
"r>   c                  C   s   t tdd} | tjtjtj}t| jt	ksJ tdd}|tjtjtj}t
tj|kt
tj|kks?J t t } | tjtjtj}t
tj|kdks\J d S )Nr   r'   ?)r   r   r4   irisdatatargetr0   lenestimators_	n_classesr2   meanr   )r5   predclfpred2r9   r9   r:   test_ovr_fit_predictP   s   
$
rJ   c                  C   s  t tjtjdd\} }tt }|| d d |d d t| || dd  |dd   |	| }tt }|
| |	| }t|| t|jtt|ksVJ t||kdksaJ ttjdd} g d}ttdd d	dd
}|| d d |d d t| || dd  |dd   |	| }ttdd d	dd
}|
| |	| }t||kt||kksJ tt }t|drJ d S )Nr   r'   d   r?      r,   r+   r+   r+   r+   r,   r&   r&   r   r   r,   r&   r+   r,   r&   r+   F)max_itertolr   r(      partial_fit)r   r@   rA   rB   r   r   rQ   r2   uniquer0   r4   r   rC   rD   rF   absrandomrandnr   r   hasattr)r7   r8   r5   rG   ovr2rI   ovr1pred1r9   r9   r:   test_ovr_partial_fit`   s2   
$


$
 
rZ   c                  C   s   t t } ttjdd}g d}| |d d |d d t| dg|dd  }d}tj	t
|d | j|dd  |d	 W d    d S 1 sNw   Y  d S )
NrL   r,   rM   rP      zAMini-batch contains \[.+\] while classes must be subset of \[.+\]r)   )r7   r8   )r   r   r2   rS   rT   rU   rQ   rR   r.   r/   r1   )r5   r7   r8   y1r6   r9   r9   r:   test_ovr_partial_fit_exceptions   s   
$"r^   c                  C   s   t t } | tjtjtj}t| jt	ksJ t
t|g d t|tjkdks0J tt } | tjtjtj}t| jt	t	d  d ksPJ t
t|g d t|tjkdksfJ d S )N)r   r+   r,   ?r+   r,   )r   r   r4   r@   rA   rB   r0   rC   rD   rE   r   r2   rR   rF   r   )r5   rG   r9   r9   r:   test_ovr_ovo_regressor   s   

r`   c               
   C   s0  t jt jt jt jt jfD ]} tdd}tjddddddd	d
\}}|d d |d d }}|dd  }t	|
||}||}t	|
|| |}	|	|}
|jsUJ t |
s\J t|
 | |	|}|dk}t||
  t }t	|
|| |}	|	|d	kt}t||	|  qd S )Nr+   alpharK      r[   r&   2   Tr   	n_samples
n_featuresrE   n_labelslengthallow_unlabeledr(   P         ?)sp
csr_matrix
csc_matrix
coo_matrix
dok_matrix
lil_matrixr   r$   make_multilabel_classificationr   r4   r0   multilabel_issparser   toarraypredict_probar"   r   decision_functionastypeint)sparsebase_clfr7   YX_trainY_trainX_testrH   Y_predclf_sprsY_pred_sprsY_probarG   dec_predr9   r9   r:   test_ovr_fit_predict_sparse   sB   






r   c                  C   s  t d} d| d dd d f< t d}d|dd df< d|d d df< d|d d df< tt }d}tjt|d || | W d    n1 sKw   Y  |	| }t
t |t | || }t |d d d	d f dksvJ || }t
|d d d
f t | jd  t d}d|dd df< tt }d}tjt|d || | W d    n1 sw   Y  || }t
|d d d
f t | jd  d S )N
   r,   r   r[   )r   r&   r+   r,   z,Label .+ is present in all training examplesr)   r\   z/Label not 1 is present in all training examples)r2   oneszerosr   r   r.   warnsUserWarningr4   r0   r   r3   rx   rR   rw   shape)r7   r8   r5   r6   y_predr9   r9   r:   test_ovr_always_present   s4   




"
"


&r   c                  C   s  t g dg dg dg dg dg} g d}t g dg dg d	g dg d	g}td
 }t tddt t t fD ]?}t	|
| |}t|j|ksSJ |t g dgd }t|dg t	|
| |}|g dgd }t|g d q@d S )Nr   r   r[   r   r[   r   r&   r   r   r   r      r   r   r   )eggsspamhamr   r   )r   r   r+   r   r+   r   r+   r   r   zham eggs spamr   r'   r   r      r   )r2   r3   setsplitr   r   r   r   r   r   r4   classes_r0   r   )r7   r8   r}   classesr|   rH   r   r9   r9   r:   test_ovr_multiclass   s$   ((r   c                     s   t g dg dg dg dg dg g dt g dgjtd d fd
d	} tddt t t fD ]}| | q=t	 t
ddt fD ]}| |dd qNd S )Nr   r   r   r   r   )r   r   r   r   r   )r   r+   r+   r   r+   z	eggs spamFc                    s   t |  }t|jksJ |tg dgd }t|dg t| dr5|	 }|j
dks5J |r_tg dg}||}dt|d ksNJ |jtj|dd ||ks_J t |  }|g d	gd }|dkswJ d S )
Nr   r   r   rx   )r[   r,   r+   axisr   )r   r4   r   r   r0   r2   r3   r   rV   rx   r   rw   rC   argmax)r|   test_predict_probarH   r   decr   probabilitiesr7   r}   r   r8   r9   r:   conduct_test  s   


"z%test_ovr_binary.<locals>.conduct_testr   r'   Tprobability)r   )F)r2   r3   Tr   r   r   r   r   r   r   r   r   )r   r|   r9   r   r:   test_ovr_binary  s   (
r   c                  C   s   t g dg dg dg dg dg} t g dg dg dg d	g d
g}t tddt t t tddfD ] }t|	| |}|
g dgd }t|g d |jsZJ q:d S )N)r   r   r[   r   )r&   r&   r&   )r   r   r   r   )r   r+   r+   r   )r+   r+   r+   )r+   r   r+   r   r   r'   rl   ra   )r   r   r   )r2   r3   r   r   r   r   r   r   r   r4   r0   r   rt   )r7   r8   r|   rH   r   r9   r9   r:   test_ovr_multilabel9  s   ((r   c                  C   sJ   t t } | tjtj t| jdksJ | 	tjtjdks#J d S )Nr&   r_   )
r   r"   r   r4   r@   rA   rB   rC   rD   score)r5   r9   r9   r:   test_ovr_fit_predict_svcL  s   r   c               
   C   s   t dd} tdddD ]W\}}}tjdddd	d
|dd\}}|d d |d d }}|dd  |dd  }}	t| ||}
|
|}|
jsJJ tt	|	|dd|d	d tt
|	|dd|d	d qd S )Nr+   ra   )TF)RQ?gQ?)r   r-   rK   rc   r[   r,   rd   r   re   rk   micro)average)decimal)r   zipr$   rs   r   r4   r0   rt   r   r   r   )r|   auprecrecallr7   r}   r~   r   r   Y_testrH   r   r9   r9   r:   test_ovr_multilabel_datasetS  s.   

	

r   c               
   C   sB  t dd} dD ]}tjddddd|d	d
\}}|d d |d d }}|dd  }t| ||}tt ||}t|drCJ ttjdd}t|drRJ ||| t|dr_J t|dsfJ t	tjddddgid}	t|	}
t|
dr~J |
|| t|
dsJ |
|}||}|dk}t|| qd S )Nr+   ra   )FTrK   rc   r[   r&   rd   r   re   rk   rw   Fr   rx   r   T)
param_gridrl   )r   r$   rs   r   r4   r"   SVRrV   r   r   r0   rw   r   )r|   r   r7   r}   r~   r   r   rH   decision_onlygsproba_after_fitr   r   rG   r9   r9   r:   !test_ovr_multilabel_predict_probam  sB   

	

r   c                  C   s   t dd} tjtj}}|d d |d d }}|dd  }t| ||}tt ||}t|dr8J |	|}|
|}	t|	jddd |	jdd}
|
|  rYJ d S )Nr+   ra   rk   rw   r         ?)r   r@   rA   rB   r   r4   r"   r   rV   r0   rw   r   sumr   any)r|   r7   r}   r~   r   r   rH   r   r   r   rG   r9   r9   r:   #test_ovr_single_label_predict_proba  s   


r   c               	   C   sz   t jdddddddd\} }| d d	 |d d	 }}| d	d  }tt ||}t||dkt	|
| d S )
NrK   rc   r[   r&   rd   Tr   re   rk   )r$   rs   r   r"   r   r4   r   rx   ry   rz   r0   r7   r}   r~   r   r   rH   r9   r9   r:   %test_ovr_multilabel_decision_function  s   
	r   c                  C   sp   t jdddd\} }| d d |d d }}| dd  }tt ||}t|| dk|	| d S )NrK   rc   r   )rf   rg   r(   rk   )
r$   make_classificationr   r"   r   r4   r   rx   ravelr0   r   r9   r9   r:   'test_ovr_single_label_decision_function  s
   "r   c                  C   R   t tdd} g d}t| d|i}|tjtj |jjd j	}||v s'J d S Nr   r'   )皙?rl   r-   estimator__C)
r   r   r   r4   r@   rA   rB   best_estimator_rD   C)r5   Cscvbest_Cr9   r9   r:   test_ovr_gridsearch     r   c                  C   s`   t dt fg} t| }|tjtj tt }|tjtj t|tj|tj d S )Ntree)	r   r   r   r4   r@   rA   rB   r   r0   )rH   ovr_piper5   r9   r9   r:   test_ovr_pipeline  s   
r   c                  C   H   t tdd} tt | g  W d    d S 1 sw   Y  d S Nr   r'   )r   r   r.   r/   r#   r0   ovor9   r9   r:   test_ovo_exceptions     "r   c                  C   s\   t tdd} | tjtjtj}dd tjD }| |ttj|}t|| d S )Nr   r'   c                 S   s   g | ]}t |qS r9   )list).0ar9   r9   r:   
<listcomp>  s    z(test_ovo_fit_on_list.<locals>.<listcomp>)	r   r   r4   r@   rA   rB   r0   r   r   )r   prediction_from_arrayiris_data_listprediction_from_listr9   r9   r:   test_ovo_fit_on_list  s   r   c                  C   s   t tdd} | tjtjtj t| jt	t	d  d ks"J t t
 } | tjtjtj t| jt	t	d  d ksBJ d S )Nr   r'   r+   r,   )r   r   r4   r@   rA   rB   r0   rC   rD   rE   r   r   r9   r9   r:   test_ovo_fit_predict  s   
"r   c                  C   s  t  } | j| j}}tt }||d d |d d t| ||dd  |dd   |	|}tt }|
|| |	|}t|jttd  d ksTJ t||kdks_J t|| tt }||d d |d d t| ||dd  |dd   |	|}tt }|
||	|}t|| t|jtt|ksJ t||kdksJ tt }tjdd}g d}||d d |d d g d	 ||dd  |dd   |	|}tt }|
||	|}t|| tt }g d
}	tdt|	t|}
tjt|
d ||d d |	t| W d    n	1 s9w   Y  tt }t|drKJ d S )NrK   r+   r,   r?   <   rL   )r+   r+   r,   r&   r&   r   r   r   r   r   r   r   r,   r,   rP   )r   r+   r,   r&   r   )r   r+   r,   r&   r   r[   r,   z6Mini-batch contains {0} while it must be subset of {1}r)   rQ   )r$   	load_irisrA   rB   r   r   rQ   r2   rR   r0   r4   rC   rD   rE   rF   r   rT   randr   formatr.   r/   r1   r   rV   )tempr7   r8   ovo1rY   ovo2rI   r   rG   error_y
message_rer5   r9   r9   r:   test_ovo_partial_fit_predict  sT   
$




$



"




r   c            	      C   sz  t jjd } ttdd}|t jt jdk |t j}|j| fks%J |t jt j |t j}|j| tfks<J t	|j
dd|t j t| tf}d}ttD ]1}t|d tD ]'}|j| t j}||dk|f  d7  < ||dk|f  d7  < |d7 }q_qVt	|t| ttD ]&}t|d d |f tg dsJ tt|d d |f dksJ qd S )Nr   r'   r+   r   )r<   r   r=      )r@   rA   r   r   r   r4   rB   rx   rE   r   r   r0   r2   r   rangerD   roundr   issubsetrC   rR   )	rf   ovo_clf	decisionsvoteskijrG   	class_idxr9   r9   r:   test_ovo_decision_function1  s.   
&$r   c                  C   r   r   )
r   r   r   r4   r@   rA   rB   r   rD   r   )r   r   r   r   r9   r9   r:   test_ovo_gridsearch`  r   r   c                  C   s   t ddgddgddgddgg} t g d}ttddd d}|| || }|| }t |}|| }t|d	d d f d tt j	|dd  dd
|dd   |d	 |d	 	 ksaJ d S )Nr+   r,   r   r\   r,   r   r+   r,   Fr   r   rN   rO   r   r   )
r2   r3   r   r   r4   r0   rx   r   r   r   )r7   r8   	multi_clfovo_predictionovo_decisionr   normalized_confidencesr9   r9   r:   test_ovo_tiesi  s   "

$r  c                  C   s   t ddgddgddgddgg} t g d}tdD ]$}|| d }ttddd d	}|| || }|d
 |d ks@J qd S )Nr+   r,   r   r\   r   r&   Fr   r   r   )r2   r3   r   r   r   r4   r0   )r7   y_refr   r8   r  r  r9   r9   r:   test_ovo_ties2  s   "r  c                  C   sB   t d} t g d}tt }|| | t|||  d S )Nr   )r   bcd)r2   eyer3   r   r   r4   r   r0   )r7   r8   r   r9   r9   r:   test_ovo_string_y  s
   

r  c                  C   sh   t d} t dgd }tt }d}tjt|d || | W d    d S 1 s-w   Y  d S )Nr   r   zwhen only one classr)   )	r2   r  r3   r   r   r.   r/   r1   r4   r7   r8   r   r6   r9   r9   r:   test_ovo_one_class  s   

"r  c                  C   sf   t j} t jd d df }tt }d}tjt|d || | W d    d S 1 s,w   Y  d S )Nr   Unknown label typer)   )r@   rA   r   r   r.   r/   r1   r4   r  r9   r9   r:   test_ovo_float_y  s   
"r  c                  C   r   r   )r	   r   r.   r/   r#   r0   ecocr9   r9   r:   test_ecoc_exceptions  r   r  c                  C   s   t tddddd} | tjtjtj t| jt	d ks!J t t
 ddd} | tjtjtj t| jt	d ks@J d S )Nr   r'   r,   )	code_sizer(   )r	   r   r4   r@   rA   rB   r0   rC   rD   rE   r   r  r9   r9   r:   test_ecoc_fit_predict  s   r  c                  C   sV   t tdddd} g d}t| d|i}|tjtj |jjd j	}||v s)J d S r   )
r	   r   r   r4   r@   rA   rB   r   rD   r   )r  r   r   r   r9   r9   r:   test_ecoc_gridsearch  s   r  c                  C   s   t j} t jd d df }tt }d}tjt|d || | W d    n1 s+w   Y  tt dd}d}tjt|d || | W d    d S 1 sRw   Y  d S )Nr   r  r)   r\   )r  z*code_size should be greater than 0, got -1)r@   rA   r	   r   r.   r/   r1   r4   r  r9   r9   r:   test_ecoc_float_y  s   
"r  c                  C   s   t jt j} }t| }ttdddd}t|dd}tj	t
dd ||| W d    n1 s3w   Y  || | tj	t
dd || W d    n1 sUw   Y  ttdd}|||| t|jd	kssJ d S )
NTF)	ensure_2daccept_sparse)check_Xcheck_X_paramsr   r'   zA sparse matrix was passedr)   r   )r@   rA   rB   rm   ro   r   r   r	   r.   r/   	TypeErrorr4   r0   r   rC   rD   )r7   r8   X_spbase_estimatorr  r9   r9   r:   (test_ecoc_delegate_sparse_base_estimator  s"   
r  c                  C   s~   t jdd} tjtj}}t| }t||j}|	|| t
|j}|j}|D ]}|jd | |d  |jd ks<J q(d S )Nprecomputedkernelr   r+   )r"   r   r@   rA   rB   r   r2   dotr   r4   rC   rD   pairwise_indices_r   )clf_precomputedr7   r8   	ovr_falselinear_kerneln_estimatorsprecomputed_indicesidxr9   r9   r:   test_pairwise_indices  s   
&r+  c            
      C   s  t jt j} }|d dksJ | dd } |dd }| jdks"J tjdd| |}|jdks3J t|| |}|jdksBJ |j	D ]	}|jdksNJ qEt
|| |}|jdks^J |jdkseJ t|j	dksnJ |j	D ]	}|jdkszJ qq| | j }|jd	ksJ tjd
d||}|jdksJ t|||}|jdksJ |jdksJ t|j	dksJ |j	D ]	}|jdksJ qt
|||}	|	jdksJ |jdksJ t|j	dksJ |	j	d jdksJ |	j	d jdksJ |	j	d jdksJ dS )a  Check the n_features_in_ attributes of the meta and base estimators

    When the training data is a regular design matrix, everything is intuitive.
    However, when the training data is a precomputed kernel matrix, the
    multiclass strategy can resample the kernel matrix of the underlying base
    estimator both row-wise and column-wise and this has a non-trivial impact
    on the expected value for the n_features_in_ of both the meta and the base
    estimators.
    r\   r   N)   r   linearr!  r   r&   )r,  r,  r   r,  c   r+   r,   rK   )r@   rA   rB   r   r"   r   r4   n_features_in_r   rD   r   
n_classes_rC   r   )
r7   r8   clf_notprecomputedovr_notprecomputedestovo_notprecomputedKr%  ovr_precomputedovo_precomputedr9   r9   r:   test_pairwise_n_features_in  sD   




r8  MultiClassClassifierc                 C   sH   t jdd}t  }| |}| d rJ | |}| d s"J d S )Nr   r!  pairwise)r"   r   	_get_tags)r9  r%  r1  r&  ovr_truer9   r9   r:   test_pairwise_tagI  s   r=  c           
      C   sr   t jdd}t jdd}tjtj}}| |}| |}t||j}t|||dd}t|||dd}	t	|	| d S )Nr   r!  r-  raise)error_score)
r"   r   r@   rA   rB   r2   r#  r   r   r   )
r9  r%  r1  r7   r8   multiclass_clf_notprecomputedmulticlass_clf_precomputedr'  score_not_precomputedscore_precomputedr9   r9   r:   test_pairwise_cross_val_scoreW  s   rD  c                 C   s|   t jd}tjtj}}t |}|jddg|jddgd	t
}t j||< tt t|d}| ||||| d S )N*   r+   r   r   r_   )pr'   )r2   rT   RandomStater@   rA   rB   copychoicer   ry   boolnanr    r!   r   r4   r   )r9  rngr7   r8   masklrr9   r9   r:   test_support_missing_valuesm  s   	
 
rO  make_yc                 C   sj   t d}| dt jd}tt }||| ||}t |jd df}d|dddf< t	|| dS )zUCheck that constant y target does not raise.

    Non-regression test for #21869
    r   )r   r+   )dtyper   r,   r+   N)
r2   r   int32r   r   r4   rw   r   r   r   )rP  r7   r8   r5   r   expectedr9   r9   r:   test_constant_int_target  s   


rT  c                  C   sT   t dd\} }tddd}t|}|| | || | t|| ||  dS )z^Check that ovo is consistent with binary classifier.

    Non-regression test for #13617.
    T)
return_X_y   distance)n_neighborsweightsN)r%   r   r   r4   r   r0   )r7   r8   rH   r   r9   r9   r:   )test_ovo_consistent_binary_classification  s   rZ  )vnumpyr2   scipy.sparser{   rm   r.   numpy.testingr   rer   sklearn.utils._testingr   r   sklearn.utils._mockingr   sklearn.multiclassr   r   r	   sklearn.utils.multiclassr
   r   sklearn.utilsr   r   sklearn.metricsr   r   sklearn.svmr   r   sklearn.naive_bayesr   sklearn.linear_modelr   r   r   r   r   r   r   sklearn.treer   r   sklearn.neighborsr   sklearn.model_selectionr   r   sklearn.pipeliner   r    sklearn.imputer!   sklearnr"   sklearn.exceptionsr#   r$   sklearn.datasetsr%   r   r@   rT   rG  rL  permutationrB   sizepermrA   rE   r;   r>   rJ   rZ   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+  r8  markparametrizer=  rD  rO  r   r   rT  rZ  r9   r9   r9   r:   <module>   s    $	$0$(-	5/	
	E



