o
    `^h\                     @   sr  d dl mZ d dlZd dl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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"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-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZAmBZB eC ZDejEFd ZGeGHeDjIjJZKeDjLeK eD_LeDjIeK eD_IdZMdd ZNdd ZOdd ZPdd ZQdd  ZRd!d" ZSejTUd#e=e< e; e> e? d$d% ZVd&d' ZWd(d) ZXd*d+ ZYd,d- ZZd.d/ Z[d0d1 Z\d2d3 Z]d4d5 Z^d6d7 Z_d8d9 Z`d:d; Zad<d= Zbd>d? Zcd@dA ZddBdC ZedDdE ZfdFdG ZgdHdI ZhdJdK ZidLdM ZjdNdO ZkdPdQ ZldRdS ZmdTdU ZndVdW ZodXdY ZpdZd[ ZqejTUd\e<d]d^ Zrd_d` Zsdadb ZtejTUdce#e"gddde ZuejTUdce#e"gdfdg ZvejTUdce#e"gdhdi ZwejTUdjejxejygdkdl Zzdmdn Z{dodp Z|dS )q    )escapeN)assert_allclose)datasetssvm)load_breast_cancer)NotFittedError)SimpleImputer)
ElasticNetLassoLinearRegressionLogisticRegression
PerceptronRidgeSGDClassifier)precision_scorerecall_score)GridSearchCVcross_val_score)OneVsOneClassifierOneVsRestClassifierOutputCodeClassifier)MultinomialNB)KNeighborsClassifier)Pipelinemake_pipeline)SVC	LinearSVC)DecisionTreeClassifierDecisionTreeRegressor)check_arrayshuffle)CheckingClassifier)assert_almost_equalassert_array_equal)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)check_classification_targetstype_of_target   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 r>   [/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/sklearn/tests/test_multiclass.pytest_ovr_exceptions8   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.   )r7   r8   r*   r3   r4   r6   r)   )r=   r;   r>   r>   r?   !test_check_classification_targetsL   s
   
"rC   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   r9   irisdatatargetr5   lenestimators_	n_classesr7   meanr   )r:   predclfpred2r>   r>   r?   test_ovr_fit_predictT   s   
$
rO   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   rD      r1   r0   r0   r0   r0   r1   r+   r+   r   r   r1   r+   r0   r1   r+   r0   F)max_itertolr    r-      partial_fit)r    rE   rF   rG   r   r   rV   r7   uniquer5   r9   r"   rH   rI   rK   absrandomrandnr   r   hasattr)r<   r=   r:   rL   ovr2rN   ovr1pred1r>   r>   r?   test_ovr_partial_fitd   s2   
$


$
 
r_   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 )
NrQ   r1   rR   rU      zAMini-batch contains \[.+\] while classes must be subset of \[.+\]r.   )r<   r=   )r   r   r7   rX   rY   rZ   rV   rW   r3   r4   r6   )r:   r<   r=   y1r;   r>   r>   r?   test_ovr_partial_fit_exceptions   s   
$"rc   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   r0   r1   ?r0   r1   )r   r   r9   rE   rF   rG   r5   rH   rI   rJ   r#   r7   rW   rK   r   )r:   rL   r>   r>   r?   test_ovr_ovo_regressor   s   

re   sparse_containerc              	   C   s  t dd}tjddddddd	d
\}}|d d |d d }}|dd  }t|||}||}t||| |}	|	|}
|jsGJ t|
sNJ t	|

 | |	|}|dk}t	||

  t }t||| |}	|	|d	kt}t	||	|
  d S )Nr0   alpharP      r`   r+   2   Tr   	n_samples
n_featuresrJ   n_labelslengthallow_unlabeledr-   P         ?)r   r   make_multilabel_classificationr   r9   r5   multilabel_spissparser#   toarraypredict_probar   r   decision_functionastypeint)rf   base_clfr<   YX_trainY_trainX_testrM   Y_predclf_sprsY_pred_sprsY_probarL   dec_predr>   r>   r?   test_ovr_fit_predict_sparse   s4   






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
   r1   r   r`   )r   r+   r0   r1   z,Label .+ is present in all training examplesr.   ra   z/Label not 1 is present in all training examples)r7   oneszerosr   r   r3   warnsUserWarningr9   r5   r#   r8   ry   rW   rx   shape)r<   r=   r:   r;   y_predr>   r>   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   r0   r   r0   r   r0   r   r   zham eggs spamr   r,   r   r      r   )r7   r8   setsplitr   r   r   r   r	   r   r9   classes_r5   r#   )r<   r=   r}   classesr|   rM   r   r>   r>   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   r0   r0   r   r0   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   ry   )r`   r1   r0   axisr   )r   r9   r   r   r5   r7   r8   r#   r[   ry   r   rx   rH   argmax)r|   test_predict_probarM   r   decr   probabilitiesr<   r}   r   r=   r>   r?   conduct_test  s   


"z%test_ovr_binary.<locals>.conduct_testr   r,   Tprobability)r   )F)r7   r8   Tr   r   r   r   r   r	   r   r   r   )r   r|   r>   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   r0   r0   r   )r0   r0   r0   )r0   r   r0   r   r   r,   rr   rg   )r   r   r   )r7   r8   r   r   r   r   r	   r
   r   r9   r5   r#   rt   )r<   r=   r|   rM   r   r>   r>   r?   test_ovr_multilabel:  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+   rd   )
r   r   r   r9   rE   rF   rG   rH   rI   score)r:   r>   r>   r?   test_ovr_fit_predict_svcM  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 )Nr0   rg   )TF)RQ?gQ?)r   r2   rP   ri   r`   r1   rj   r   rk   rq   micro)average)decimal)r   zipr   rs   r   r9   r5   rt   r"   r   r   )r|   auprecrecallr<   r}   r~   r   r   Y_testrM   r   r>   r>   r?   test_ovr_multilabel_datasetT  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 )Nr0   rg   )FTrP   ri   r`   r+   rj   r   rk   rq   rx   Fr   ry   r   T)
param_gridrr   )r   r   rs   r   r9   r   SVRr[   r   r   r5   rx   r#   )r|   r   r<   r}   r~   r   r   rM   decision_onlygsproba_after_fitr   r   rL   r>   r>   r?   !test_ovr_multilabel_predict_proban  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 )Nr0   rg   rq   rx   r         ?)r   rE   rF   rG   r   r9   r   r   r[   r5   rx   r"   sumr   any)r|   r<   r}   r~   r   r   rM   r   r   r   rL   r>   r>   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 )
NrP   ri   r`   r+   rj   Tr   rk   rq   )r   rs   r   r   r   r9   r#   ry   rz   r{   r5   r<   r}   r~   r   r   rM   r>   r>   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 )NrP   ri   r   )rl   rm   r-   rq   )
r   make_classificationr   r   r   r9   r#   ry   ravelr5   r   r>   r>   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,   )皙?rr   r2   estimator__C)
r   r   r   r9   rE   rF   rG   best_estimator_rI   C)r:   Cscvbest_Cr>   r>   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   r9   rE   rF   rG   r#   r5   )rM   ovr_piper:   r>   r>   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   r3   r4   r   r5   ovor>   r>   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 r>   )list).0ar>   r>   r?   
<listcomp>  s    z(test_ovo_fit_on_list.<locals>.<listcomp>)	r   r   r9   rE   rF   rG   r5   r   r#   )r   prediction_from_arrayiris_data_listprediction_from_listr>   r>   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,   r0   r1   )r   r   r9   rE   rF   rG   r5   rH   rI   rJ   r   r   r>   r>   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 )NrP   r0   r1   rD   <   rQ   )r0   r0   r1   r+   r+   r   r   r   r   r   r   r   r1   r1   rU   )r   r0   r1   r+   r   )r   r0   r1   r+   r   r`   r1   z6Mini-batch contains {0} while it must be subset of {1}r.   rV   )r   	load_irisrF   rG   r   r   rV   r7   rW   r5   r9   rH   rI   rJ   rK   r"   rY   randr   formatr3   r4   r6   r   r[   )tempr<   r=   ovo1r^   ovo2rN   r   rL   error_y
message_rer:   r>   r>   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,   r0   r   )rA   r   rB      )rE   rF   r   r   r   r9   rG   ry   rJ   r#   r   r5   r7   r   rangerI   roundr   issubsetrH   rW   )	rl   ovo_clf	decisionsvoteskijrL   	class_idxr>   r>   r?   test_ovo_decision_function2  s.   
&$r   c                  C   r   r   )
r   r   r   r9   rE   rF   rG   r   rI   r   )r   r   r   r   r>   r>   r?   test_ovo_gridsearcha  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 )Nr0   r1   r   ra   r1   r   r0   r1   Fr   r    rS   rT   r   r   )
r7   r8   r   r   r9   r5   ry   r   r#   r   )r<   r=   	multi_clfovo_predictionovo_decisionr   normalized_confidencesr>   r>   r?   test_ovo_tiesj  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 )Nr0   r1   r   ra   r   r+   Fr   r   r   )r7   r8   r   r   r   r9   r5   )r<   y_refr   r=   r  r  r>   r>   r?   test_ovo_ties2  s   "r  c                  C   sB   t d} t g d}tt }|| | t|||  d S )Nr   )r   bcd)r7   eyer8   r   r   r9   r#   r5   )r<   r=   r   r>   r>   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.   )	r7   r  r8   r   r   r3   r4   r6   r9   r<   r=   r   r;   r>   r>   r?   test_ovo_one_class  s   

"r  c                  C   f   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   zUnknown label typer.   )rE   rF   r   r   r3   r4   r6   r9   r  r>   r>   r?   test_ovo_float_y     
"r  c                  C   r   r   )r   r   r3   r4   r   r5   ecocr>   r>   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,   r1   )	code_sizer-   )r   r   r9   rE   rF   rG   r5   rH   rI   rJ   r   r  r>   r>   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   r9   rE   rF   rG   r   rI   r   )r  r   r   r   r>   r>   r?   test_ecoc_gridsearch  s   r  c                  C   r  r  )rE   rF   r   r   r3   r4   r6   r9   r  r>   r>   r?   test_ecoc_float_y  r  r  csc_containerc                 C   s   t jt j}}| |}ttdddd}t|dd}tjtdd |	|| W d    n1 s2w   Y  |	|| tjtdd |
| W d    n1 sTw   Y  ttdd}|	||
| t|jd	ksrJ d S )
NTF)	ensure_2daccept_sparse)check_Xcheck_X_paramsr   r,   zSparse data was passedr.   r   )rE   rF   rG   r!   r   r   r3   r4   	TypeErrorr9   r5   r   rH   rI   )r  r<   r=   X_spbase_estimatorr  r>   r>   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   r0   )r   r   rE   rF   rG   r   r7   dotr   r9   rH   rI   pairwise_indices_r   )clf_precomputedr<   r=   	ovr_falselinear_kerneln_estimatorsprecomputed_indicesidxr>   r>   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.
    ra   r   N)   r   linearr$  r   r+   )r/  r/  r#  r/  c   r0   r1   rP   )rE   rF   rG   r   r   r   r9   n_features_in_r   rI   r   
n_classes_rH   r   )
r<   r=   clf_notprecomputedovr_notprecomputedestovo_notprecomputedKr(  ovr_precomputedovo_precomputedr>   r>   r?   test_pairwise_n_features_in  sD   




r;  MultiClassClassifierc                 C   sH   t jdd}t  }| |}| jjrJ | |}| jjs"J d S )Nr#  r$  )r   r   __sklearn_tags__
input_tagspairwise)r<  r(  r4  r)  ovr_truer>   r>   r?   test_pairwise_tagF  s   rA  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$  r0  raise)error_score)
r   r   rE   rF   rG   r7   r&  r   r   r#   )
r<  r(  r4  r<   r=   multiclass_clf_notprecomputedmulticlass_clf_precomputedr*  score_not_precomputedscore_precomputedr>   r>   r?   test_pairwise_cross_val_scoreT  s   rH  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*   r0   r   r   rd   )pr,   )r7   rY   RandomStaterE   rF   rG   copychoicer   rz   boolnanr   r   r   r9   r   )r<  rngr<   r=   masklrr>   r>   r?   test_support_missing_valuesj  s   	
 
rS  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   r0   )dtyper   r1   r0   N)
r7   r   int32r   r   r9   rx   r   r   r   )rT  r<   r=   r:   r   expectedr>   r>   r?   test_constant_int_target}  s   


rX  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   r9   r#   r5   )r<   r=   rM   r   r>   r>   r?   )test_ovo_consistent_binary_classification  s   r^  c                  C   s   t  } ttddd}d}d}tjt|d}|| j| j	 W d   n1 s*w   Y  t
|jjts8J |t|jjv sBJ dS )a  Check that we raise the proper AttributeError when the final estimator
    does not implement the `partial_fit` method, which is decorated with
    `available_if`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28108
    rI  r,   )	estimatorz9This 'OneVsRestClassifier' has no attribute 'partial_fit'z:'LogisticRegression' object has no attribute 'partial_fit'r.   N)r   r   r   r   r3   r4   AttributeErrorrV   rF   rG   
isinstancevalue	__cause__str)rE   rM   	outer_msg	inner_msg	exec_infor>   r>   r?   )test_multiclass_estimator_attribute_error  s   rh  )}rer   numpyr7   r3   scipy.sparsesparseru   numpy.testingr   sklearnr   r   sklearn.datasetsr   sklearn.exceptionsr   sklearn.imputer   sklearn.linear_modelr	   r
   r   r   r   r   r   sklearn.metricsr   r   sklearn.model_selectionr   r   sklearn.multiclassr   r   r   sklearn.naive_bayesr   sklearn.neighborsr   sklearn.pipeliner   r   sklearn.svmr   r   sklearn.treer   r   sklearn.utilsr   r    sklearn.utils._mockingr!   sklearn.utils._testingr"   r#   sklearn.utils.fixesr$   r%   r&   r'   r(   sklearn.utils.multiclassr)   r*   r   rE   rY   rK  rP  permutationrG   sizepermrF   rJ   r@   rC   rO   r_   rc   re   markparametrizer   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;  rA  rH  rS  r   r   rX  r^  rh  r>   r>   r>   r?   <module>   s    $	$
)$(-	5/	
	
E



