
    rh                     6   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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/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZDmEZE  ej                         ZGej                  j                  d       ZJeJj                  eGj                  j                        ZNeGj                  eN   eG_O        eGj                  eN   eG_L        dZPd ZQd ZRd ZSd ZTd ZUd ZVej                  j                  de@e?z   e>z   eAz   eBz         d        ZYd  ZZd! Z[d" Z\d# Z]d$ Z^d% Z_d& Z`d' Zad( Zbd) Zcd* Zdd+ Zed, Zfd- Zgd. Zhd/ Zid0 Zjd1 Zkd2 Zld3 Zmd4 Znd5 Zod6 Zpd7 Zqd8 Zrd9 Zsd: Ztd; Zuej                  j                  d<e?      d=        Zvd> Zwd? Zxej                  j                  d@e&e%g      dA        Zyej                  j                  d@e&e%g      dB        Zzej                  j                  d@e&e%g      dC        Z{ej                  j                  dDej                  ej                  g      dE        Z~dF ZdG Zy)H    )escapeN)assert_allclose)datasetssvm)BaseEstimatorClassifierMixin)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                     t        t        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)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ys       p/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/sklearn/tests/test_multiclass.pytest_ovr_exceptionsrC   9   s.   
iQ7
8C 
~	& 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   M   sF    
%&A

C	z	- ($Q'( ( (s   AAc                  ^   t        t        d            } | j                  t        j                  t        j
                        j                  t        j                        }t        | j                        t        k(  sJ t        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   r0   ?)r   r   r=   irisdatatargetr9   lenestimators_	n_classesr;   meanr   )r>   predclfpred2s       rB   test_ovr_fit_predictrT   U   s   
iQ7
8C77499dkk*22499=Ds9,,,

#C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   r0   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_fitrf   e   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)
NrX   r5   rY   r\      zAMini-batch contains \[.+\] while classes must be subset of \[.+\]r2   )r@   rA   )r   r   r;   r_   r`   ra   r]   r^   r7   r8   r:   )r>   r@   rA   y1r?   s        rB   test_ovr_partial_fit_exceptionsrk      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_regressorrn      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   alpharW      rh   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)ro   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   rh   )r   r.   r4   r5   z,Label .+ is present in all training examplesr2   ri   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      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   rh   r   rh   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   r0   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 	q! . "(+//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
      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   )rh   r5   r4   axisr   )r   r=   r   r   r9   r;   r<   r&   rb   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   r0   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 * 	q!	  	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      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   rh   r   )r.   r.   r.   )r   r   r   r   )r   r4   r4   r   )r4   r4   r4   )r4   r   r4   r   r   r0   r|   rq   )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 	q!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.   rm   )
r   r   r   r=   rJ   rK   rL   rM   rN   score)r>   s    rB   test_ovr_fit_predict_svcr   N  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   rq   )TF)RQ?gQ?)r   r6   rW   rs   rh   r5   rt   r   ru   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   U  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   rq   )FTrW   rs   rh   r.   rt   r   ru   r{   r   Fr   r   r   T)
param_gridr|   )r   r   r}   r   r=   r   SVRrb   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   o  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   rq   r{   r   r         ?)r   rJ   rK   rL   r   r=   r   r   rb   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                       G d dt         t              }  |        }t        j                  t        j                  }}t        |      j                  ||      }|j                  |      }t        |d       y)zmCheck that predic_proba returns all zeros when the base estimator
    never predicts the positive class.
    c                       e Zd Zd Zd Zy)Gtest_ovr_single_label_predict_proba_zero.<locals>.NaiveBinaryClassifierc                 :    t        j                  |      | _        | S )N)r;   r^   r   )selfr@   rA   s      rB   r=   zKtest_ovr_single_label_predict_proba_zero.<locals>.NaiveBinaryClassifier.fit  s    IIaLDMKrU   c                 X    t        j                  t        |      df      }d|d d df<   |S )Nr5   r   r4   )r;   r   rM   )r   r@   probas      rB   r   zUtest_ovr_single_label_predict_proba_zero.<locals>.NaiveBinaryClassifier.predict_proba  s*    GGSVQK(EE!Q$KLrU   N)__name__
__module____qualname__r=   r    rU   rB   NaiveBinaryClassifierr     s    		rU   r   rE   N)	r   r   rJ   rK   rL   r   r=   r   r   )r   r   r@   rA   rR   y_probas         rB   (test_ovr_single_label_predict_proba_zeror     s\    
	 	 %&H99dkkqA
h
'
+
+Aq
1C"GGS!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 )
NrW   rs   rh   r.   rt   Tr   ru   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 )NrW   rs   r   )rv   rw   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            } g d}t        | d|i      }|j                  t        j
                  t        j                         |j                  j                  d   j                  }||v sJ y Nr   r0   )皙?r|   r6   estimator__C)
r   r   r   r=   rJ   rK   rL   best_estimator_rN   C)r>   Cscvbest_Cs       rB   test_ovr_gridsearchr     se    
iQ7
8C	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            } t        j                  t              5  | j                  g        d d d        y # 1 sw Y   y xY wNr   r0   )r   r   r7   r8   r
   r9   ovos    rB   test_ovo_exceptionsr     s=    
YA6
7C	~	& B     A

Ac                     t        t        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     YA6
7CGGDIIt{{;CCDIIN'+yy1!d1g1N177>43DEMM ,.BC	 2s   3Cc                  ,   t        t        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   r0   r4   r5   )r   r   r=   rJ   rK   rL   r9   rM   rN   rO   r   r   s    rB   test_ovo_fit_predictr	    s    
YA6
7C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)NrW   r4   r5   rI   <   rX   )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   rh   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%   r`   randr   formatr7   r8   r:   r   rb   )tempr@   rA   ovo1re   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            }|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   r0   r4   r   )rE   r   rF      )rJ   rK   r   r   r   r=   rL   r   rO   r&   r   r9   r;   r   rangerN   roundr   issubsetrM   r^   )	rv   ovo_clf	decisionsvoteskijrQ   	class_idxs	            rB   test_ovo_decision_functionr!  L  s   		"I !:;G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            } 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#  {  se    
YA6
7C	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   ri   r5   r   r4   r5   Fr   r#   rZ   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+    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   ri   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	                     }|j                  | |       t        ||j                  |              y )Nr   )r  bcd)r;   eyer<   r   r   r=   r&   r9   )r@   rA   r   s      rB   test_ovo_string_yr4    sI    
q	A
%&A
Y[
)CGGAqMq#++a.)rU   c                     t        j                  d      } t        j                  dgdz        }t        t	                     }d}t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nr   r  zwhen only one classr2   )	r;   r3  r<   r   r   r7   r8   r:   r=   r@   rA   r   r?   s       rB   test_ovo_one_classr7    sd    
q	A
#A
Y[
)C
C	z	- 1  s   A;;Bc                      t         j                  } t         j                  d d df   }t        t                     }d}t	        j
                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY wNr   zUnknown label typer2   )rJ   rK   r   r   r7   r8   r:   r=   r6  s       rB   test_ovo_float_yr:    s]    		A		!Q$A
Y[
)C
C	z	- 1     A44A=c                      t        t        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_exceptionsr?    s>    	q 9:D	~	& R  r   c                     t        t        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   r0   r5   )	code_sizer1   )r   r   r=   rJ   rK   rL   r9   rM   rN   rO   r   r=  s    rB   test_ecoc_fit_predictrB    s    	q 9QUVWD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      } 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_ecoc_gridsearchrD    sg    	q 9JD	B	d^R0	1BFF499dkk"++A.00FR<<rU   c                      t         j                  } t         j                  d d df   }t        t                     }d}t	        j
                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY wr9  )rJ   rK   r   r   r7   r8   r:   r=   r6  s       rB   test_ecoc_float_yrF    s]    		A		!Q$A
y{
+C
C	z	- 1  r;  csc_containerc                 `   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            }|j                  ||      j                  |       t        |j                        d	k(  sJ y # 1 sw Y   xY w# 1 sw Y   fxY w)
NTF)	ensure_2daccept_sparse)check_Xcheck_X_paramsr   r0   zSparse data was passedr2   r   )rJ   rK   rL   r$   r"   r   r7   r8   	TypeErrorr=   r9   r   rM   rN   )rG  r@   rA   X_spbase_estimatorr>  s         rB   (test_ecoc_delegate_sparse_base_estimatorrP    s     99dkkqAD (%)EBN  Q?D	y(@	A q 	HHQN	y(@	A T  	q 9:D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_indicesr]  
  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.
    ri   r   N)   r   linearrS  r   r.   )r_  r_  rR  r_  c   r4   r5   rW   )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KrW  ovr_precomputedovo_precomputeds
             rB   test_pairwise_n_features_inrk    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                         j                  j                  rJ  | |      }|j                         j                  j                  sJ y )NrR  rS  )r   r   __sklearn_tags__
input_tagspairwise)rl  rW  rd  rX  ovr_trues        rB   test_pairwise_tagrr  `  so     gg]3O$%78I))+66????#O4H$$&11::::rU   c                 P   t        j                  d      }t        j                  d      }t        j                  t        j                  }} | |      } | |      }t        j                  ||j                        }t        |||d      }t        |||d      }	t        |	|       y )NrR  rS  r`  raise)error_score)
r   r   rJ   rK   rL   r;   rU  r   r   r&   )
rl  rW  rd  r@   rA   multiclass_clf_notprecomputedmulticlass_clf_precomputedrY  score_not_precomputedscore_precomputeds
             rB   test_pairwise_cross_val_scorerz  n  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   rm   )pr0   )r;   r`   RandomStaterJ   rK   rL   copychoicer   r   boolnanr   r   r   r=   r   )rl  rngr@   rA   masklrs         rB   test_support_missing_valuesr    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
    r|  r0   )	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.baser   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  rJ   r`   r~  r  permutationrL   sizepermrK   rO   rC   rG   rT   rf   rk   rn   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r!  r#  r+  r.  r4  r7  r:  r?  rB  rD  rF  rP  r]  rk  rr  rz  r  r   r   r  r  r  r   rU   rB   <module>r     s       ) ! 7 / - (   : A 
 . 2 4 & F 6 J  RxiiA
t{{''(IIdO	kk$	7((/ !+H
'.$ ^#n4~EV&E	&ER!<H.4%8P&3
4*)Z%*"2$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   