
    h$,fȂ                     b   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 dZCej                  j                  deC d      ZF ej                         ZHej                  j                  d       ZKeKj                  eHj                  j                        ZOeHj                  eO   eH_P        eHj                  eO   eH_M        dZQd ZRd ZSd ZTd ZUd ZVd ZWej                  j                  d e=e<z   e;z   e>z   e?z         d!        ZYd" ZZd# Z[d$ Z\d% Z]d& Z^d' Z_d( Z`d) Zad* Zbd+ Zcd, Zdd- Zed. Zfd/ Zgd0 Zhd1 Zid2 Zjd3 Zkd4 Zld5 Zmd6 Znd7 Zod8 Zpd9 Zqd: Zrd; Zsd< Ztej                  j                  d=e<      d>        Zud? Zvd@ Zwej                  j                  dAe#e"g      dB        Zxej                  j                  dAe#e"g      dC        Zyej                  j                  dAe#e"g      dD        Zzej                  j                  dEej                  ej                  g      dF        Z}dG Z~dH Zy)I    )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_targetz/The default value for `force_alpha` will changezignore:z:FutureWarning   c                     t        t        dd            } t        j                  t              5  | j                  g        d d d        d}t        j                  t        |      5  t        j                  ddgddgg      }t        j                  ddgddgg      }t        t                     j                  ||       d d d        t        j                  t        |      5  t        j                  ddgddgg      }t        j                  d	d
gddgg      }t        t                     j                  ||       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nautor   dual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ys       =lib/python3.12/site-packages/sklearn/tests/test_multiclass.pytest_ovr_exceptionsrC   ;   s0   
iV!D
EC 
~	& B MC	z	- 7HHq!fq!f%&HHq!fq!f%&MO,00A67
 
z	- 7HHq!fq!f%&HHsCj3*-.MO,00A67 7 
7 7
7 7s%   E'AE$AE EE E)c                      t        j                  g d      } t        |       }t        j                  t
        |      5  t        |        d d d        y # 1 sw Y   y xY w)N)        g?       @g      @r2   )r;   r<   r+   r7   r8   r:   r*   )rA   r?   s     rB   !test_check_classification_targetsrG   O   sF    
%&A

C	z	- ($Q'( ( (s   AAc                  b   t        t        dd            } | j                  t        j                  t        j
                        j                  t        j                        }t        | j                        t        k(  sJ t        dd      }|j                  t        j                  t        j
                        j                  t        j                        }t        j                  t        j
                  |k(        t        j                  t        j
                  |k(        k(  sJ t        t                     } | j                  t        j                  t        j
                        j                  t        j                        }t        j                  t        j
                  |k(        dkD  sJ y )Nr.   r   r/   ?)r   r   r=   irisdatatargetr9   lenestimators_	n_classesr;   meanr   )r>   predclfpred2s       rB   test_ovr_fit_predictrT   W   s   
iV!D
EC77499dkk*22499=Ds9,,,
a
0CGGDIIt{{+33DII>E774;;$&'2774;;%3G+HHHH mo
.C77499dkk*22499=D774;;$&'$...    c                     t        t        j                  t        j                  d      \  } }t	        t                     }|j                  | d d |d d t        j                  |             |j                  | dd  |dd         |j                  |       }t	        t                     }|j                  | |      j                  |       }t        ||       t        |j                        t        t        j                  |            k(  sJ t        j                  ||k(        dkD  sJ t        j                  t        j                   j#                  dd            } g d}t	        t%        dd d	d
            }|j                  | d d |d d t        j                  |             |j                  | dd  |dd         |j                  |       }t	        t%        dd d	d
            }|j                  | |      j                  |       }t        j                  ||k(        t        j                  ||k(        k(  sJ t	        t'                     }t)        |d      rJ y )Nr   r1   d   rI      r5   r4   r4   r4   r4   r5   r,   r,   r   r   r5   r,   r4   r5   r,   r4   F)max_itertolr!   r1      partial_fit)r!   rJ   rK   rL   r   r   r^   r;   uniquer9   r=   r#   rM   rN   rP   absrandomrandnr   r   hasattr)r@   rA   r>   rQ   ovr2rS   ovr1pred1s           rB   test_ovr_partial_fitrg   g   s   499dkk:DAq
mo
.COOAdsGQtWbiil3OOAcdGQstW%;;q>D}/DHHQN""1%Ee$s3ryy|#44447719$$$ 	ryyr1%&A2A
qdEJC OOAbqE1Ra5"))A,/OOAabE1QR5!;;q>DqdEJD HHQN""1%E77419!!4444 ce
$CsM****rU   c                     t        t                     } t        j                  t        j                  j                  dd            }g d}| j                  |d d |d d t        j                  |             dg|dd z   }d}t        j                  t        |      5  | j                  |dd  |	       d d d        y # 1 sw Y   y xY w)
NrY   r5   rZ   r]      zAMini-batch contains \[.+\] while classes must be subset of \[.+\]r2   )r@   rA   )r   r   r;   r`   ra   rb   r^   r_   r7   r8   r:   )r>   r@   rA   y1r?   s        rB   test_ovr_partial_fit_exceptionsrl      s    
mo
.C
ryyr1%&A2AOOAbqE1Ra5"))A,/ q2wB
NC	z	- '!AB%2&' ' 's   B==Cc                  >   t        t                     } | j                  t        j                  t        j
                        j                  t        j                        }t        | j                        t        k(  sJ t        t        j                  |      g d       t        j                  |t        j
                  k(        dkD  sJ t        t                     } | j                  t        j                  t        j
                        j                  t        j                        }t        | j                        t        t        dz
  z  dz  k(  sJ t        t        j                  |      g d       t        j                  |t        j
                  k(        dkD  sJ y )N)r   r4   r5   ?r4   r5   )r   r   r=   rJ   rK   rL   r9   rM   rN   rO   r$   r;   r_   rP   r   )r>   rQ   s     rB   test_ovr_ovo_regressorro      s    35
6C77499dkk*22499=Ds9,,,ryy	27744;;&'#---
24
5C77499dkk*22499=Ds9	A#>#BBBBryy	27744;;&'#---rU   sparse_containerc           	         t        d      }t        j                  ddddddd	
      \  }}|d d |d d }}|dd  }t        |      j	                  ||      }|j                  |      }t        |      j	                  | | |            }	|	j                  |      }
|j                  sJ t        j                  |
      sJ t        |
j                         |       |	j                  |      }|dkD  }t        ||
j                                t        j                         }t        |      j	                  | | |            }	|	j                  |      d	kD  j                  t               }t        ||	j                  |      j                                y )Nr4   alpharX      ri   r,   2   Tr   	n_samples
n_featuresrO   n_labelslengthallow_unlabeledr1   P         ?)r   r   make_multilabel_classificationr   r=   r9   multilabel_spissparser$   toarraypredict_probar   r   decision_functionastypeint)rp   base_clfr@   YX_trainY_trainX_testrR   Y_predclf_sprsY_pred_sprsY_probarQ   dec_preds                 rB   test_ovr_fit_predict_sparser      st   
 1%H22DAq "vq"vWGrsVF
h
'
+
+GW
=C[[ F"8,00:J7:STH""6*K???;;{###{**,f5 $$V,G S=Dt[0023 '')C"3'++G5Eg5NOH**62Q6>>sCHx!1!1&!9!A!A!CDrU   c                  <   t        j                  d      } d| d dd d f<   t        j                  d      }d|dd df<   d|d d df<   d|d d df<   t        t	                     }d}t        j                  t        |      5  |j                  | |       d d d        |j                  |       }t        t        j                  |      t        j                  |             |j                  |       }t        j                  |d d d	d f         dk(  sJ |j                  |       }t        |d d d
f   t        j                  | j                  d                t        j                  d      }d|dd df<   t        t	                     }d}t        j                  t        |      5  |j                  | |       d d d        |j                  |       }t        |d d d
f   t        j                  | j                  d                y # 1 sw Y   sxY w# 1 sw Y   [xY w)N
   r5   r   ri   )r   r,   r4   r5   z,Label .+ is present in all training examplesr2   rj   z/Label not 1 is present in all training examples)r;   oneszerosr   r   r7   warnsUserWarningr=   r9   r$   r<   r   r_   r   shape)r@   rA   r>   r?   y_preds        rB   test_ovr_always_presentr      s    	AAbqb!eH 	AAab!eHAadGAadG
02
3C
9C	k	- 1[[^Frxx'!5""1%F99VArsF^$)))q!Fvae}bggaggaj&9: 	AAab!eH
02
3C
<C	k	- 1q!Fvae}bhhqwwqz&:;%  s   H%HHHc                     t        j                  g dg dg dg dg dg      } g d}t        j                  g dg dg d	g dg d	g      }t        d
j                               }t	               t        dd      t               t               t               fD ]  }t        |      j                  | |      }t        |j                        |k(  sJ |j                  t        j                  g dg            d   }t        |dg       t        |      j                  | |      }|j                  g dg      d   }t        |g d        y )Nr   r   ri   r   ri   r   r,   r   r   r   r      r   r   r   )eggsspamhamr   r   )r   r   r4   r   r4   r   r4   r   r   zham eggs spamr.   r   r/   r   r      r   )r;   r<   setsplitr   r   r   r   r
   r   r=   classes_r9   r$   )r@   rA   r   classesr   rR   r   s          rB   test_ovr_multiclassr      s   
)Y	9iHIA.A
)Y	9iHIA/'')*G 	vA. . "(+//153<< G+++RXXyk23A66F8, "(+//15i[)!,69-.rU   c                     t        j                  g dg dg dg dg dg      g dt        j                  g dg      j                  t        dj	                               dfd		} t        d
d      t               t               t               fD ]
  } | |        t               t        d      t               fD ]  } | |d        y )Nr   r   r   r   r   )r   r   r   r   r   )r   r4   r4   r   r4   z	eggs spamc                    t        |       j                  
      }t        |j                        	k(  sJ |j	                  t        j                  g dg            d   }t        |dg       t        | d      r"|j                        }|j                  dk(  sJ |rtt        j                  g dg      }|j                  |      }dt        |d         k(  sJ |j                  t        j                  |d         |j	                  |      k(  sJ t        |       j                        }|j	                  g d	g      d   }|dk(  sJ y )
Nr   r   r   r   )ri   r5   r4   axisr   )r   r=   r   r   r9   r;   r<   r$   rc   r   r   r   rM   argmax)r   test_predict_probarR   r   decr   probabilitiesr@   r   r   rA   s          rB   conduct_testz%test_ovr_binary.<locals>.conduct_test  s)   !(+//153<< G+++RXXyk23A66F8,801''*C99$$$XXyk*F--f5MM!,----<<		-a @AS[[QWEXXXX "(+//15i[)!,{{rU   r.   r   r/   Tprobability)r   )F)r;   r<   Tr   r   r   r   r   r
   r   r   r   )r   r   r@   r   r   rA   s     @@@@rB   test_ovr_binaryr     s    
)Y	9iHIA0A
/"#%%A+##%&G * 	vA.	  	X #_cd&;=O=QR 8X$78rU   c                     t        j                  g dg dg dg dg dg      } t        j                  g dg dg dg d	g d
g      }t               t        dd      t	               t               t               t        d      fD ]P  }t        |      j                  | |      }|j                  g dg      d   }t        |g d       |j                  rPJ  y )N)r   r   ri   r   )r,   r,   r,   )r   r   r   r   )r   r4   r4   r   )r4   r4   r4   )r4   r   r4   r   r.   r   r/   r}   rr   )r   r   r   )r;   r<   r   r   r   r   r
   r   r   r=   r9   r$   r   )r@   rA   r   rR   r   s        rB   test_ovr_multilabelr   =  s    
)Y	9iHIA
)Y	9iHIA 	vA.C  "(+//15i[)!,69-rU   c                  4   t        t        j                               } | j                  t        j
                  t        j                         t        | j                        dk(  sJ | j                  t        j
                  t        j                        dkD  sJ y )Nr,   rn   )
r   r   r   r=   rJ   rK   rL   rM   rN   score)r>   s    rB   test_ovr_fit_predict_svcr   P  s`    
cggi
(CGGDIIt{{#s1$$$99TYY,s222rU   c            
         t        d      } t        ddd      D ]  \  }}}t        j                  dddd	d
|d      \  }}|d d |d d }}|dd  |dd  }	}t	        |       j                  ||      }
|
j                  |      }|
j                  sJ t        t        |	|d      |d	       t        t        |	|d      |d	        y )Nr4   rr   )TF)RQ?gQ?)r   r6   rX   rt   ri   r5   ru   r   rv   r|   micro)average)decimal)r   zipr   r~   r   r=   r9   r   r#   r   r   )r   auprecrecallr@   r   r   r   r   Y_testrR   r   s               rB   test_ovr_multilabel_datasetr   W  s    1%H|\J 
D&66
1 Sb61Sb62323!(+//AV$FFG<dA	
 	961	
'
rU   c            
         t        d      } dD ]r  }t        j                  ddddd|d	
      \  }}|d d |d d }}|dd  }t        |       j	                  ||      }t        t        j                               j	                  ||      }t        |d      rJ t        t        j                  d            }t        |d      rJ |j	                  ||       t        |d      rJ t        |d      sJ t        t        j                  d      ddgi      }	t        |	      }
t        |
d      rJ |
j	                  ||       t        |
d      sJ |j                  |      }|j                  |      }|dkD  }t        ||       u y )Nr4   rr   )FTrX   rt   ri   r,   ru   r   rv   r|   r   Fr   r   r   T)
param_gridr}   )r   r   r~   r   r=   r   SVRrc   r   r   r9   r   r$   )r   r   r@   r   r   r   r   rR   decision_onlygsproba_after_fitr   r   rQ   s                 rB   !test_ovr_multilabel_predict_probar   q  s   1%H ()66
1 Sb61Sb623!(+//A ,CGGI6::7GL=/::: ,CGG,FG=/:::'7+=/:::}&9::: GG&MD63J
 .b1?O<<<GW-888V$##F+ }4(Q()rU   c                     t        d      } t        j                  t        j                  }}|d d |d d }}|dd  }t	        |       j                  ||      }t	        t        j                               j                  ||      }t        |d      rJ |j                  |      }|j                  |      }	t        |	j                  d      d       |	j                  d      }
|
|z
  j                         rJ y )Nr4   rr   r|   r   r         ?)r   rJ   rK   rL   r   r=   r   r   rc   r9   r   r#   sumr   any)r   r@   r   r   r   r   rR   r   r   r   rQ   s              rB   #test_ovr_single_label_predict_probar     s    1%H99dkkqA"vq"vWGrsVF
h
'
+
+GW
=C (	266wHM}o666[[ F'G+S1 >>q>!Dv""$$$$rU   c            	      :   t        j                  ddddddd      \  } }| d d	 |d d	 }}| d	d  }t        t        j                               j                  ||      }t        |j                  |      dkD  j                  t              |j                  |             y )
NrX   rt   ri   r,   ru   Tr   rv   r|   )r   r~   r   r   r   r=   r$   r   r   r   r9   r@   r   r   r   r   rR   s         rB   %test_ovr_multilabel_decision_functionr     s    22DAq "vq"vWGrsVF
cggi
(
,
,Wg
>C			v	&	*2237V9LrU   c                  (   t        j                  ddd      \  } }| d d |d d }}| dd  }t        t        j                               j                  ||      }t        |j                  |      j                         dkD  |j                  |             y )NrX   rt   r   )rw   rx   r1   r|   )
r   make_classificationr   r   r   r=   r$   r   ravelr9   r   s         rB   'test_ovr_single_label_decision_functionr     s    ''#"STUDAq"vq"vWGrsVF
cggi
(
,
,Wg
>Cs,,V4::<q@#++fBUVrU   c                     t        t        dd            } g d}t        | d|i      }|j                  t        j
                  t        j                         |j                  j                  d   j                  }||v sJ y Nr.   r   r/   皙?r}   r6   estimator__C)
r   r   r   r=   rJ   rK   rL   best_estimator_rN   C)r>   Cscvbest_Cs       rB   test_ovr_gridsearchr     sg    
iV!D
EC	B	cNB/	0BFF499dkk"++A.00FR<<rU   c                     t        dt               fg      } t        |       }|j                  t        j
                  t        j                         t        t                     }|j                  t        j
                  t        j                         t        |j                  t        j
                        |j                  t        j
                               y )Ntree)	r   r   r   r=   rJ   rK   rL   r$   r9   )rR   ovr_piper>   s      rB   test_ovr_pipeliner     s     V3567
8C"3'HLLDKK(
46
7CGGDIIt{{#s{{499-x/?/?		/JKrU   c                      t        t        dd            } t        j                  t              5  | j                  g        d d d        y # 1 sw Y   y xY wNr.   r   r/   )r   r   r7   r8   r   r9   ovos    rB   test_ovo_exceptionsr     s?    
YFC
DC	~	& B     AAc                     t        t        dd            } | j                  t        j                  t        j
                        j                  t        j                        }t        j                  D cg c]  }t        |       }}| j                  |t        t        j
                              j                  |      }t        ||       y c c}w r   )	r   r   r=   rJ   rK   rL   r9   listr$   )r   prediction_from_arrayairis_data_listprediction_from_lists        rB   test_ovo_fit_on_listr     s     YFC
DCGGDIIt{{;CCDIIN'+yy1!d1g1N177>43DEMM ,.BC	 2s   4Cc                  .   t        t        dd            } | j                  t        j                  t        j
                        j                  t        j                         t        | j                        t        t        dz
  z  dz  k(  sJ t        t                     } | j                  t        j                  t        j
                        j                  t        j                         t        | j                        t        t        dz
  z  dz  k(  sJ y )Nr.   r   r/   r4   r5   )r   r   r=   rJ   rK   rL   r9   rM   rN   rO   r   r   s    rB   test_ovo_fit_predictr     s    
YFC
DCGGDIIt{{#++DII6s9	A#>#BBBB ]_
-CGGDIIt{{#++DII6s9	A#>#BBBBrU   c                  P   t        j                         } | j                  | j                  }}t	        t                     }|j                  |d d |d d t        j                  |             |j                  |dd  |dd         |j                  |      }t	        t                     }|j                  ||       |j                  |      }t        |j                        t        t        dz
  z  dz  k(  sJ t        j                  ||k(        dkD  sJ t        ||       t	        t                     }|j                  |d d |d d t        j                  |             |j                  |dd  |dd         |j                  |      }t	        t                     }|j                  ||      j                  |      }t        ||       t        |j                        t        t        j                  |            k(  sJ t        j                  ||k(        dkD  sJ t	        t                     }t        j                   j#                  dd      }g d}|j                  |d d |d d g d	       |j                  |dd  |dd         |j                  |      }t	        t                     }|j                  ||      j                  |      }t        ||       t	        t                     }g d
}	t%        dj'                  t        j                  |	      t        j                  |                  }
t)        j*                  t,        |
      5  |j                  |d d |	t        j                  |             d d d        t	        t/                     }t1        |d      rJ y # 1 sw Y   +xY w)NrX   r4   r5   rI   <   rY   )r4   r4   r5   r,   r,   r   r   r   r   r   r   r   r5   r5   r]   )r   r4   r5   r,   r   )r   r4   r5   r,   r   ri   r5   z6Mini-batch contains {0} while it must be subset of {1}r2   r^   )r   	load_irisrK   rL   r   r   r^   r;   r_   r9   r=   rM   rN   rO   rP   r#   ra   randr   formatr7   r8   r:   r   rc   )tempr@   rA   ovo1rf   ovo2rS   r   rQ   error_y
message_rer>   s               rB   test_ovo_partial_fit_predictr     s   D99dkkqAmo.DQtWagryy|4QstWag&LLOEmo.DHHQNLLOEt IQ$?!$CCCC771:%%%u% mo.DQsVQsVRYYq\2QrsVQrsV$LLOEmo.DHHQN""1%Eu%t C		!$5555771:%%%
]_
-C
		r1A2AOOAbqE1Ra5/2OOAabE1QR5!;;q>Dmo.DHHQN""1%Ee$ ]_
-C#G@GGIIg		!	
J
 
z	4 6"1w		!56 SU
#CsM****6 6s   *NN%c                     t         j                  j                  d   } t        t	        dd            }|j                  t         j                  t         j                  dk(         |j                  t         j                        }|j                  | fk(  sJ |j                  t         j                  t         j                         |j                  t         j                        }|j                  | t        fk(  sJ t        |j                  d      |j                  t         j                               t        j                  | t        f      }d}t        t              D ]o  }t        |dz   t              D ]W  }|j                  |   j                  t         j                        }||dk(  |fxx   dz  cc<   ||dk(  |fxx   dz  cc<   |dz  }Y q t        |t        j                   |             t        t              D ]Z  }t#        |d d |f         j%                  t#        g d            sJ t'        t        j(                  |d d |f               dkD  rZJ  y )Nr   r.   r/   r4   r   )rE   r   rF      )rJ   rK   r   r   r   r=   rL   r   rO   r$   r   r9   r;   r   rangerN   roundr   issubsetrM   r_   )	rw   ovo_clf	decisionsvoteskijrQ   	class_idxs	            rB   test_ovo_decision_functionr  5  s   		"I Q!GHGKK		4;;!+,))$))4I??yl*** KK		4;;'))$))4I??y)4444y''Q'/1KL HHi+,E	A9 q1ui( 	A&&q)11$))<D$!)Q,1$$!)Q,1$FA		 ubhhy129% =	 5I&'00_1EFFF 299Yq)|456<<<=rU   c                     t        t        dd            } g d}t        | d|i      }|j                  t        j
                  t        j                         |j                  j                  d   j                  }||v sJ y r   )
r   r   r   r=   rJ   rK   rL   r   rN   r   )r   r   r   r   s       rB   test_ovo_gridsearchr  d  sg    
YFC
DC	B	cNB/	0BFF499dkk"++A.00FR<<rU   c                     t        j                  ddgddgddgddgg      } t        j                  g d      }t        t        ddd             }|j	                  | |      j                  |       }|j                  |       }t        j                  |      }||z
  }t        |d	d d f   d       t        t        j                  |dd  d
      |dd         |d	   |d	   j                         k(  sJ y )Nr4   r5   r   rj   r5   r   r4   r5   Fr   r!   r[   r\   r   r   )
r;   r<   r   r   r=   r9   r   r  r$   r   )r@   rA   	multi_clfovo_predictionovo_decisionr  normalized_confidencess          rB   test_ovo_tiesr  m  s     	1a&1a&2q'B845A
A":eaT#RSI]]1a(003N..q1L HH\"E)E1 uQT{A&ryyqr3^AB5GH! 6q 9 @ @ BBBBrU   c                  .   t        j                  ddgddgddgddgg      } t        j                  g d      }t        d      D ]O  }||z   dz  }t        t	        ddd 	            }|j                  | |      j                  |       }|d
   |dz  k(  rOJ  y )Nr4   r5   r   rj   r  r,   Fr   r  r   )r;   r<   r  r   r   r=   r9   )r@   y_refr  rA   r  r  s         rB   test_ovo_ties2r"    s    
1a&1a&2q'B845AHH\"E 1X *QY!O&z%!QU'VW	"q!,44Q7a AE)))	*rU   c                      t        j                  d      } t        j                  g d      }t        t	        d            }|j                  | |       t        ||j                  |              y )Nr   )r   bcdr.   r0   )r;   eyer<   r   r   r=   r$   r9   )r@   rA   r   s      rB   test_ovo_string_yr)    sL    
q	A
%&A
YF3
4CGGAqMq#++a.)rU   c                     t        j                  d      } t        j                  dgdz        }t        t	        d            }d}t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nr   r   r.   r'  zwhen only one classr2   )	r;   r(  r<   r   r   r7   r8   r:   r=   r@   rA   r   r?   s       rB   test_ovo_one_classr,    sg    
q	A
#A
YF3
4C
C	z	- 1  s   !A==Bc                     t         j                  } t         j                  d d df   }t        t        d            }d}t	        j
                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY wNr   r.   r'  zUnknown label typer2   )rJ   rK   r   r   r7   r8   r:   r=   r+  s       rB   test_ovo_float_yr/    s`    		A		!Q$A
YF3
4C
C	z	- 1     A66A?c                      t        t        dd            } t        j                  t              5  | j                  g        d d d        y # 1 sw Y   y xY wr   )r   r   r7   r8   r   r9   ecocs    rB   test_ecoc_exceptionsr4    s@    	vA FGD	~	& R  r   c                     t        t        dd      dd      } | j                  t        j                  t        j
                        j                  t        j                         t        | j                        t        dz  k(  sJ t        t               dd      } | j                  t        j                  t        j
                        j                  t        j                         t        | j                        t        dz  k(  sJ y )Nr.   r   r/   r5   )	code_sizer1   )r   r   r=   rJ   rK   rL   r9   rM   rN   rO   r   r2  s    rB   test_ecoc_fit_predictr7    s    vA.!!D 	HHTYY$,,TYY7t IM111  11MDHHTYY$,,TYY7t IM111rU   c                     t        t        dd      d      } g d}t        | d|i      }|j                  t        j
                  t        j                         |j                  j                  d   j                  }||v sJ y )Nr.   r   r/   rW   r   r   )
r   r   r   r=   rJ   rK   rL   r   rN   r   )r3  r   r   r   s       rB   test_ecoc_gridsearchr9    sj    	vA FUVWD	B	d^R0	1BFF499dkk"++A.00FR<<rU   c                     t         j                  } t         j                  d d df   }t        t        d            }d}t	        j
                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY wr.  )rJ   rK   r   r   r7   r8   r:   r=   r+  s       rB   test_ecoc_float_yr;    s`    		A		!Q$A
yf5
6C
C	z	- 1  r0  csc_containerc                 b   t         j                  t         j                  }} | |      }t        t        ddd      }t        |d      }t        j                  t        d      5  |j                  ||       d d d        |j                  ||       t        j                  t        d      5  |j                  |       d d d        t        t        d	d
            }|j                  ||      j                  |       t        |j                        dk(  sJ y # 1 sw Y   xY w# 1 sw Y   gxY w)NTF)	ensure_2daccept_sparse)check_Xcheck_X_paramsr   rW   zSparse data was passedr2   r.   r/   r   )rJ   rK   rL   r"   r    r   r7   r8   	TypeErrorr=   r9   r   rM   rN   )r<  r@   rA   X_spbase_estimatorr3  s         rB   (test_ecoc_delegate_sparse_base_estimatorrE    s     99dkkqAD (%)EBN  Q?D	y(@	A q 	HHQN	y(@	A T  	vA FGDHHT1d#t A%%%  s   %D-D%D"%D.c                     t        j                  d      } t        j                  t        j                  }}t        |       }t        j                  ||j                        }|j                  ||       t        |j                        }|j                  }|D ],  }|j                  d   |z  |dz
  z  |j                  d   k(  r,J  y )Nprecomputedkernelr   r4   )r   r   rJ   rK   rL   r   r;   dotr   r=   rM   rN   pairwise_indices_r   )clf_precomputedr@   rA   	ovr_falselinear_kerneln_estimatorsprecomputed_indicesidxs           rB   test_pairwise_indicesrR    s    gg]3O99dkkqA"?3IFF1accNMMM-#y,,-L#55" 
IIaL<'<!+;<@S@STU@VV	
V
rU   c                     t         j                  t         j                  }} |d   dk(  sJ | dd } |dd }| j                  dk(  sJ t	        j
                  d      j                  | |      }|j                  dk(  sJ t        |      j                  | |      }|j                  dk(  sJ |j                  D ]  }|j                  dk(  rJ  t        |      j                  | |      }|j                  dk(  sJ |j                  dk(  sJ t        |j                        dk(  sJ |j                  D ]  }|j                  dk(  rJ  | | j                  z  }|j                  d	k(  sJ t	        j
                  d
      j                  ||      }|j                  dk(  sJ t        |      j                  ||      }|j                  dk(  sJ |j                  dk(  sJ t        |j                        dk(  sJ |j                  D ]  }|j                  dk(  rJ  t        |      j                  ||      }	|	j                  dk(  sJ |j                  dk(  sJ t        |j                        dk(  sJ |	j                  d   j                  dk(  sJ |	j                  d   j                  dk(  sJ |	j                  d   j                  dk(  sJ y)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.
    rj   r   N)   r   linearrH  r   r,   )rT  rT  rG  rT  c   r4   r5   rX   )rJ   rK   rL   r   r   r   r=   n_features_in_r   rN   r   
n_classes_rM   r   )
r@   rA   clf_notprecomputedovr_notprecomputedestovo_notprecomputedKrL  ovr_precomputedovo_precomputeds
             rB   test_pairwise_n_features_inr`    s    99dkkqA R5A::	#2A	#2A 77h155a;,,111,-?@DDQJ,,111!-- '!!Q&&&' ,,>?CCAqI,,111((A---!--.!333!-- '!!Q&&&'
 	
ACCA77j   gg]3771=O))S000)/:>>q!DO))S000%%*****+q000** )!!S((() )9==aCO))S000%%*****+q000&&q)88B>>>&&q)88B>>>&&q)88C???rU   MultiClassClassifierc                     t        j                  d      }t        j                         } | |      }|j                         d   rJ  | |      }|j                         d   sJ y )NrG  rH  pairwise)r   r   	_get_tags)ra  rL  rY  rM  ovr_trues        rB   test_pairwise_tagrf  K  sa     gg]3O$%78I""$Z000#O4H
+++rU   c                 P   t        j                  d      }t        j                  d      }t        j                  t        j                  }} | |      } | |      }t        j                  ||j                        }t        |||d      }t        |||d      }	t        |	|       y )NrG  rH  rU  raise)error_score)
r   r   rJ   rK   rL   r;   rJ  r   r   r$   )
ra  rL  rY  r@   rA   multiclass_clf_notprecomputedmulticlass_clf_precomputedrN  score_not_precomputedscore_precomputeds
             rB   test_pairwise_cross_val_scorern  Y  s     gg]3O199dkkqA$89K$L!!5o!FFF1accNM+%q! ("M1' (*?@rU   c                    t         j                  j                  d      }t        j                  t        j
                  }}t        j                  |      }|j                  ddg|j                  ddg      j                  t              }t         j                  ||<   t        t               t        |            } | |      j                  ||      j!                  ||       y )N*   r4   r   r   rn   )prW   )r;   ra   RandomStaterJ   rK   rL   copychoicer   r   boolnanr   r	   r   r=   r   )ra  rngr@   rA   masklrs         rB   test_support_missing_valuesrz  o  s     ))


#C99dkkqA

A::q!fagg#s:4;;DADffAdG	}(:(L	MB  A&,,Q2rU   make_yc                 <   t        j                  d      } | dt         j                        }t        t	                     }|j                  ||       |j                  |      }t        j                  |j                  d   df      }d|dddf<   t        ||       y)zUCheck that constant y target does not raise.

    Non-regression test for #21869
    r   )r   r4   )dtyper   r5   r4   N)
r;   r   int32r   r   r=   r   r   r   r   )r{  r@   rA   r>   r   expecteds         rB   test_constant_int_targetr    s~     	Awbhh'A
02
3CGGAqMq!FxxQ(HHQTNFH%rU   c                      t        d      \  } }t        dd      }t        |      }|j                  | |       |j                  | |       t	        |j                  |       |j                  |              y)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   r=   r$   r9   )r@   rA   rR   r   s       rB   )test_ovo_consistent_binary_classificationr    s\    
 .DAq
1j
AC
S
!CGGAqMGGAqMs{{1~s{{1~6rU   c                     t        j                         } t        t        d            }d}d}t	        j
                  t        |      5 }|j                  | j                  | j                         ddd       t        j                  j                  t              sJ |t        |j                  j                        v sJ y# 1 sw Y   SxY w)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
    rp  rW   )	estimatorz9This 'OneVsRestClassifier' has no attribute 'partial_fit'z:'LogisticRegression' object has no attribute 'partial_fit'r2   N)r   r   r   r   r7   r8   AttributeErrorr^   rK   rL   
isinstancevalue	__cause__str)rJ   rR   	outer_msg	inner_msg	exec_infos        rB   )test_multiclass_estimator_attribute_errorr    s     D (:(K
LCKILI	~Y	7 09		4;;/0ioo//@@@IOO5566660 0s   
'CC)rer   numpyr;   r7   scipy.sparsesparser   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?   markfilterwarnings
pytestmarkr   rJ   ra   rr  rw  permutationrL   sizepermrK   rO   rC   rG   rT   rg   rl   ro   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r)  r,  r/  r4  r7  r9  r;  rE  rR  r`  rf  rn  rz  r   r   r  r  r   rU   rB   <module>r     s       ) ! / - (   : A 
 . 2 4 & F 6 J  R7[['''#n(EF
xiiA
t{{''(IIdO	kk$	7((/ !+H
'.$ ^#n4~EV&E	&ER!<H.4%8P&3
4*)Z%*$W	L	D	C2+j,=^C0
**2 .9& :&4
"B@J 02DE,, 02DEAA& 02DE
3
3 BGGRXX#67& 8& 7 7rU   