
    {Kg                       d dl Z d dlZd dlmZ d dlmZmZ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 d dlmZ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 m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZEmFZF d dlGmHZH ddZId ZJd ZKe
j                  j                  ddd de	j                  g      d        ZOe
j                  j                  dd gdfd dgdfg ddfg      d        ZPd  ZQd! ZReAd"        ZSeAd#        ZTeAd$        ZUd% ZVe
j                  j                  d&g d' e	j                  g d(g d)g d*g d+g      fg d,g d-fg      d.        ZXe
j                  j                  d&g d/ e	j                  g d+g d+g d0g d0g d1g      fg d2g d3fg      d4        ZYd5 ZZd6 Z[d7 Z\d8 Z]e
j                  j                  d9eE      e
j                  j                  d:eF      d;               Z^d< Z_e
j                  j                  d=g d>      d?        Z`d@ ZadA Zbe
j                  j                  dB e	j                  g dC       e	j                  g dC      dDdEf e	j                  g dF       e	j                  g dF      dDdGf e	j                  g dF       e	j                  g dC      dDdHf e	j                  g dF       e	j                  g dI      dDdJf e	j                  g dC       e	j                  g dF      dDdKfg      dL        Zce
j                  j                  dM e	j                  g dN       e	j                  g dO      dDdPfg      dQ        ZddR ZedS ZfdT Zge
j                  j                  dd de	j                  g      e
j                  j                  dUd gd gfg g fg      e
j                  j                  dVe" ee#dW      e,e-g      dX                      Zhe
j                  j                  dUd gd gfg g fg      e
j                  j                  dVe" ee#dW      e,e-g      dY               ZidZ Zjd[ Zkd\ Zld] Zme
j                  j                  d^d_d`g      da        Zndb Zoe
j                  j                  dcg dd      de        Zpdf Zqdg Zrdh Zse
j                  j                  dig djfdkdlgdmfgdndogp      dq        Zte
j                  j                  drdd dgg dfg dsp      dt        Zudu Zve
j                  j                  dvg dw      dx        Zwdy Zxdz Zyd{ Zzd| Z{d} Z|d~ Z}d Z~d Zd ZeAd        Zd Zd Zd Zd Zd Zd Zd Ze
j                  j                  dddg      d        ZeAd        ZeAd        ZeAe
j                  j                  dddde	j                  e	j                  fg      d               Ze
j                  j                  ddg      e
j                  j                  dcg d      e
j                  j                  dd de	j                  g      d                      Ze
j                  j                  dcg d      d        Ze
j                  j                  dd de	j                  g      d        Zd Zd Ze
j                  j                  dd de	j                  g      d        Ze
j                  j                  ddd de	j                  g      d        Ze
j                  j                  ddd de	j                  g      d        Ze
j                  j                  ddd de	j                  g      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Ze
j                  j                  dve	jB                  e	jD                  e	jF                  g      d        Ze
j                  j                  dve	jB                  e	jD                  e	jF                  g      d        Ze
j                  j                  dUg dg dfg ddd gd dgdd ggfg dg dg dg dgfg      d        Zd Zd Zd Ze
j                  j                  dg dg dfg dg dfg dg dfg      d        Ze
j                  j                  dVe&e" ee#dW      e+e,e-eg      e
j                  j                  dg d      d               Ze
j                  j                  d e	j                  d dg       e	j                  dd g      df e	j                  d dg       e	j                  d dg      df e	j                  d dg       e	j                  d d g      df e	j                  d d g       e	j                  d d g      dfg      d        Ze
j                  j                  d e(e"e	j                         e(e#de	j                  ë       e(e,e	j                         e(e-e	j                        g      dĄ        Zdń ZdƄ ZdǄ Zy)    N)partial)chainpermutationsproduct)linalg)hamming)	bernoulli)datasetssvm)make_multilabel_classification)UndefinedMetricWarning)accuracy_scoreaverage_precision_scorebalanced_accuracy_scorebrier_score_lossclass_likelihood_ratiosclassification_reportcohen_kappa_scoreconfusion_matrixf1_scorefbeta_scorehamming_loss
hinge_lossjaccard_scorelog_lossmake_scorermatthews_corrcoefmultilabel_confusion_matrixprecision_recall_fscore_supportprecision_scorerecall_scorezero_one_loss)_check_targetsd2_log_loss_score)cross_val_score)LabelBinarizerlabel_binarize)DecisionTreeClassifier)MockDataFrame)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalassert_no_warningsignore_warnings)_nanaverage)CSC_CONTAINERSCSR_CONTAINERS)check_random_stateFc                    | t        j                         } | j                  }| j                  }|r||dk     ||dk     }}|j                  \  }}t        j                  |      }t        d      }|j                  |       ||   ||   }}t        |dz        }t
        j                  j                  d      }t
        j                  ||j                  |d|z        f   }t        j                  ddd      }	|	j!                  |d| |d|       j#                  ||d       }
|r	|
ddd	f   }
|	j%                  ||d       }||d }|||
fS )
zMake some classification predictions on a toy dataset using a SVC

    If binary is True restrict to a binary classification problem instead of a
    multiclass classification problem
    N   %   r      linearT)kernelprobabilityrandom_state   )r
   	load_irisdatatargetshapenparanger3   shuffleintrandomRandomStatec_randnr   SVCfitpredict_probapredict)datasetbinaryXy	n_samples
n_featuresprnghalfclfy_pred_probay_predy_trues                m/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/metrics/tests/test_classification.pymake_predictionr[   ;   sN    $$&AAQx1q51GGIz
		)A
R
 CKKNQ41qAy1}D ))


"C
a9cJ&6778A ''t!
DC771Ud8QuX.<<QtuXFL $AqD)[[45"FtuXF6<''    c            
         t        j                         } t        | d      \  }}}ddddddd	d
ddddddddddddddddddd}t        ||t	        j
                  t        | j                              | j                  d      }|j                         |j                         k(  sJ |D ]u  }|dk(  r#t        ||   t              sJ ||   ||   k(  r)J ||   j                         ||   j                         k(  sJ ||   D ]  }t        ||   |   ||   |           w t        |d   d   t              sJ t        |d   d   t              sJ t        |d   d   t              sJ t        |d   d   t              sJ y ) NFrM   rN   g7Mo?gUUUUUU?ghQ?   )	precisionrecallf1-scoresupportUUUUUU?gc1Ƹ?g433333?   g)k??$I$I?   gCFQ?gc?gƢ?K   rb   r`   ra   rc   g?gD~WG?g]3p?)setosa
versicolor	virginica	macro avgaccuracyweighted avgT)labelstarget_namesoutput_dictro   rk   r`   rn   rc   )r
   r=   r[   r   rA   rB   lenrr   keys
isinstancefloatr+   rD   )irisrY   rX   _expected_reportreportkeymetrics           rZ   ,test_classification_report_dictionary_outputr~   k   s   D'UCFFA
 -)*	
 -*+	
 -)+	
 ++'	
 '++(	
5 OD #yyT../0&&F ;;=O002222*fSk5111#;/#"6666#;##%)=)B)B)DDDD)#.#OC$8$@&+fBUV /  oh/<eDDDok2;?GGGoh/	:C@@@ok29=sCCCr\   c                  F   t        g g d      } dt        j                  t        j                  t        j                  ddt        j                  t        j                  t        j                  ddd}t        | t              sJ | j                         |j                         k(  sJ |D ]u  }|dk(  r#t        | |   t              sJ | |   ||   k(  r)J | |   j                         ||   j                         k(  sJ ||   D ]  }t        ||   |   | |   |           w y )NT)rY   rX   rs           r   rj   )ro   rn   rp   ro   )r   rA   nanrv   dictru   rw   r+   )r{   rz   r|   r}   s       rZ   2test_classification_report_output_dict_empty_inputr      s   ""RTJFff	
 ff	
O fd###;;=O002222*fSk5111#;/#"6666#;##%)=)B)B)DDDD)#.#OC$8$@&+fBUV / r\   zero_divisionwarnr<   c                     g dg d}}t        j                  d      5 }t        ||| d       | dk(  r3t        |      dkD  sJ |D ]  }d}|t	        |j
                        v rJ  n|rJ d d d        y # 1 sw Y   y xY w)	Nabc)r   r   dTrecord)r   rs   r   r<   z7Use `zero_division` parameter to control this behavior.)warningscatch_warningsr   rt   strmessage)r   rY   rX   r   itemmsgs         rZ   0test_classification_report_zero_division_warningr      s    $oFF		 	 	-F-T	
 F"v;?"?Oc$,,////  : 
.	-	-s   AA4#A44A=zlabels, show_micro_avgTr   r<   r5   c                 h    ddgddg}}t        ||| d      }|rd|v sJ d|vsJ yd|v sJ d|vsJ y)a3  Check the behaviour of passing `labels` as a superset or subset of the labels.
    WHen a superset, we expect to show the "accuracy" in the report while it should be
    the micro-averaging if this is a subset.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27927
    r   r<   T)rq   rs   z	micro avgro   Nr   )rq   show_micro_avgrY   rX   r{   s        rZ   1test_classification_report_labels_subset_supersetr      s`     VaVFF"66&dSFf$$$'''V###&(((r\   c                     t        j                  g dg dg      } t        j                  g dg dg      }t        | |      dk(  sJ t        | |       dk(  sJ t        ||      dk(  sJ t        |t        j                  |            dk(  sJ t        | t        j                  |             dk(  sJ t        | t        j                  | j
                              dk(  sJ t        |t        j                  | j
                              dk(  sJ y )Nr   r<   r<   r<   r   r<   r   r   r<         ?r<   r   )rA   arrayr   logical_notzerosr@   y1y2s     rZ   .test_multilabel_accuracy_score_subset_accuracyr      s    	9i(	)B	9i(	)B"b!S((("b!Q&&&"b!Q&&&"bnnR01Q666"bnnR01Q666"bhhrxx01Q666"bhhrxx01Q666r\   c                     t        d      \  } }}t        | |d       \  }}}}t        |ddgd       t        |ddgd       t        |d	d
gd       t        |ddg       i t        fddit        ffD ]  \  }} |t
        | |fi |}	t        |	dd        |t        | |fi |}
t        |
dd        |t        | |fi |}t        |d
d       t         |t        | |fddi|d|	z  |
z  d|	z  |
z   z  d        y )NTrN   averageg\(\?g333333?r5   g)\(?g(\?皙?gRQ?   r   rN   beta      )
r[   r   r,   r-   r.   r    r!   r   r+   r   )rY   rX   ry   rS   rfskwargs	my_assertpsrsfss               rZ   %test_precision_recall_f1_score_binaryr      s,   't4FFA 1NJAq!Qa$q1a$q1a$q1q2r(# 
 
X	 23	 A&A!"dA.|VV>v>!"dA.x:6:!"dA.k66DDVDOb D2IN3	
r\   c                     dt        ddgddg      k(  sJ dt        ddgddg      k(  sJ dt        ddgddg      k(  sJ dt        ddgddgd      k(  sJ dt        ddgddg      k(  sJ dt        ddgddg      k(  sJ dt        ddgddg      k(  sJ dt        ddgddgt	        d            k(  sJ t        ddgddgt	        d            t        j                  t        ddgddgd            k(  sJ y )	N      ?r<   r   r   r   infg     j@)r    r!   r   r   rw   pytestapprox r\   rZ   +test_precision_recall_f_binary_single_classr   !  s;   
 /1a&1a&1111,1v1v....(Aq6Aq6****+q!fq!f15555/2r(RH5555,Bx"b2222(B8b"X....+r2hRuU|DDDDBx"be=RHr2hS1B   r\   c                  >   g d} g d}t        | t        j                  d            }t        |t        j                  d            }| |f||fg}t        |      D ]  \  }\  } }t	        | |g dd       }t        g d|       t	        | |g dd      }t        t        j                  g d      |       d	D ]5  }|d
k(  r|dk(  rt        t	        | |g d|      t	        | |d |             7  dD ]  }t        j                  t              5  t	        ||t        j                  d      |       d d d        t        j                  t              5  t	        ||t        j                  dd      |       d d d         t        j                  g dg dg      } t        j                  g dg dg      }t        | |d
ddg      \  }}	}
}t        t        j                  ||	|
g      t        j                  g d             y # 1 sw Y   xY w# 1 sw Y   (xY w)N)r<      r   r5   )r<   r<   r   r5   r   classes)r   r<   r5   r   r   rq   r   )r   r   r   r   r   macro)microweightedsamplesr   r   )Nr   r   r      r   r   r   r<   r   r   r<   r<   r<   r   r<   r   rq   )      ?r<   竪?)r'   rA   rB   	enumerater!   r,   meanr+   r   raises
ValueErrorr   r   )rY   rX   
y_true_bin
y_pred_binr>   iactualr   rS   r   r   ry   s               rZ   $test_precision_recall_f_extra_labelsr   4  s    FF		!=J		!=JVz:67D(FFff_dS!";VD ff_gV!"''*C"DfM 8G)#QVVOWUVVD'J 8  /( 7]]:&Z		!gV ']]:&JryyQ/? '& 7 XXy),-FXXy),-F0	1a&JAq!Q !Q+RXX6G-HI '&&&s   #H$HH	H	c                     g d} g d}t        | t        j                  d            }t        |t        j                  d            }| |f||fg}t        |      D ]  \  }\  } }t	        t
        | |ddg      }t	        t
        | |d       }t        dd	g |d 
             t        d |d
             t        d |d
             t        d |d
             dD ]  } ||
       ||
      k7  rJ   y )N)r<   r<   r5   r   )r<   r   r   r   r   r   r<   r   rq   r   r   r   r   r   UUUUUU?r   r   )r   r   r   )r'   rA   rB   r   r   r!   r,   r+   )	rY   rX   r   r   r>   r   	recall_13
recall_allr   s	            rZ   &test_precision_recall_f_ignored_labelsr   b  s     FF		!=J		!=JVz:67D(FFL&&!QH	\66$G
!3*i.EFOYw-GH3Yz5RSGYw%?@ 6GW-G1LLLL 6  /r\   c            	          t        j                  g dg dg dg dg dg dg      } t        j                  g dg dg dg d	g d
g dg      }d}t        j                  t        |      5  t        | |d       ddd       y# 1 sw Y   yxY w)z:Test multiclass-multiouptut for `average_precision_score`.)r5   r5   r<   r<   r5   r   r   r<   r5   r<   )r5   r   r<   ffffff?皙?皙?皙?333333?r   r   r   r   r   r   r   )r   r   r   )r   r   r   z.multiclass-multioutput format is not supportedmatchr5   	pos_labelN)rA   r   r   r   r   r   )rY   y_scoreerr_msgs      rZ   -test_average_precision_score_non_binary_classr   y  s{    XX	
	F hh	
	G ?G	z	11= 
2	1	1s   ,BBzy_true, y_scorer   r   r<   r5   r   r   r   r   )r   r   r   r   r<   r<   r<   r<   r<   r<   r<   )r   r   r   r   r   333333?r   rf   rf   r<   r<   c                 &    t        | |      dk(  sJ y)a(  
    Duplicate values with precision-recall require a different
    processing than when computing the AUC of a ROC, because the
    precision-recall curve is a decreasing curve
    The following situation corresponds to a perfect
    test statistic, the average_precision_score should be 1.
    r<   Nr   rY   r   s     rZ   -test_average_precision_score_duplicate_valuesr     s    8 #673q888r\   )r5   r5   r<   r<   r   )r   r   r   )r   r   r   r   )r   r   r   c                 &    t        | |      dk7  sJ y )Nr   r   r   s     rZ   (test_average_precision_score_tied_valuesr     s    : #673s:::r\   c                      d} t        j                  t        |       5  t        g dg ddd       d d d        y # 1 sw Y   y xY w)NzNote that pos_label \(set to 2\) is ignored when average != 'binary' \(got 'macro'\). You may use labels=\[pos_label\] to specify a single positive class.r   r   r<   r5   r5   r5   r   r   r   )r   warnsUserWarningr   r   s    rZ   (test_precision_recall_f_unused_pos_labelr     s9    
	  
k	-'yAw	
 
.	-	-s	   ;Ac            	          t        d      \  } }}d } || |        || D cg c]  }t        |       c}|D cg c]  }t        |       c}       y c c}w c c}w )NTr   c                 <   t        | |      }t        |ddgddgg       |j                         \  }}}}||z  ||z  z
  }t        j                  ||z   ||z   z  ||z   z  ||z   z        }|dk(  rdn||z  }	t        | |      }
t        |
|	d       t        |
dd       y )	N   r         r   r5   decimal=
ףp=?)r   r-   flattenrA   sqrtr   r,   )rY   rX   cmtpfpfntnnumdentrue_mccmccs              rZ   testz*test_confusion_matrix_binary.<locals>.test  s    ff-2Q!R12BB2gRggrBw27+rBw727CDq1cCi/!#x;!#tQ7r\   r[   r   rY   rX   ry   r  rP   s        rZ   test_confusion_matrix_binaryr    sZ    't4FFA8 	&	!&Q#a&&	!F#;FqCFF#;<	!#;
   AA
c            	          t        d      \  } }}d } || |        || D cg c]  }t        |       c}|D cg c]  }t        |       c}       y c c}w c c}w )NTr   c                 P    t        | |      }t        |ddgddggddgddggg       y )Nr  r  r   r  r   r-   )rY   rX   r  s      rZ   r  z5test_multilabel_confusion_matrix_binary.<locals>.test  s7    (82"a1b' 2b!Wq"g4FGHr\   r  r  s        rZ   'test_multilabel_confusion_matrix_binaryr    s[    't4FFAI 	&	!&Q#a&&	!F#;FqCFF#;<	!#;r  c            	          t        d      \  } }}dd} || |        || D cg c]  }t        |       c}|D cg c]  }t        |       c}d       y c c}w c c}w )NFr   c           	      P   t        | |      }t        |ddgddggddgddggd	d
gddggg       |rg dng d}t        | ||      }t        |ddgddggd	d
gddggddgddggg       |rg dng d}t        | ||      }t        |ddgddggd	d
gddggddgddggddgddggg       y )N/   r   r      &   r      r      r   r5      )021r   r5   r<   r   )r%  r&  r'  3)r   r5   r<   r   ri   r   r  )rY   rX   string_typer  rq   s        rZ   r  z9test_multilabel_confusion_matrix_multiclass.<locals>.test  s   (82q'Ar7#r1gAw%72r(QG9LM	

 %0Y(G2q'Ar7#r2hB%8B7RG:LM	

 *5%,(Ga1b'"bAr7#a2q'"a1a&!		
r\   T)r*  )Fr  r  s        rZ   +test_multilabel_confusion_matrix_multiclassr+    s\    'u5FFA
6 	&	!&Q#a&&	!F#;FqCFF#;N	!#;s
   AA
csc_containercsr_containerc                    t        j                  g dg dg dg      }t        j                  g dg dg dg      } ||      } ||      } | |      } | |      }t        j                  g d      }dd	gddggdd	gddggd	d
gdd	ggg}	|||g}
|||g}|
D ]!  }|D ]  }t        ||      }t        ||	        # t        ||d      }t        |dd	gddggddgd	dggd	dgd
d	ggg       t        ||d
d	g      }t        |d	d
gdd	ggdd	gddggg       t        ||d
d	gd      }t        |d	d	gddggddgd	d	ggd	dgdd	ggg       t        |||d      }t        |d
d	gd
d
ggddgd	dggd	dgdd	ggg       y )Nr   r   r<   r   r<   r<   r   r   r   r   )r5   r<   r   r<   r   r5   T
samplewiser   )rq   r2  )sample_weightr2  r   r   )rA   r   r   r-   )r,  r-  rY   rX   
y_true_csr
y_pred_csr
y_true_csc
y_pred_cscr3  real_cmtruespreds
y_true_tmp
y_pred_tmpr  s                  rZ   +test_multilabel_confusion_matrix_multilabelr=  '  s   
 XXy)Y78FXXy)Y78Fv&Jv&Jv&Jv&J HHY'MAA1a&1a&!1QFQF3CDGZ,EZ,E
J,ZDBr7+    
%VV	EBraVaV,1v1v.>!Q!Q@PQR 
%VVQF	CBraVaV,1v1v.>?@ 
%VVQFt	TBraVaV,1v1v.>!Q!Q@PQR 
%m
B raVaV,1v1v.>!Q!Q@PQRr\   c            	         t        j                  g dg dg dg      } t        j                  g dg dg dg      }t        j                  t        d      5  t        | |d	d
g       d d d        t        j                  t        d      5  t        | |g dg dg dg       d d d        d}t        j                  t        |      5  t        | |dg       d d d        d}t        j                  t        |      5  t        | |dg       d d d        t        j                  t        d      5  t        g dg dd       d d d        d}t        j                  t        |      5  t        g dg dgg dg dg       d d d        y # 1 sw Y   $xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   y xY w)Nr   r/  r0  r   r   r   inconsistent numbers of samplesr   r<   r5   r3  zshould be a 1d arrayr<   r5   r   )r5   r   r   )r   r   r   z%All labels must be in \[0, n labels\)r   r   r   zSamplewise metricsr   r   Tr1  z'multiclass-multioutput is not supported)r5   r<   r   r<   r   r5   )rA   r   r   r   r   r   )rY   rX   r   s      rZ   'test_multilabel_confusion_matrix_errorsrC  Q  sT   XXy)Y78FXXy)Y78F 
z)J	K#FF1a&I 
L	z)?	@#F9i*K	
 
A 7G	z	1#FFB4@ 
26G	z	1#FFA3? 
2 
z)=	>#IyTJ 
? 8G	z	1#Y	$:Y	<RS 
2	1+ 
L	K	@	@ 
2	1 
2	1 
?	>
 
2	1sH   FF	F$>F01F<)GFF!$F-0F9<GGz%normalize, cm_dtype, expected_results))truer   TUU?)predr   rE  )allr   geq?)Nr   r5   c                     g ddz  }t        t        t        g d             }t        |||       }t	        ||       |j
                  j                  |k(  sJ y )Nr   r   	normalize)listr   r   r   r*   dtypekind)rJ  cm_dtypeexpected_resultsy_testrX   r  s         rZ   test_confusion_matrix_normalizerQ  o  sP     ]F%i012F	&&I	>BB()88==H$$$r\   c                     g d} g d}t        | |d      }|j                         t        j                  d      k(  sJ t	        j
                         5  t	        j                  dt               t        | |d      }d d d        j                         t        j                  d      k(  sJ t	        j
                         5  t	        j                  dt               t        || d       d d d        y # 1 sw Y   wxY w# 1 sw Y   y xY w)	N)r   r   r   r   r<   r<   r<   r<   )r   r   r   r   r   r   r   r   rD  rI         @errorrF  r   )r   sumr   r   r   r   simplefilterRuntimeWarning)rP  rX   cm_truecm_preds       rZ   ,test_confusion_matrix_normalize_single_classrZ    s    %F%Fvv@G;;=FMM#.... 
	 	 	"g~6"66VD 
# ;;=FMM#....		 	 	"g~66: 
#	" 
#	" 
#	"s   )C2 )C>2C;>Dc                      g d} g d}t        j                  t        d      5  t        ||        ddd       y# 1 sw Y   yxY w)z8Test `confusion_matrix` warns when only one label found.r   r   r   r   zA single label was found inr   N)r   r   r   r   )rP  rX   s     rZ   "test_confusion_matrix_single_labelr]    s2    FF	k)F	G( 
H	G	Gs	   :Azparams, warn_msg)r   r   r   r   r   r   rY   rX   z2samples of only one class were seen during testing)r<   r<   r<   r   r   r   z:positive_likelihood_ratio ill-defined and being set to nanz+no samples predicted for the positive classr   r   r   r<   r<   r<   z:negative_likelihood_ratio ill-defined and being set to nanz@no samples of the positive class were present in the testing setc                 z    t        j                  t        |      5  t        di |  d d d        y # 1 sw Y   y xY wNr   r   )r   r   r   r   )paramswarn_msgs     rZ   test_likelihood_ratios_warningsrd    s*    b 
k	2)&) 
3	2	2   1:zparams, err_msg)r   r<   r   r<   r   r<   r<   r   r   r5   zeclass_likelihood_ratios only supports binary classification problems, got targets of type: multiclassc                 z    t        j                  t        |      5  t        di |  d d d        y # 1 sw Y   y xY wra  )r   r   r   r   )rb  r   s     rZ   test_likelihood_ratios_errorsrh    s)    $ 
z	1)&) 
2	1	1re  c                     t        j                  dgdz  dgdz  z         } t        j                  dgdz  dgdz  z   dgdz  z         }t        | |      \  }}t        |d       t        |d	       t        | |       \  }}t	        |t         j
                  dz         t        |t        j                  d      d
       t        j                  dgdz  dgdz  z         }t        | ||      \  }}t        |d       t        |d       y )Nr<   r   r   r  r5   
   r  g?g_B{	%?g-q=)rtolr      r   r   r@  gUUUUUU@gqq?)rA   r   r   r*   r-   r   r   )rY   rX   posnegr3  s        rZ   test_likelihood_ratiosro    s     XXqcAgb()FXXqcAgb(A3723F&vv6HCC!C! 'vv6HCsBFFQJ'C!51
 HHcURZ3%!)34M&vv]SHCC C!r\   c                     t        j                  dgdz  dgdz  z         } t        j                  dgdz  dgdz  z   dgdz  z   dgdz  z         }t        | |      }t        |dd	
       |t        ||       k(  sJ t        j                  | dgdz        } t        j                  |dgdz        }t        | |ddg      |k(  sJ t        t        | |       d       t        j                  dgdz  dgdz  z   dgdz  z         } t        j                  dgdz  dgdz  z   dgdz  z         }t        t        | |      dd
       t        j                  dgdz  dgdz  z   dgdz  z         } t        j                  dgdz  dgdz  z   dgdz  z         }t        t        | |      dd
       t        t        | |d      dd
       t        t        | |d      dd
       y )Nr   (   r<   <   rh   rj  2   gʡE?r   r  r5   r   r   r   .   ,   4          g??g+?r8   weightsg_vO?	quadraticg#?)rA   r   r   r+   append)r   r   kappas      rZ   test_cohen_kappar~     s    
1#(aS2X%	&B	1#(aS2X%b0A38;	<Bb"%Eua0%b"---- 
2sQw	B	2sQw	BRQF3u<<<)"b137 
1#(aS2X%b0	1B	1#(aS2X%b0	1B)"b161E 
1#(aS2X%b0	1B	1#(aS2X%b0	1B)"b161E)"b(CVUVW"b+6r\   c                  T    t        dgdg      dk(  sJ t        ddgddg      dk(  sJ y )Nr   r<   r   )r   r   r\   rZ   test_matthews_corrcoef_nanr    s8    aS1#&#---aVaV,333r\   zy_true, y_predr}   r   c                     t        j                         5  t        j                  d        | |||      }ddd       t        j                  |      rt        j                        sJ y|k(  sJ y# 1 sw Y   >xY w)zmCheck the behaviour of `zero_division` when setting to 0, 1 or np.nan.
    No warnings should be raised.
    rT  r   N)r   r   rV  rA   isnan)r}   rY   rX   r   results        rZ   !test_zero_division_nan_no_warningr  $  sh     
	 	 	"g&mD 
# 
xxxx&&& 
#	"s   !A33A<c                     t        j                  t              5   | ||d      }ddd       dk(  sJ y# 1 sw Y   xY w)ztCheck the behaviour of `zero_division` when setting to "warn".
    A `UndefinedMetricWarning` should be raised.
    r   r  Nr   )r   r   r   )r}   rY   rX   r  s       rZ   test_zero_division_nan_warningr  =  s9     
,	-f= 
.S== 
.	-s   6?c                      t         j                  j                  d      } | j                  ddd      }| j                  ddd      }t	        t        ||      t        j                  ||      d   d       y )Nr   r5   rh   sizer   r<   rj  )rA   rE   rF   randintr+   r   corrcoef)rT   rY   rX   s      rZ   -test_matthews_corrcoef_against_numpy_corrcoefr  P  sd    
))


"C[[AB['F[[AB['F&&)2;;vv+Ft+Lbr\   c                     t         j                  j                  d      } | j                  ddd      }| j                  ddd      }| j	                  d      }t        |||      }t        |      }t        t        |      D cg c]A  }t        |      D ]1  }t        |      D ]!  }|||f   |||f   z  |||f   |||f   z  z
  # 3 C c}}}      }	t        t        |      D 
cg c]c  }|d d |f   j                         t        j                  t        |      D 
cg c]  }
t        |      D ]  }|
|k7  s	|||
f    ! c}}
      z  e c}}
}      }t        j                  t        |      D 
cg c]c  }||d d f   j                         t        j                  t        |      D 
cg c]  }
t        |      D ]  }|
|k7  s	||
|f    ! c}}
      z  e c}}
}      }|	t        j                  ||z        z  }t        |||      }t        ||d       y c c}}}w c c}}
w c c}}
}w c c}}
w c c}}
}w )Nr   r5   rh   r  r@  rj  )rA   rE   rF   r  randr   rt   rU  ranger
  r   r+   )rT   rY   rX   r3  CNkmlcov_ytypr   gcov_ytytcov_ypyp
mcc_jurmanmcc_ourss                   rZ   %test_matthews_corrcoef_against_jurmanr  Z  s-    ))


"C[[AB['F[[AB['FHHRLM}EAAA 1X	
1X1X adGa1g!Q$!AqD' 11  2 2	
H  1X	
  adGKKMffuQxLx!qAQ!Va1ggxLMN	
H vv 1X	
  adGKKMffuQxLx!qAQ!Va1ggxLMN	
H BGGHx$788J }MH*b11	
 M	
 M	
sC   AH )8H-!H':H'H-88H:0H4	H4H:'H-4H:c            	         t         j                  j                  d      } | j                  ddd      D cg c]  }|dk(  rdnd }}t	        t        ||      d       |D cg c]  }|dk(  rdnd }}t	        t        ||      d       t        |ddg	      }t        j                  |dd      }t	        t        ||      d       t	        t        g d
g d
      d       t	        t        |dgt        |      z        d       g d}g d}t	        t        ||      d       dgdz  dgdz  z   }t        j                  t              5  t	        t        |||      d       d d d        y c c}w c c}w # 1 sw Y   y xY w)Nr   r5   rh   r  r   r   r   r   r   r\  r   )r<   r   r<   r<   r   r<   r<   r<   r   r<   r<   r<   r<   r<   r<   r<   r   r<   r<   r<   )r<   r<   r<   r   r   r<   r<   r<   r<   r   r<   r<   r<   r   r<   r<   r<   r   r<   r<   r<   rj  r@  )rA   rE   rF   r  r+   r   r'   wherert   r   r   AssertionError)rT   r   rY   
y_true_invy_true_inv2y_1y_2masks           rZ   test_matthews_corrcoefr    si   
))


"C.1kk!QRk.HI.HQ!Vc$.HFI )&&93? 5;;Fqc#s*FJ;)&*=rB #s<K((;S1K)&+>C ),EsK )&3%#f+2EFL GC
FC)#s3S9 38qcBhD 
~	&-c3dKSQ 
'	&; J <. 
'	&s   E)"E.E33E<c                     t         j                  j                  d      } t        d      }d}| j	                  d|d      D cg c]  }t        ||z          }}t        t        ||      d       g d}g d}t        t        ||      d	       g d}g d
}t        t        ||      dt        j                  d      z         g d}g d}t        t        ||      d       g d}g d}t        t        ||      d       g d}g d}	t        t        ||	      d       g d}g d}g d}
t        t        |||
      d       g d}g d}g d}
t        t        |||
      d       y c c}w )Nr   r   r   rh   r  r   )r   r   r<   r<   r5   r5   )r5   r5   r   r   r<   r<   g      )r<   r<   r   r   r   r   ii  r   )r   r   r   r   	r   r<   r5   r   r<   r5   r   r<   r5   )	r<   r<   r<   r5   r5   r5   r   r   r   )r   r   r<   r<   r5   rf  r<   r<   r<   r<   r   r@  r   r   r<   r<   r   r   )	rA   rE   rF   ordr  chrr+   r   r
  )rT   ord_a	n_classesr   rY   
y_pred_bad
y_pred_minrX   r  r  r3  s              rZ   !test_matthews_corrcoef_multiclassr    s^   
))


"CHEI&)kk!YRk&HI&Hc%!)n&HFI )&&93?  F#J)&*=tD  F#J)&*=sRWWWEU?UV FF)&&93? FF)&&93? &C
%C)#s3S9 FF#M&&F FF M&&F_ Js   E%n_pointsd   i'  c                    t         j                  j                  d      d }fd}t        j                  ddg|       }t	        t        ||      d       t        j                  g d|       }t	        t        ||      d        ||       \  }}t	        t        ||      d       t	        t        ||       |||             y )Ni3c                     t        | |      }|d   }|d   }|d   }t        |       }||z   |z  }||z   |z  }||z  ||z  z
  }	||z  d|z
  z  d|z
  z  }
|	t        j                  |
      z  S )Nr<   r<   )r<   r   r  r<   )r   rt   rA   r
  )rY   rX   conf_matrixtrue_pos	false_pos	false_negr  pos_rateactivitymcc_numeratormcc_denominators              rZ   mcc_safez1test_matthews_corrcoef_overflow.<locals>.mcc_safe  s    &vv6t$%	%	v;y(H4y(H4 8+h.AA"X-X>!h,Orww777r\   c                 v    j                  |       }|dj                  |       dz
  z  z   }|dkD  }|dkD  }||fS )Nr   r   )random_sample)r  x_truex_predrY   rX   rT   s        rZ   	random_ysz2test_matthews_corrcoef_overflow.<locals>.random_ys  sN    ""8,#!2!28!<s!BCC##v~r\   r   r   )r   r   rS  )rA   rE   rF   repeatr+   r   )r  r  r  arrrY   rX   rT   s         @rZ   test_matthews_corrcoef_overflowr    s     ))


)C
8 ))S#J
)C)#s3S9
))OX
.C)#s3S9x(NFF)&&93?)&&98FF;STr\   c                  ,   t        d      \  } }}t        | |d       \  }}}}t        |g dd       t        |g dd       t        |g dd       t        |g d       t	        | |d	d
      }t        |dd       t        | |d
      }t        |dd       t        | |d
      }	t        |	dd       t	        | |d      }t        |dd       t        | |d      }t        |dd       t        | |d      }	t        |	dd       t	        | |d      }t        |dd       t        | |d      }t        |dd       t        | |d      }	t        |	dd       t        j                  t              5  t	        | |d       d d d        t        j                  t              5  t        | |d       d d d        t        j                  t              5  t        | |d       d d d        t        j                  t              5  t        | |dd       d d d        t        | |g dd       \  }}}}t        |g dd       t        |g dd       t        |g dd       t        |g d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)NFr   r   )(\?Q?gzG?r5   )HzG?g
ףp=
?rf   )Q?333333?r  )r_   re   rh   r<   r   r   g(\?r   r   gRQ?r   gGz?r   r   r   r   r(  r   )r  g=
ףp=?r  )r  rf   r   )r  r  r  )r_   rh   re   )r[   r   r,   r-   r    r!   r   r   r   r   r   )
rY   rX   ry   rS   r   r   r   r   r   r   s
             rZ   )test_precision_recall_f1_score_multiclassr    s.   'u5FFA 1NJAq!Qa!3Q7a!3Q7a!3Q7q,' 
1g	FBb$*	ffg	6Bb$*	&&'	2Bb$*		9Bb$*	ffg	6Bb$*	&&'	2Bb$*		<Bb$*	ffj	9Bb$*	&&*	5Bb$*	z	"	: 
#	z	"VVY7 
#	z	"3 
#	z	"FFIC@ 
# 1y$JAq!Q a!3Q7a!3Q7a!3Q7q,'! 
#	"	"	"	"	"	"	"s0   ,I&I2I><J
&I/2I;>J
Jr   )r   r   r   r   Nc                     t        j                  g dg      }t        j                  g dg      }t        ||g dg |       \  }}}}t        |d       t        |d       t        |d       | t        |g d       y y )Nr  r   r   r<   r<   )r   r   r<   r5   )rq   warn_forr   r   r   r<   r<   r   )rA   r   r   r-   )r   rY   rX   rS   r   r   r   s          rZ   ;test_precision_refcall_f1_score_multilabel_unordered_labelsr  8  su     XX|n%FXX|n%F0|b'JAq!Q q!q!q!1l+ r\   c                  @   t        j                  g d      } t        j                  g d      }t        | |d       \  }}}}t        | |d      \  }}}}|t        j                  |      k(  sJ |t        j                  |      k(  sJ |t        j                  |      k(  sJ t        | |d      \  }}}}t        j                  |       }	|t        j
                  ||	      k(  sJ |t        j
                  ||	      k(  sJ |t        j
                  ||	      k(  sJ y )N)r   r<   r   r   r<   r<   r   r<   r   r   r<   r   r<   r   r<   )r<   r<   r   r<   r   r<   r<   r<   r<   r   r<   r   r<   r   r<   r   r   r   ry  )rA   r   r   r   bincountr   )
rY   rX   r   r   r   ry   rS   r   r   rc   s
             rZ   .test_precision_recall_f1_score_binary_averagedr  G  s    XXCDFXXCDF 4FFDQMBB0QJAq!Q0TJAq!Qkk&!G

2w////

2w////

2w////r\   c                     t        j                  d      } 	 t        j                  g d      }t        j                  g d      }t        t	        ||d      dd       t        t        ||d      dd       t        t        ||d      dd       t        j                  d	i |  y # t        j                  d	i |  w xY w)
Nraise)rG  )r   r<   r5   r   r<   r5   )r5   r   r<   r<   r5   r   r   r   r   r5   r   )rA   seterrr   r+   r    r!   r   )old_error_settingsrY   rX   s      rZ   test_zero_precision_recallr  X  s     w/	(,-,-OFFGLcSTULI3PQRHVVWEsAN 			'&'		'&'s   A9B' 'B>c                      t        d      \  } }}t        | |ddg      }t        |ddgddgg       t        | |d	dg      }t        |d
d	gddgg       t        j                  |       dz   }t        | |d	|g      }t        |d
dgddgg       y )NFr   r   r<   r   r   r   r   r5   r$  r_   )r[   r   r-   rA   max)rY   rX   ry   r  extra_labels        rZ   .test_confusion_matrix_multiclass_subset_labelsr  i  s    'u5FFA 
&&!Q	8BrRGaV,- 
&&!Q	8BrRGb!W-. &&.1$K	&&![1A	BBrRGaV,-r\   zlabels, err_msgz,'labels' should contains at least one label.r   r   z.At least one label specified must be in y_truez
empty listzunknown labels)idsc                     t        d      \  }}}t        j                  t        |      5  t	        |||        d d d        y # 1 sw Y   y xY w)NFr   r   r   )r[   r   r   r   r   )rq   r   rY   rX   ry   s        rZ   test_confusion_matrix_errorr  |  s;     (u5FFA	z	17 
2	1	1s   AArq   )NonerN   
multiclassc                     | rt        |       nd}t        j                  ||ft              }t	        g g |       }t        ||       y )Nr   rL  r   )rt   rA   r   rD   r   r-   )rq   expected_n_classesexpectedr  s       rZ   *test_confusion_matrix_on_zero_length_inputr    sA     )/VAxx+-?@LH	"b	0Br8$r\   c            	         g d} t        j                  t        |             }t        | |       }|j                  t         j
                  k(  sJ t         j                  t         j                  t         j                  fD ]@  }t        | | |j                  |d            }|j                  t         j
                  k(  r@J  t         j                  t         j                  d t        fD ]@  }t        | | |j                  |d            }|j                  t         j                  k(  r@J  t        j                  t        |       dt         j                        }t        | | |      }|d   dk(  sJ |d   d	k(  sJ t        j                  t        |       d
t         j
                        }t        | | |      }|d   d
k(  sJ |d   dk(  sJ y )Nr   F)copyr@  l    r  r   r   r  l    l    )rA   onesrt   r   rL  int64bool_int32uint64astypefloat32float64objectfulluint32)rP   weightr  rL  s       rZ   test_confusion_matrix_dtyper    sr   AWWSV_F	!Q	B88rxx((BHHbii0a&--E-2RSxx288### 1 **bjj$7a&--E-2RSxx2::%%% 8
 WWSVZryy9F	!Qf	5Bd8z!!!d8z!!! WWSV0AF	!Qf	5Bd8****d8r>>r\   rL  )Int64Float64booleanc                     t        j                  d      }t        j                  g d      }|j	                  ||       }|j	                  g dd      }t        ||      }t        ||      }t        ||       y)zkChecks that confusion_matrix works with pandas nullable dtypes.

    Non-regression test for gh-25635.
    pandas)	r<   r   r   r<   r   r<   r<   r   r<   r  )	r   r   r<   r<   r   r<   r<   r<   r<   r  N)r   importorskiprA   r   Seriesr   r-   )rL  pd	y_ndarrayrY   y_predictedoutputexpected_outputs          rZ   %test_confusion_matrix_pandas_nullabler    sj     
		X	&B45IYYyY.F))7w)GKfk2F&y+>Ov/r\   c            	          t        j                         } t        | d      \  }}}d}t        ||t	        j
                  t        | j                              | j                        }||k(  sJ y )NFr^   a|                precision    recall  f1-score   support

      setosa       0.83      0.79      0.81        24
  versicolor       0.33      0.10      0.15        31
   virginica       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
rq   rr   r
   r=   r[   r   rA   rB   rt   rr   rx   rY   rX   ry   rz   r{   s         rZ   %test_classification_report_multiclassr    sl    D'UCFFA
O #yyT../0&&	F _$$$r\   c                  >    g dg d}} d}t        | |      }||k(  sJ y )N)	r   r   r   r<   r<   r<   r5   r5   r5   r  a|                precision    recall  f1-score   support

           0       0.33      0.33      0.33         3
           1       0.33      0.33      0.33         3
           2       0.33      0.33      0.33         3

    accuracy                           0.33         9
   macro avg       0.33      0.33      0.33         9
weighted avg       0.33      0.33      0.33         9
r   )rY   rX   rz   r{   s       rZ   .test_classification_report_multiclass_balancedr    s/    02MFF
O #662F_$$$r\   c                  x    t        j                         } t        | d      \  }}}d}t        ||      }||k(  sJ y )NFr^   a|                precision    recall  f1-score   support

           0       0.83      0.79      0.81        24
           1       0.33      0.10      0.15        31
           2       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
)r
   r=   r[   r   r  s         rZ   :test_classification_report_multiclass_with_label_detectionr    sF    D'UCFFA
O #662F_$$$r\   c            	          t        j                         } t        | d      \  }}}d}t        ||t	        j
                  t        | j                              | j                  d      }||k(  sJ y )NFr^   a|                precision    recall  f1-score   support

      setosa    0.82609   0.79167   0.80851        24
  versicolor    0.33333   0.09677   0.15000        31
   virginica    0.41860   0.90000   0.57143        20

    accuracy                        0.53333        75
   macro avg    0.52601   0.59615   0.50998        75
weighted avg    0.51375   0.53333   0.47310        75
r   )rq   rr   digitsr  r  s         rZ   1test_classification_report_multiclass_with_digitsr    so    D'UCFFA
O #yyT../0&&F _$$$r\   c                      t        d      \  } }}t        j                  g d      |    } t        j                  g d      |   }d}t        | |      }||k(  sJ d}t        | |g d      }||k(  sJ y )NFr   )bluegreenreda|                precision    recall  f1-score   support

        blue       0.83      0.79      0.81        24
       green       0.33      0.10      0.15        31
         red       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
a|                precision    recall  f1-score   support

           a       0.83      0.79      0.81        24
           b       0.33      0.10      0.15        31
           c       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
r   rr   r[   rA   r   r   )rY   rX   ry   rz   r{   s        rZ   7test_classification_report_multiclass_with_string_labelr    s    'u5FFAXX./7FXX./7F
O #662F_$$$
O #66PF_$$$r\   c                      t        d      \  } }}t        j                  g d      }||    } ||   }d}t        | |      }||k(  sJ y )NFr   )u   blue¢u   green¢u   red¢u                precision    recall  f1-score   support

       blue¢       0.83      0.79      0.81        24
      green¢       0.33      0.10      0.15        31
        red¢       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
r  rY   rX   ry   rq   rz   r{   s         rZ   8test_classification_report_multiclass_with_unicode_labelr  ?  sW    'u5FFAXX:;FF^FF^F
O #662F_$$$r\   c                      t        d      \  } }}t        j                  g d      }||    } ||   }d}t        | |      }||k(  sJ y )NFr   )r  greengreengreengreengreenr  a                             precision    recall  f1-score   support

                     blue       0.83      0.79      0.81        24
greengreengreengreengreen       0.33      0.10      0.15        31
                      red       0.42      0.90      0.57        20

                 accuracy                           0.53        75
                macro avg       0.53      0.60      0.51        75
             weighted avg       0.51      0.53      0.47        75
r  r  s         rZ   <test_classification_report_multiclass_with_long_string_labelr!  U  sW    'u5FFAXX23FF^FF^F
O #662F_$$$r\   c                      g d} g d}g d}d}t        j                  t        |      5  t        | |ddg|       d d d        y # 1 sw Y   y xY w)	Nr   r   r5   r   r   r   r5   r5   r   r   zclass 0zclass 1zclass 2z6labels size, 2, does not match size of target_names, 3r   r   r5   r
  )r   r   r   r   )rY   rX   rr   r   s       rZ   =test_classification_report_labels_target_names_unequal_lengthr&  l  sB    FF4L
BC	k	-ffaV,W 
.	-	-s   AAc                      g d} g d}g d}d}t        j                  t        |      5  t        | ||       d d d        y # 1 sw Y   y xY w)Nr#  r$  r%  zaNumber of classes, 2, does not match size of target_names, 3. Try specifying the labels parameterr   r  )r   r   r   r   )rY   rX   rr   r   s       rZ   @test_classification_report_no_labels_target_names_unequal_lengthr(  v  sC    FF4L	. 
 
z	1ff<H 
2	1	1s   AAc                  ~    d} d}t        d|| d      \  }}t        d|| d      \  }}d}t        ||      }||k(  sJ y )Nr   rs  r<   r   )rR   rQ   r  r;   a                precision    recall  f1-score   support

           0       0.50      0.67      0.57        24
           1       0.51      0.74      0.61        27
           2       0.29      0.08      0.12        26
           3       0.52      0.56      0.54        27

   micro avg       0.50      0.51      0.50       104
   macro avg       0.45      0.51      0.46       104
weighted avg       0.45      0.51      0.46       104
 samples avg       0.46      0.42      0.40       104
)r   r   )r  rQ   ry   rY   rX   rz   r{   s          rZ   %test_multilabel_classification_reportr*    s_    II.	YQIAv /	YQIAvO #662F_$$$r\   c                     t        j                  g dg dg      } t        j                  g dg dg      }t        | |      dk(  sJ t        | |       dk(  sJ t        ||      dk(  sJ t        |t        j                  |            dk(  sJ t        | t        j                  |             dk(  sJ t        | t        j                  | j
                              dk(  sJ t        |t        j                  | j
                              dk(  sJ y )Nr   r   r   r   r   r<   )rA   r   r"   r   r   r@   r   s     rZ   $test_multilabel_zero_one_loss_subsetr,    s    	9i(	)B	9i(	)BR C'''R A%%%R A%%%R^^B/0A555R^^B/0A555RXXbhh/0A555RXXbhh/0A555r\   c                     t        j                  g dg dg      } t        j                  g dg dg      }t        j                  ddg      }t        | |      dk(  sJ t        | |       dk(  sJ t        ||      dk(  sJ t        |d|z
        dk(  sJ t        | d| z
        dk(  sJ t        | t        j                  | j                              dk(  sJ t        |t        j                  | j                              d	k(  sJ t        | ||
      dk(  sJ t        | d|z
  |
      dk(  sJ t        | t        j
                  |       |
      dk(  sJ t        | d   |d         t        | d   |d         k(  sJ y )Nr   r   r   r<   r   UUUUUU?r   r   r   r@  gUUUUUU?gUUUUUU?)rA   r   r   r   r@   
zeros_like
sp_hamming)r   r   ws      rZ   test_multilabel_hamming_lossr2    sm   	9i(	)B	9i(	)B
!QAB5(((B1$$$B1$$$AF#q(((AF#q(((BHHRXX./5888BHHRXX./3666Ba0H<<<AF!4	AAABMM"-Q?7JJJ1r!u%BqE2a5)AAAAr\   c                     t        j                  g d      } t        j                  g d      }d}t        j                  t        |      5  t        | |dd       d d d        t        j                  g dg dg      } t        j                  g d	g d
g      }d}t        j                  t        |      5  t        | |dd       d d d        t        j                  g d      } t        j                  g d      }d}t        j                  t        |      5  t        | |d       d d d        d}t        j                  t        |      5  t        | |d       d d d        d}t        j                  t        |      5  t        | |dd       d d d        y # 1 sw Y   AxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   y xY w)N)r   r<   r   r<   r<   z>pos_label=2 is not a valid label. It should be one of \[0, 1\]r   rN   r5   r   r   r   r   r   r   Target is multilabel-indicator but average='binary'. Please choose another average setting, one of \[None, 'micro', 'macro', 'weighted', 'samples'\].r   )r   r<   r<   r   r5   r  Target is multiclass but average='binary'. Please choose another average setting, one of \[None, 'micro', 'macro', 'weighted'\].r   zJSamplewise metrics are not available outside of multilabel classification.r   zNote that pos_label \(set to 3\) is ignored when average != 'binary' \(got 'micro'\). You may use labels=\[pos_label\] to specify a single positive class.r   r   )rA   r   r   r   r   r   r   r   )rY   rX   r   msg1msg2msg3r   s          rZ   test_jaccard_score_validationr:    sd   XXo&FXXo&FOG	z	1ffh!D 
2 XXy),-FXXy),-F	6 	
 
z	.ffh"E 
/ XXo&FXXo&F	 	
 
z	.ffh7 
/WD	z	.ffi8 
/	  
k	-ffgC 
.	-A 
2	1 
/	. 
/	. 
/	. 
.	-s<   F7F(F4G GF%(F14F= G	Gc           	         t        j                  g dg dg      }t        j                  g dg dg      }t        ||d      dk(  sJ t        ||d      dk(  sJ t        ||d      dk(  sJ t        |t        j                  |      d      dk(  sJ t        |t        j                  |      d      dk(  sJ t        |t        j                  |j
                        d      dk(  sJ t        |t        j                  |j
                        d      dk(  sJ t        j                  g dg d	g      }t        j                  g d
g dg      }t        t        ||d      d       t        t        ||d      d       t        t        ||d      d       t        t        ||dddg      d       t        t        ||dddg      d       t        t        ||d       t        j                  g d             t        j                  g dg dg      }t        j                  g d
g dg      }t        t        ||d      d       t        t        ||d      d       d}t        j                  t        |      5  t        ||dgd       d d d        d}t        j                  t        |      5  t        ||dgd       d d d        d}t        j                  t        |      5  t        t        j                  ddgg      t        j                  ddgg      d      dk(  sJ 	 d d d        d}t        j                  t        |      5  t        t        j                  ddgddgg      t        j                  ddgddgg      d      dk(  sJ 	 d d d        t        |       rJ y # 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   <xY w)Nr   r   r   r   r   r   r<   r   r   r   r   r   r   r   g?r5   r   r   )r   r   r   r   r   g      ?z	Got 4 > 2r   r   r   z
Got -1 < 0r   zXJaccard is ill-defined and being set to 0.0 in labels with no true or predicted samples.zXJaccard is ill-defined and being set to 0.0 in samples with no true or predicted labels.)rA   r   r   r   r   r@   r+   r-   r   r   r   r   r   rK  )recwarnr   r   rY   rX   r8  r9  r   s           rZ   test_multilabel_jaccard_scorer=    sS   	9i(	)B	9i(	)B
 R3t;;;R3q888R3q888R^^B/CqHHHR^^B/CqHHHRXXbhh/CqHHHRXXbhh/CqHHHXXy),-FXXy),-FffgFPffgFPffiH(SffiAG ffiAG ffd3RXX>U5V XXy),-FXXy),-FffgFPffjI7SD	z	.ffaS'B 
/D	z	.ffbT7C 
/	- 
 
,C	8"((QF8,bhhAx.@'R	
 
9	, 
 
,C	81a&1a&)*1a&1a&)*!
 	
 
9 G}}A 
/	. 
/	. 
9	8 
9	8s2    N/6N<,A OAO/N9<OOOc           	         g d}g d}g d}t               }|j                  |       |j                  |      }|j                  |      }t        t        ||      }t        t        ||      }ddgddgddgdgdgdgd g}	ddgdd	gd	dgdgdgd	gd g}
d
D ]2  }t        |	|
      D ]!  \  }}t         |||       |||             # 4 t        j                  ddgddgddgg      }t        j                  ddgddgddgg      }t               5  t	        ||d      dk(  sJ 	 d d d        t        |       rJ y # 1 sw Y   xY w)N)antr?  catr@  r?  r@  birdrA  )r@  r?  r@  r@  r?  rA  rA  r@  )r?  rA  r@  r?  rA  r@  r   r<   r5   )r   r   r   Nr   r   r   )r&   rJ   	transformr   r   zipr+   rA   r   r/   rK  )r<  rY   rX   rq   lbr   r   multi_jaccard_scorebin_jaccard_scoremulti_labels_listbin_labels_listr   m_labelb_labels                 rZ   test_multiclass_jaccard_scorerK  :  su   GFGF#F		BFF6Nf%Jf%J!-@z:F						 1v1v1vsQC!dCO 8 #$5 GGW#GGD!''B !H 8 XX1v1v1v./FXX1v1v1v./F		VVZ@AEEE 
 G}} 
	s   D88Ec                    t        dgdgd      dk(  sJ d}t        j                  t        |      5  t        ddgddgd      dk(  sJ 	 d d d        t        dgdgdd      d	k(  sJ t	        j
                  g d
      }t	        j
                  g d      }t        t        ||d      d       t        t        ||dd      d       t        |       rJ y # 1 sw Y   xY w)Nr<   r   rN   r   r   zOJaccard is ill-defined and being set to 0.0 due to no true or predicted samplesr   r   r   )r<   r   r<   r<   r   )r<   r   r<   r<   r<   r   r4  r   )r   r   r   r   rA   r   r+   rK  )r<  r   rY   rX   s       rZ   !test_average_binary_jaccard_scorerM  _  s    !qc84;;;	'  
,C	8aVaVX>#EEE 
9 !qcQASHHHXXo&FXXo&FffhGQffh!Dg G}} 
9	8s   CC c                  (   t        j                  g dg dg      } t        j                  g dg dg      }d}t        j                  t        |      5  t        | |dd      }|t        j                  d      k(  sJ 	 d d d        y # 1 sw Y   y xY w)	Nr   r   r   r   zJaccard is ill-defined and being set to 0.0 in samples with no true or predicted labels. Use `zero_division` parameter to control this behavior.r   r   r   r   r   r   )rA   r   r   r   r   r   r   )rY   rX   r   scores       rZ   (test_jaccard_score_zero_division_warningrR  v  sy     XXy),-FXXy),-F	C 
 
,C	8ffivVc**** 
9	8	8s   *BBzzero_division, expected_scorer  )r<   r   c                 H   t        j                  g dg dg      }t        j                  g dg dg      }t        j                         5  t        j                  dt
               t        ||d|       }d d d        t        j                  |      k(  sJ y # 1 sw Y   $xY w)Nr   rO  rT  r   rP  )	rA   r   r   r   rV  r   r   r   r   )r   expected_scorerY   rX   rQ  s        rZ   *test_jaccard_score_zero_division_set_valuerU    s     XXy),-FXXy),-F		 	 	"g'=>FI]
 
#
 FMM.1111 
#	"s   *BB!c                  h   t        j                  g dg dg dg      } t        j                  g dg dg dg      }t        | |d       \  }}}}t        |g dd       t        |g dd       t        |g d	d       t        |g d
d       t	        | |dd       }|}t        |g dd       t        | |d      \  }}}}t        |d       t        |d       t        |d       |J t        t	        | |dd      t        j                  |             t        | |d      \  }}}}t        |d       t        |d       t        |d       |J t        t	        | |dd      d|z  |z  d|z  |z   z         t        | |d      \  }}}}t        |d       t        |d       t        |d       |J t        t	        | |dd      t        j                  ||             t        | |d      \  }}}}t        |d       t        |d       t        |d       |J t        t	        | |dd      d       y )Nr<   r   r   r   r   r<   r   r   r  )r<   r   r<   r   r   )r   r   r   r   r5   )r   r   r   r   )r   r   r<   r   )r<   r<   r<   r<   r   r   )r   r  r<   r   r   g      ?r   g?r   r   r   r   ry  r   rA   r   r   r,   r   r+   r   r   rY   rX   rS   r   r   r   f2rc   s           rZ   +test_precision_recall_f1_score_multilabel_1r]    s$   
 XX|\<@AFXX|\<@AF0NJAq!Q a!5q9a!5q9a!7;aq1	VV!T	:BGb/15 1QJAq!Q7#3+,99FFG<bggbk
 1QJAq!Q33399FFG<	!a1q519% 1TJAq!Q7#3+,99FFJ?


2w' 1SJAq!Q33399FFINPSTr\   c                  j   t        j                  g dg dg dg      } t        j                  g dg dg dg      }t        | |d       \  }}}}t        |g dd       t        |g d	d       t        |g d
d       t        |g dd       t	        | |dd       }|}t        |g dd       t        | |d      \  }}}}t        |d       t        |d       t        |d       |J t        t	        | |dd      d|z  |z  d|z  |z   z         t        | |d      \  }}}}t        |d       t        |d       t        |d       |J t        t	        | |dd      t        j                  |             t        | |d      \  }}}}t        |d       t        |d       t        |d       |J t        t	        | |dd      t        j                  ||             t        | |d      \  }}}}t        |d       t        |d       t        |d       |J t        t	        | |dd      dd       y )NrW  rX  r  r   r   r   r<   r  r   )r   r   r   r   r5   )r   r   r   r   )r   gQ?r   r   r<   r5   r<   r   rY  )r   皙?r   r   r         ?r   r   r   g      ?r.  r   r   rd   ry  r   g&S?rZ  r[  s           rZ   +test_precision_recall_f1_score_multilabel_2rc    s'    XX|\<@AFXX|\<@AF 1NJAq!Qa!5q9a!5q9a!6:aq1	VV!T	:BGb/150QJAq!Q4 4 0199FFG<	!a1q519%
 1QJAq!Q4 5!6"99FFG<bggbk 1TJAq!Q5!5!=)99FFJ?


2w'
 1SJAq!Q 5!5!=)99FFI>r\   z%zero_division, zero_division_expected)r   r   r  c           	         t        j                  g dg dg dg      }t        j                  g dg dg dg      }t        ||d |       \  }}}}t        ||dddgd	       t        |dd
d|gd	       d}t        ||dd|gd	       t        |g dd	       t	        ||d	d |       }	|}
t        |	|dd|gd	       t        ||d|       \  }}}}t        j
                  |      rdn|}dt        j
                  |       z   }t        |d	|z   |z         t        |d|z   |z         d}t        ||       |J t        t	        ||d	d|       t        |	d              t        ||d|       \  }}}}t        |d       t        |d
       t        |d       |J t        t	        ||d	d|       d|z  |z  d|z  |z   z         t        ||d|       \  }}}}t        ||dk(  rdnd       t        |d
       d}t        |d|z         |J t        t	        ||d	d|       t        |	|
             t        ||d      \  }}}}t        |d       t        |d       t        |d       |J d }t        t	        ||d	d|       |d	       y )!NrX  rW  r  r\  r_  rP  r   r   r5   r   r   r   r<   r`  r   r   r   ra  r   r         ?g?ry  r   rg   r   r   r   r   g@r   r   rd   gZd;O?)rA   r   r   r,   r   r  r+   r0   )r   zero_division_expectedrY   rX   rS   r   r   r   
expected_fr\  rc   value_to_sumvalues_to_averageexpected_results                 rZ   7test_precision_recall_f1_score_with_an_empty_predictionrl    s    XX|\<@AFXX|\<@AF 1MJAq!Q a"8#sC!H!La#sC1G!H!LJa*gq*!EqIaq1	VV!T	WBGb:tQ
"CQG0}JAq!Q !781>TL*@!AABA,0AABC,.2CCD J:&99'	
 	B%	 1}JAq!Q 5!30199FG=	
 
!a1q519%	 1
-JAq!Q $:a$?5SI3M->>?99FJm	
 	B(	 1SJAq!Q 5!5!5!99OFI]	
 		r\   r   )r   r   r   r   c                    t        j                  d      }t        j                  |      }t        t        |||| |      \  }}}}t        t
        ||| ||      }	|J t        j                  |      r#||||	fD ]  }
t        j                  |
      rJ  y t        |      }t        ||       t        ||       t        ||       t        |	t        |             y )Nrh   r   r   r   r   re  )	rA   r   r/  r.   r   r   r  rw   r+   )r   r   r   rY   rX   rS   r   r   r   fbetar}   s              rZ   "test_precision_recall_f1_no_labelsrq  y  s     XXgF]]6"F#'#JAq!Q #E 99 
xx!Q&F88F### '-(M=)=)=)u]34r\   c                    t        j                  d      }t        j                  |      }t        }t	        j
                  t              5   |||| d      \  }}}}d d d        t        d       t        d       t        d       J t	        j
                  t              5  t        ||| d      }d d d        t        d       y # 1 sw Y   oxY w# 1 sw Y   "xY w)Nrn  r   r  r   )	rA   r   r/  r   r   r   r   r+   r   )	r   rY   rX   funcrS   r   r   r   rp  s	            rZ   1test_precision_recall_f1_no_labels_check_warningsrt    s    XXgF]]6"F*D	,	-&&'D
1a 
. 11199	,	-FFG#F 
. q! 
.	- 
.	-s   
C
%C
CCc                 ~   t        j                  d      }t        j                  |      }t        t        ||d d|       \  }}}}t        t
        ||dd |       }t        j                  |       } t        || | | gd       t        || | | gd       t        || | | gd       t        |g dd       t        || | | gd       y )Nrn  r   ro  re  r5   rO  )rA   r   r/  r.   r   r   r  r,   )r   rY   rX   rS   r   r   r   rp  s           rZ   /test_precision_recall_f1_no_labels_average_nonerv    s    XXgF]]6"F $'#JAq!Q VV#t=E JJ}-Ma-!NPQRa-!NPQRa-!NPQRaA.em]M%RTUVr\   c                     t        j                  d      } t        j                  |       }t        j                  t
              5  t        | |d d      \  }}}}d d d        t        g dd       t        g dd       t        g dd       t        g dd       t        j                  t
              5  t        | |dd       }d d d        t        g dd       y # 1 sw Y   xY w# 1 sw Y   %xY w)Nrn  r<   r  rO  r5   rY  )	rA   r   r/  r   r   r   r   r,   r   )rY   rX   rS   r   r   r   rp  s          rZ   4test_precision_recall_f1_no_labels_average_none_warnrx    s    XXgF]]6"F 
,	-4FDq

1a 
.
 aA.aA.aA.aA.	,	-FFDA 
. eY2 
.	- 
.	-s   C6C*C'*C3c            	         t         t        }} dD ]d  }d}t        j                  ||      5   | g dg d|       d d d        d}t        j                  ||      5   | g dg d|       d d d        f d}t        j                  ||      5   | t	        j
                  d	d
gd	d
gg      t	        j
                  d	d
gd
d
gg      d       d d d        d}t        j                  ||      5   | t	        j
                  d	d
gd
d
gg      t	        j
                  d	d
gd	d
gg      d       d d d        d}t        j                  ||      5   | t	        j
                  d	d	gd	d	gg      t	        j
                  d
d
gd
d
gg      d       d d d        d}t        j                  ||      5   | t	        j
                  d
d
gd
d
gg      t	        j
                  d	d	gd	d	gg      d       d d d        d}t        j                  ||      5   | d	d	gddgd       d d d        d}t        j                  ||      5   | ddgd	d	gd       d d d        t        j                  d      5 }t        j                  d       t        d
d
gd
d
gd       d}t        |j                         j                        |k(  sJ d}t        |j                         j                        |k(  sJ d}t        |j                         j                        |k(  sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   "xY w# 1 sw Y   ixY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y   OxY w# 1 sw Y   +xY w# 1 sw Y   y xY w)NNr   r   zPrecision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.r   r   r<   r<   r5   r   zRecall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.zPrecision is ill-defined and being set to 0.0 in samples with no predicted labels. Use `zero_division` parameter to control this behavior.r<   r   r   zRecall is ill-defined and being set to 0.0 in samples with no true labels. Use `zero_division` parameter to control this behavior.Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.r   zRecall is ill-defined and being set to 0.0 due to no true samples. Use `zero_division` parameter to control this behavior.r   rN   Tr   alwaysF-score is ill-defined and being set to 0.0 due to no true nor predicted samples. Use `zero_division` parameter to control this behavior.)r   r   r   r   rA   r   r   r   rV  r   popr   )r   r1  r   r   r   s        rZ   test_prf_warningsr    s@   *,BqA. 	 \\!3'iG4 ( 	 \\!3'iG4 ('! /*	  
as	#	"((QFQF#
$bhhAA/?&@)T 
$	  
as	#	"((QFQF#
$bhhAA/?&@)T 
$
	  
as	#	"((QFQF#
$bhhAA/?&@'R 
$	  
as	#	"((QFQF#
$bhhAA/?&@'R 
$
	  
as	#	1a&2r(H- 
$	  
as	#	2r(QFH- 
$ 
	 	 	-h''AAI 	
 6::<''(C/// 	 6::<''(C/// 	 6::<''(C///- 
.	-K (' (' 
$	# 
$	# 
$	# 
$	# 
$	# 
$	# 
.	-sl   LL'>L4.>M>M,>MM(<M5*B&NL$	'L1	4L>MMM%(M25M?Nc           	         t         }dD ]*  }t        |g dg d||        t        |g dg d||        , t        |t        j                  ddgddgg      t        j                  ddgddgg      d|        t        |t        j                  ddgddgg      t        j                  ddgddgg      d|        t        |t        j                  ddgddgg      t        j                  ddgddgg      d|        t        |t        j                  ddgddgg      t        j                  ddgddgg      d|        t        |ddgd	d	gd
|        t        |d	d	gddgd
|        t	        j
                  d      5 }t	        j                  d       t        ddgddgd
|        t        |      dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nrz  r   r{  rP  r<   r   r   r   r   rN   Tr   r~  )r   r.   rA   r   r   r   rV  rt   )r   r   r   r   s       rZ   )test_prf_no_warnings_if_zero_division_setr  Y  s    	(A.y)WM	
 	y)WM	
 / 	
1a&1a&!"
1a&1a&!"# 	
1a&1a&!"
1a&1a&!"# 	
1a&1a&!"
1a&1a&!"# 	
1a&1a&!"
1a&1a&!"# 	Aq6B8X] 	B8aVX] 
	 	 	-h''FQFHM	
 6{a 
.	-	-s   <9F??Gc           	         t        t        t        j                  ddgddgg      t        j                  ddgddgg      d|        t	        j
                  d      5 }t	        j                  d       t        t        j                  ddgddgg      t        j                  ddgddgg      d|        | dk(  r(t        |j                         j                        d	k(  sJ t        |      dk(  sJ t        ddgddg       | dk(  r(t        |j                         j                        d	k(  sJ d d d        y # 1 sw Y   y xY w)
Nr<   r   r   rP  Tr   r~  r   r}  )r.   r!   rA   r   r   r   rV  r   r  r   rt   r   r   s     rZ   test_recall_warningsr    s9   
1a&1a&!"
1a&1a&!"# 
	 	 	-h'HHq!fq!f%&HHq!fq!f%&'		
 F"FJJL(() ." "" v;!###aVaV$F"FJJL(() ." ""+ 
.	-	-s   CD77E c           	         t        j                  d      5 }t        j                  d       t        t	        j
                  ddgddgg      t	        j
                  ddgddgg      d|        | dk(  r(t        |j                         j                        d	k(  sJ t        |      dk(  sJ t        ddgddg       | dk(  r(t        |j                         j                        d	k(  sJ d d d        t        t        t	        j
                  ddgddgg      t	        j
                  ddgddgg      d|        y # 1 sw Y   PxY w)
NTr   r~  r<   r   r   rP  r   r|  )r   r   rV  r    rA   r   r   r  r   rt   r.   r  s     rZ   test_precision_warningsr    s;   		 	 	-h'HHq!fq!f%&HHq!fq!f%&'		
 F"FJJL(() ." "" v;!###AA'F"FJJL(() ." ""+ 
.6 
1a&1a&!"
1a&1a&!"#7 
.	-s   CD77E c           
         t        j                  d      5 }t        j                  d       t        t	        t
        d      fD ]  } |t        j                  ddgddgg      t        j                  ddgddgg      d| 	       t        |      dk(  sJ  |t        j                  ddgddgg      t        j                  ddgddgg      d| 	       t        |      dk(  sJ  |t        j                  ddgddgg      t        j                  ddgddgg      d| 	       | d
k(  r*t        |j                         j                        dk(  rJ t        |      dk(  rJ  	 d d d        y # 1 sw Y   y xY w)NTr   r~  r5   r   r<   r   r   rP  r   r  )r   r   rV  r   r   r   rA   r   rt   r   r  r   )r   r   rQ  s      rZ   test_fscore_warningsr    sp   		 	 	-h'! <=E1a&1a&)*1a&1a&)*+	 v;!###1a&1a&)*1a&1a&)*+	 v;!###1a&1a&)*1a&1a&)*+	 &

,,- 2- -- 6{a'''? > 
.	-	-s   D6E.E.!E..E7c                  x   g d} g d}d}t        j                  g dg dg dg      }t        j                  g dg dg dg      }d}| ||f|||ffD ]Y  \  }}}t        t        t        t        t        d	
      fD ]/  }	t        j                  t        |      5   |	||       d d d        1 [ y # 1 sw Y   >xY w)N)r<   r5   r   r   )r<   r5   r   r<   r6  r   r   r   r/  r5  r5   r   r   )
rA   r   r    r!   r   r   r   r   r   r   )
	y_true_mc	y_pred_mcmsg_mc
y_true_ind
y_pred_indmsg_indrY   rX   r   r}   s
             rZ   'test_prf_average_binary_data_non_binaryr  	  s    II	1 
 9i;<J9i;<J	<  
Iv&	Z) 
 Ka(	
F z5vv& 65
	  65s   
B00B9c                     d} d}d}d}d}d}| t        j                  g dg dg d	g      f| t        j                  d
dgdd
gddgg      f|g df|g df|g df|t        j                  dgdgdgg      f|t        j                  d
gdgdgg      f|t        j                  dgdgdgg      f|t        j                  d
dgddgddgg      f|t        j                  ddgddgddgg      fg
}i | | f| ||f|||f||| fd || fd ||f|||fd ||fd ||fd | |fd ||fd ||fd ||fd ||fd | |fd ||fd ||fd ||fd | |fd ||fd ||fd i}t        |d      D ]  \  \  }}	\  }
}	 |||
f   }|t	        j
                  t              5  t        |	|       d d d        ||
k7  rCdj                  ||
      }t	        j
                  t        |      5  t        |	|       d d d        |||| fvsdj                  |      }t	        j
                  t        |      5  t        |	|       d d d        t        |	|      \  }}}||k(  sJ |j                  d      r"|j                  dk(  sJ |j                  dk(  s@J t        |t        j                  |	             t        |t        j                  |             t	        j
                  t              5  t        |	d d |       d d d         ddg}	d d!g}d"}t	        j
                  t        |      5  t        |	|       d d d        y # t        $ r ||
|f   }Y w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   	xY w# 1 sw Y   xY w# 1 sw Y   y xY w)#Nzmultilabel-indicatorr  rN   
continuouszmulticlass-multioutputzcontinuous-multioutputr   r   r   r   r<   )r5   r   r<   )r   rf  r   r5   r   r   rf  r   r   rS  g?g      @)r  z@Classification metrics can't handle a mix of {0} and {1} targetsr   z{0} is not supported
multilabelcsrr   )r<   r5   )r   r5   r   )r5   )r   r5   zYou appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead - the MultiLabelBinarizer transformer can convert to this format.)rA   r   r   KeyErrorr   r   r   r#   format
startswithr-   squeeze)INDMCBINCNTMMCMCNEXAMPLESEXPECTEDtype1r   type2r   r  r   merged_typey1outy2outr   s                     rZ   test__check_targetsr  *	  sf    !C	B
C
C
"C
"C 
bhh	9i89:	bhhAAA/01	Y	i	o	RXXsQC!o&'	bhhaS1#'(	bhhuse,-.	bhhAAA/01	bhhc
S#Jc
;<=H	c
C	R" 
c
C 
S	4	
 
c
D 
b	2 
c
D 
c
D 
c
D 
c
D 
S	4 
c
D 
c
D 
c
D  
c
D!" 
S	4#$ 
c
D%& 
c
D	c
D	S	4	c
D-H2 %,HQ$?$? [eR	.u-H z*r2& + ~--3VE5-A  ]]:W="2r* >= b#.4;;EBGzA&r2. BA )7r2(>%K(***%%l3||u,,,||u,,,"5"**R.9"5"**R.9z*r#2w+ +*A %@H )	B
B	3  
z	-r2 
.	-S  	.u-H	. +* >= BA +* 
.	-sN   2L2M	M%M#M0M=2MM	M	M 	#M-	0M:	=Nc                  <    ddg} ddg}t        | |      d   dk(  sJ y )Nr   r<   r   r  )r#   r^  s     rZ   Atest__check_targets_multiclass_with_both_y_true_and_y_pred_binaryr  	  s.    VFWF&&)!,<<<r\   c                      t        j                  g d      } t        j                  g d      }t        | |      dk(  sJ t        j                  g d      } t        j                  g d      }t        | |      dk(  sJ y )N)r   r<   r<   r   )g      !r   rf  g333333ӿr   )r   r5   r5   r   )rA   r   r   rY   pred_decisions     rZ   test_hinge_loss_binaryr  	  sf    XXn%FHH34Mfm,777XXl#FHH34Mfm,777r\   c            
         t        j                  g dg dg dg dg dg dg      } t        j                  g d      }t        j                  d| d   d   z
  | d   d   z   d| d   d   z
  | d   d	   z   d| d	   d	   z
  | d	   d
   z   d| d
   d   z
  | d
   d	   z   d| d   d
   z
  | d   d	   z   d| d   d	   z
  | d   d
   z   g      }t        j                  |dd |       t        j                  |      }t	        ||       |k(  sJ y )N
ףp=
?(\ſ(\gGz)HzGgGz׿Q޿r  333333r  RQؿr  )r  r  r  r  gzGgHzGgHzGѿgQ?)r   r<   r5   r<   r   r5   r<   r   r5   r   r   r   outrA   r   clipr   r   )r  rY   dummy_lossesdummy_hinge_losss       rZ   test_hinge_loss_multiclassr  	  sJ   HH((((((	
	M XX()F88a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99	
	L GGL!T|4ww|,fm,0@@@@r\   c                      t        j                  g d      } t        j                  g dg dg dg dg      }d}t        j                  t        |      5  t        | |       d d d        y # 1 sw Y   y xY w)N)r   r<   r5   r5   )gRQ?g rh?g(\gffffffr  r  zDPlease include all labels in y_true or pass labels as third argumentr   )rA   r   r   r   r   r   )rY   r  error_messages      rZ   :test_hinge_loss_multiclass_missing_labels_with_labels_noner  	  s`    XXl#FHH((((		
M 	O  
z	76=) 
8	7	7   A,,A5c            
         t        j                  g d      } t        j                  g d      }d}t        j                  t        t        j                  |            5  t        | |       d d d        t        j                  ddgddgddgddgddgddgddgg      }g d	}d
}t        j                  t        t        j                  |            5  t        | ||       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N)r5   r<   r   r<   r   r<   r<   )r   r<   r5   r<   r   r5   r<   zThe shape of pred_decision cannot be 1d arraywith a multiclass target. pred_decision shape must be (n_samples, n_classes), that is (7, 3). Got: (7,)r   r  r   r<   r5   r   zThe shape of pred_decision is not consistent with the number of classes. With a multiclass target, pred_decision shape must be (n_samples, n_classes), that is (7, 3). Got: (7, 2))rY   r  rq   )rA   r   r   r   r   reescaper   )rY   r  r  rq   s       rZ   <test_hinge_loss_multiclass_no_consistent_pred_decision_shaper  	  s     XX+,FHH23M	  
z=)A	B&> 
C HHq!fq!fq!fq!fq!fq!fqRSfUVMF	  
z=)A	B&fM 
C	B 
C	B 
C	Bs   C+C7+C47D c            	         t        j                  g dg dg dg dg dg      } t        j                  g d      }t        j                  g d      }t        j                  d| d   d   z
  | d   d   z   d| d   d   z
  | d   d   z   d| d   d   z
  | d   d	   z   d| d	   d   z
  | d	   d   z   d| d
   d   z
  | d
   d	   z   g      }t        j                  |dd |       t        j                  |      }t	        || |      |k(  sJ y )Nr  皙r  r  r  r  )r   r<   r5   r<   r5   )r   r<   r5   r   r<   r   r5   r   r   r  r   r  r  rY   rq   r  r  s        rZ   .test_hinge_loss_multiclass_with_missing_labelsr  	  s5   HH(((((	
M XXo&FXXl#F88a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99	
L GGL!T|4ww|,fmF;?OOOOr\   c            	         t        j                  g dg dg dg dg dg      } t        j                  g d      }t        j                  g d      }t        j                  d| d   d   z
  | d   d   z   d| d   d	   z
  | d   d   z   d| d	   d	   z
  | d	   d   z   d| d
   d   z
  | d
   d	   z   d| d   d	   z
  | d   d   z   g      }t        j                  |dd |       t        j                  |      }t	        t        || |      |       y )N)r  r  r  )g333333ÿr  r  )r  r  r  )r  g(\gzGڿ)r   r5   r5   r   r5   r   r<   r   r5   r   r   r  r   )rA   r   r  r   r+   r   r  s        rZ   @test_hinge_loss_multiclass_missing_labels_only_two_unq_in_y_truer  	  s6   
 HH!!!!!	
M XXo&FXXi F88a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99	
L GGL!T|4ww|,6=8:Jr\   c            
         g d} g dg dg dg dg dg dg}t        j                  d|d   d   z
  |d   d   z   d|d   d   z
  |d   d   z   d|d   d   z
  |d   d	   z   d|d	   d   z
  |d	   d   z   d|d
   d	   z
  |d
   d   z   d|d   d   z
  |d   d	   z   g      }t        j                  |dd |       t        j                  |      }t	        | |      |k(  sJ y )N)r  r  r  r  whiter  r  r  r  r  r<   r   r5   r   r   r   r  r  )rY   r  r  r  s       rZ   +test_hinge_loss_multiclass_invariance_listsr  
  s6    ?F$$$$$$M 88a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99a ##mA&6q&99	
	L GGL!T|4ww|,fm,0@@@@r\   c            	         g d} t        j                  ddgddgddgddgddgd	d
gg      }t        | |      }t        j                  t	        j
                  t        j                  |       dk(  |d d df                }t        ||       g d} g dg dg dg}t        | |d      }t        |d       | dz  } |dz  }t        | |d      }t        |d       g d} ddgddgddgg}t        j                  t              5  t        | |       d d d        g d} ddgddgddgddgg}t        | |      }t        |d       ddg} ddgddgg}t        j                  ddgddgg      }d}t        j                  t        |       5  t        | |       d d d        ddgddgddgg}d!}t        j                  t        |       5  t        | |       d d d        t        j                  t        j                  |d d df                }t        | |ddg"      }t        ||       g d#} g d$g dg d%g}t        | |g d&"      }t        |t        j                  d              y # 1 sw Y   VxY w# 1 sw Y   xY w# 1 sw Y   xY w)'Nnor  r  yesr  r  r   r   rf   {Gz?Gz?r   rb  gMbP?g+?r  r<   rB  r   r   r   )r   r   r   )r   r   r   TrI  g躕ʀ?r5   Fg.L`@r   r   r   r   hamspamr  r  CT?r   r   zly_true contains only one label \(2\). Please provide the true labels explicitly through the labels argument.r   zDFound input variables with inconsistent numbers of samples: \[3, 2\]r   r   )r   r   r   r   r   r   rA  )rA   r   r   r   r	   logpmfr*   r   r   r   log)	rY   rX   loss	loss_truer   	error_strtrue_log_losscalculated_log_lossy_score2s	            rZ   test_log_lossr  ;
  s   4FXX
sc3Z$SzD$<%QVXF FF#D))"((6*:e*CVAqD\RSSID)$ F@FFFd3DD)$ aKF
aKFFFe4DD-( FCj3*sCj1F	z	"  
# ,FCj3*sCj3*=FFF#DD)$ VFCj3*%Fhhc
S#J/0G	C  
z	3  
4 Cj3*sCj1FWI	z	3  
4
 WWRVVGAqDM233M"67Aq6B'7 F/BHFHY7DD266#;,'I 
#	"$ 
4	3
 
4	3s$    I!I. I:!I+.I7:Jc                     t        j                  ddg|       }t        j                  ddg|       }t        ||      }t        j                  |      sJ y)zCheck the behaviour internal eps that changes depending on the input dtype.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/24315
    r   r<   r  N)rA   r   r   isfinite)rL  rY   rX   r  s       rZ   test_log_loss_epsr  |
  sJ     XXq!fE*FXXq!fE*FFF#D;;tr\   c                     t        j                  g d      }t        j                  ddgddgddgddgg|       }t        j                  t        d	
      5  t        ||       ddd       y# 1 sw Y   yxY w)zGCheck that log_loss raises a warning when y_pred values don't sum to 1.r  r   r   r   r   r   r   r  z$The y_pred values do not sum to one.r   N)rA   r   r   r   r   r   )rL  rY   rX   s      rZ   'test_log_loss_not_probabilities_warningr  
  sa     XXl#FXXSzC:SzC:FeTF	k)O	P  
Q	P	Pr  r/  r   r   c                 L    t        | |      t        j                  d      k(  sJ y)z6Check that log_loss returns 0 for perfect predictions.r   N)r   r   r   r^  s     rZ   !test_log_loss_perfect_predictionsr  
  s"     FF#v}}Q'7777r\   c                  H   t        j                  g d      } t        j                  ddgddgddgddgg      }t        t        fg}	 ddlm}m} |j                  ||f       |D ]-  \  }} ||        ||      }}t        ||      }	t        |	d       / y # t        $ r Y >w xY w)	Nr  r   r   r   r   r   )	DataFramer  r  )
rA   r   r)   r   r  r  r|  ImportErrorr   r*   )
y_try_prtypesr  r  TrueInputTypePredInputTyperY   rX   r  s
             rZ   test_log_loss_pandas_inputr  
  s    8823D88c3Z#sc3Z#sDED]+,E,fi() ).$}&t,mD.A'i(	 ).  s   B 	B! B!c                     t        j                  g d      } t        j                  g d      }t        j                  | |z
        dz  t	        |       z  }t        t        | |       d       t        t        | |      |       t        t        d| z   |      |       t        t        d| z  dz
  |      |       t        j                  t              5  t        | |dd         d d d        t        j                  t              5  t        | |dz          d d d        t        j                  t              5  t        | |dz
         d d d        t        j                  g d      } t        j                  g d      }d	}t        j                  t        |
      5  t        | |       d d d        t        t        dgdg      d       t        t        dgdg      d       t        t        dgdg      d       t        t        dgdgd      d       t        t        dgdgd      d       y # 1 sw Y   IxY w# 1 sw Y   %xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   r<   r<   r   r<   r<   r   r   rf   r   r   gffffff?r5   r   r   r<   )r   r<   r5   r   )r   r   r   r   zMOnly binary classification is supported. The type of the target is multiclassr   r   r   g{Gz?r   r  foobarr   )
rA   r   r   normrt   r+   r   r   r   r   )rY   rX   
true_scorer  s       rZ   test_brier_score_lossr  
  s   XX()FXX56FVf_-2S[@J(8#>(8*E(vv>
K(Va@*M	z	", 
#	z	"#. 
#	z	"#. 
# XXl#FXX*+FW  
z	7( 
8 ("u5t<(!se4d;(!se4d;(%3%5I4P(%3%5I4P- 
#	"	"	"	"	" 
8	7s0   H'H42II'H14H>IIc                      d} t        j                  t        |       5  t        g dg d       d d d        y # 1 sw Y   y xY w)Nz%y_pred contains classes not in y_truer   rO  r   )r   r   r   r   r   s    rZ   #test_balanced_accuracy_score_unseenr  
  s+    
1C	k	-	95 
.	-	-s	   8Azy_true,y_pred)r   r   r   r   )r   r   r   r   )r   r   r   r   c                 T   t        | |dt        j                  |             }t               5  t	        | |      }d d d        t        j                  |      k(  sJ t	        | |d      }t	        | t        j                  | | d               }|||z
  d|z
  z  k(  sJ y # 1 sw Y   exY w)Nr   r   T)adjustedr   r<   )r!   rA   uniquer/   r   r   r   	full_like)rY   rX   macro_recallbalancedr  chances         rZ   test_balanced_accuracy_scorer	  
  s      		&0AL 
	*66: 
 v}}\2222&vvEH$VR\\&&)-LMF6)a&j9999 
	s   BB'r   r   ))FTr  )r   r   )zeroonec                 8   t         j                  j                  d      }d|d   }}|j                  ||d      }| t        u r|j                  |      }n|j                         } | |||      }t        j                  t        j                  |            rJ y)	zCheck that the metric works with different types of `pos_label`.

    We can expect `pos_label` to be a bool, an integer, a float, a string.
    No error should be raised for those types.
    *   rj  r   T)r  replacer  r   N)	rA   rE   rF   choicer   uniformr  anyr  )r}   r   rT   rQ   r   rY   rX   r  s           rZ   *test_classification_metric_pos_label_typesr  
  s    * ))


#Cwr{yIZZiZ>F!!),FFi8Fvvbhhv&''''r\   zy_true, y_pred, expected_scorer   r   c                 P    t        | |d      t        j                  |      k(  sJ y)zCheck the behaviour of `zero_division` for f1-score.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/26965
    r   r  N)r   r   r   )rY   rX   rT  s      rZ   2test_f1_for_small_binary_inputs_with_zero_divisionr    s$     FF#6&--:WWWWr\   scoringr  r5   )r   r   c                     t        j                  d      \  }}t        dd      j                  ||      }t	        |||| dd       y)	aZ  Check that we validate `np.nan` properly for classification metrics.

    With `n_jobs=2` in cross-validation, the `np.nan` used for the singleton will be
    different in the sub-process and we should not use the `is` operator but
    `math.isnan`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27563
    r   )r;   r   )	max_depthr;   r5   r  )r  n_jobserror_scoreN)r
   make_classificationr(   rJ   r%   )r  rO   rP   
classifiers       rZ   9test_classification_metric_division_by_zero_nan_validatonr  %  sC    & ''Q7DAq'!!DHHANJJ1gaWUr\   c                  ^   t        j                  g d      } t        j                  g d      }d}t        j                  t        |      5  t        | |       ddd       d}t        j                  t        |      5  t        | ||       ddd       y# 1 sw Y   >xY w# 1 sw Y   yxY w)	z)Check the message for future deprecation.r  r  z$y_prob was deprecated in version 1.5r   )y_probNz/`y_prob` and `y_proba` cannot be both specified)r  y_proba)rA   r   r   r   FutureWarningr   r   r   )rY   rX   rc  	error_msgs       rZ   )test_brier_score_loss_deprecation_warningr"  >  s     XX()FXX56F5H	m8	4	
 
5 BI	z	3	
 
4	3 
5	4 
4	3s   B?B#B #B,c            	         g d} g d}t        j                  ddgddgddgddgdd	gd
dgg      }t        j                  ddgddgddgddgddgddgg      }t        | |      }t        | |d      }t        | |d      }d||z  z
  }|t	        j
                  |      k(  sJ t        j                  g d      }|d d j                         |j                         z  |d d df<   |dd  j                         |j                         z  |d d df<   t        | ||      }t        | ||d      }t        | ||d      }d||z  z
  }|t	        j
                  |      k(  sJ t        j                  ddgddgddgddgddgddgg      }t        | |      }d|cxk  rdk  sJ  J t        ||      }	|	t	        j
                  |      k(  sJ t        j                  ddgddgddgddgddgddgg      }t        | |      }|dk  sJ t        ||      }	|	t	        j
                  |      k(  sJ g d} t        j                  ddgddgddgddgddgddgg      }t        | |      }|dk(  sJ t        ||      }	|	dk(  sJ g d} g d}t        j                  ddgddgddgddgg      }t        | |      }|dk(  sJ t        ||      }	|	dk(  sJ g d}t        | ||      }
|
dk(  sJ g d} g d}t        j                  g d g d g d!g d"g      }t        | |      }d|cxk  rdk  sJ  J t        | ||      }d|cxk  rdk  sJ  J t        j                  g d#g d$g d"g d%g      }t        | |      }|dk  sJ t        | ||      }|dk  sJ y )&Nr_  r  r   rf   r   r   r   gffffff?g?r  r  r^  F)rY   rX   rJ  r<   )r5   r<   r   r   r   r<   r   r   )rY   rX   r3  )rY   rX   r3  rJ  r   r   r   r   rb  )r   r<   r<   r<   )r  r  r  r  )r5   r5   r5   r5   r@  )highr$  lowneutral)gffffff?r   r   r   )r   r   r   r   )r   r   r   )r   r   r   r  r  )rA   r   r$   r   r   r   rU  )rY   y_true_stringrX   y_pred_nulld2_scorelog_likelihoodlog_likelihood_nulld2_score_truer3  d2_score_stringd2_score_with_sample_weights              rZ   test_d2_log_loss_scorer/  T  s   F;MXX#J#J#J#J4L4L	
	F ((#J#J#J#J#J#J	
	K !v>HVFeLN"&PUV)<<<Mv}}]3333 HH/0M%bq)--/-2C2C2EEK1%ab)--/-2C2C2EEK1 fMH #	N ##	 )<<<Mv}}]3333 XX#J#J#J#J#J#J	
	F !0HC'v>OfmmH5555 XX#J#J#J#J4L#J	
	F !0Ha<<'v>OfmmH5555  FXX#J#J#J#J#J#J	
	F !0Hq=='v>Oa F/MXXd|dD\D$<$NOF 0Hq=='v>Oa M"3m# '!+++ 0F(MXX		
F !0HC }MHCXX		
F !0Ha<< }MHa<<r\   c                     g d} ddgddgddgg}d}t        j                  t        |      5  t        | |       d	d	d	       g d
} ddgddgddgg}g d}d}t        j                  t        |      5  t        | ||       d	d	d	       g d} g dg dg}d}t        j                  t        |      5  t        | |       d	d	d	       dg} ddgg}d}t        j                  t
        |      5  t        | |       d	d	d	       g d} ddgddgddgg}d}t        j                  t        |      5  t        | |       d	d	d	       g d} dg}ddgddgddgg}d}t        j                  t        |      5  t        | ||       d	d	d	       y	# 1 sw Y   QxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)zPTest that d2_log_loss_score raises the appropriate errors on
    invalid inputs.r   r   r   r   r   r   z#contain different number of classesr   Nr   z(number of classes in labels is differentr   )r   r   r   )r   r   r   r?  r<   zscore is not well-definedr   r   zy_true contains only one labelz.The labels array needs to contain at least two)r   r   r   r$   r   r   )rY   rX   errrq   s       rZ   test_d2_log_loss_score_raisesr2    s    FCj3*sCj1F
/C	z	-&&) 
.
 FCj3*sCj1FF
4C	z	-&&8 
. F/F
+C	z	-&&) 
. SFCj\F
%C	,C	8&&) 
9 FCj3*sAh/F
*C	z	-&&) 
.
 FSFCj3*sAh/F
:C	z	-&&8 
.	-O 
.	- 
.	- 
.	- 
9	8 
.	- 
.	-sG   F	2F2F#,F/-F;1G	FF #F,/F8;GG)NF)r  r   	functoolsr   	itertoolsr   r   r   numpyrA   r   scipyr   scipy.spatial.distancer   r0  scipy.statsr	   sklearnr
   r   sklearn.datasetsr   sklearn.exceptionsr   sklearn.metricsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   sklearn.metrics._classificationr#   r$   sklearn.model_selectionr%   sklearn.preprocessingr&   r'   sklearn.treer(   sklearn.utils._mockingr)   sklearn.utils._testingr*   r+   r,   r-   r.   r/   sklearn.utils.extmathr0   sklearn.utils.fixesr1   r2   sklearn.utils.validationr3   r[   r~   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r+  r=  rC  rQ  rZ  r]  rd  rh  ro  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,  r2  r:  r=  rK  rM  rR  rU  r]  rc  rl  rq  rt  rv  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  float16r  r  r  r  r  r  r	  r  r  r  r"  r/  r2  r   r\   rZ   <module>rI     s   	   2 2    8 ! ! ; 5     . N 3 @ / 0  . > 7)(`>DBW< 61a*@A B T{aVUOi=OP))(7
D  $ *J *JZ M M,>6  BHH####	
	
 .=	
(9)(9  BHH#####	
 	
*;+*;
 =*	= OF .9.9%S : :%SPT< +%%;&) 
 #"((#56""((#56 A	
 #"((#56""((#56 I	
 #"((#56""((#56 :	
 #"((#56""((#56 I	
 #"((#56""((#56 O	
E),Z*[,Z*  #"((?3""((?3
<		
**"2>4
 1a.9)aS1#JR+AB!$	' C :' )aS1#JR+AB!$	 C$2N RF5p c5\2U 3UB7(t $ST, U,0"(".& 	;<
QAB 
'(  88 taVY'-M  %%6 "AB0 C0"%4%$%(%6 %F%,%.XI % %<6B(%DPJZ"J.+ 868:LM	2 N	2 ?U ?UD = =@ +&&266266"23[	 
[| !%$MN1a.9!5 : O &!5H $MN" O"& 1a.9W :W@38e0P 1a.9<  :< ~ 61a*@A! B!H 61a*@A" B"J 61a*@A#( B#(L'>_D=8A6*"N8P4@A8>(B 2::rzz2::"FG
 H
 2::rzz2::"FG! H! 	I	aVaVaV,-	Y	95688)$ QF6 	34	34	34
:
: #&' C(($ $	1a&	8288QF+S1	1a&	8288QF+S1	1a&	8288QF+S1	1a&	8288QF+S1	XX HBFF3Karvv>O266:L7	VV 
,Sl.9r\   