
    e!h(                       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@ d dlAmBZB d dlCmDZDmEZE d dlFmGZG ddZHd ZId ZJe
j                  j                  ddd de	j                  g      d        ZNe
j                  j                  dd gdfd dgdfg ddfg      d        ZOd  ZPd! ZQe
j                  j                  d"      d#        ZSe
j                  j                  d"      d$        ZTe
j                  j                  d"      d%        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 d0 e	j                  g d,g d,g d1g d1g d2g      fg d3g d4fg      d5        ZYd6 ZZd7 Z[d8 Z\d9 Z]e
j                  j                  d:eD      e
j                  j                  d;eE      d<               Z^d= Z_e
j                  j                  d>g d?      d@        Z`dA ZadB Zbe
j                  j                  dC e	j                  g dD       e	j                  g dD      dEdFf e	j                  g dG       e	j                  g dG      dEdHf e	j                  g dG       e	j                  g dD      dEdIf e	j                  g dG       e	j                  g dJ      dEdKf e	j                  g dD       e	j                  g dG      dEdLfg      dM        Zce
j                  j                  dN e	j                  g dO       e	j                  g dP      dEdQfg      dR        ZddS ZedT Zfe
j                  j                  dd de	j                  g      e
j                  j                  dUd gd gfg      e
j                  j                  dVe" ee#dW      e,e-g      dX                      Zge
j                  j                  dUd gd gfg      e
j                  j                  dVe" ee#dW      e,e-g      dY               ZhdZ Zid[ Zjd\ Zkd] Zle
j                  j                  d^d_d`g      da        Zmdb Zne
j                  j                  dcg dd      de        Zodf Zpdg Zqdh Zre
j                  j                  dig djfdkdlgdmfgdndogp      dq        Zse
j                  j                  drdd dgg dfg dsp      dt        Ztdu Zue
j                  j                  dvg dw      dx        Zvdy Zwdz Zxd{ Zyd| Zzd} Z{d~ Z|d Z}d Z~d Ze
j                  j                  d"      d        Zd Zd Zd Zd Zd Zd Zd Ze
j                  j                  dddg      d        Ze
j                  j                  d"      d        Ze
j                  j                  d"      d        Ze
j                  j                  d"      e
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	j@                  e	jB                  e	jD                  g      d        Ze
j                  j                  dve	j@                  e	jB                  e	jD                  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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aranger2   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                q/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/sklearn/metrics/tests/test_classification.pymake_predictionrZ   :   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rL   rM   g7Mo?gUUUUUU?ghQ?   )	precisionrecallf1-scoresupportUUUUUU?gc1Ƹ?g433333?   g)k??$I$I?   gCFQ?gc?gƢ?K   ra   r_   r`   rb   g?gD~WG?g]3p?)setosa
versicolor	virginica	macro avgaccuracyweighted avgT)labelstarget_namesoutput_dictrn   rj   r_   rm   rb   )r
   r<   rZ   r   r@   rA   lenrq   keys
isinstancefloatr+   rC   )irisrX   rW   _expected_reportreportkeymetrics           rY   ,test_classification_report_dictionary_outputr}   j   s   D'UCFFA
 -)*	
 -*+	
 -)+	
 ++'	
 '++(	
5 OD #yyT../0&&F ;;=O002222 W*fSk5111#;/#"6666#;##%)=)B)B)DDDD)#. W#OC$8$@&+fBUVWW 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)rX   rW   rr           r   ri   )rn   rm   ro   rn   )r   r@   nanru   dictrt   rv   r+   )rz   ry   r{   r|   s       rY   2test_classification_report_output_dict_empty_inputr      s%   ""RTJFff	
 ff	
O fd###;;=O002222 W*fSk5111#;/#"6666#;##%)=)B)B)DDDD)#. W#OC$8$@&+fBUVWW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   rr   r   r;   z7Use `zero_division` parameter to control this behavior.)warningscatch_warningsr   rs   strmessage)r   rX   rW   r   itemmsgs         rY   0test_classification_report_zero_division_warningr      s    $oFF		 	 	- 
F-T	
 F"v;?"? 0Oc$,,////0 :
 
 
s   AA4#A44A=zlabels, show_micro_avgTr   r;   r4   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)rp   rr   z	micro avgrn   Nr   )rp   show_micro_avgrX   rW   rz   s        rY   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   )r@   arrayr   logical_notzerosr?   y1y2s     rY   .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 ddifD ]  }t	        j
                         5  t	        j                  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       d d d         y # 1 sw Y   xY w)NTrM   averageg\(\?g333333?r4   g)\(?g(\?皙?gRQ?   r   rM   errorbeta      )rZ   r   r,   r-   r   r   simplefilterr    r!   r   r+   r   )rX   rW   rx   rR   rfskwargspsrsfss              rY   %test_precision_recall_f1_score_binaryr      sG   't4FFA 1NJAq!Qa$q1a$q1a$q1q2r(#
 	8,- $$& 	!!'* :6:B%b$2ff77B%b$2&&3F3B%b$2FF==f=R"$r	B7	 		 	s   <BDD	z1ignore::sklearn.exceptions.UndefinedMetricWarningc                     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   rv   pytestapprox r[   rY   +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   r4   )r;   r;   r   r4   r   classes)r   r;   r4   r   r   rp   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   rp   )      ?r;   竪?)r'   r@   rA   	enumerater!   r,   meanr+   r   raises
ValueErrorr   r   )rX   rW   
y_true_bin
y_pred_binr=   iactualr   rR   r   r   rx   s               rY   $test_precision_recall_f_extra_labelsr   3  s    FF		!=J		!=JVz:67D( FFff_dS!";VD ff_gV!"''*C"DfM 8 	G)#QVVOWUVVD'J	( 7 ]]:& 	WZ		!gV	W]]:& 	JryyQ/?	 	 XXy),-FXXy),-F0	1a&JAq!Q !Q+RXX6G-HI	W 	W	 	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;   r4   r   )r;   r   r   r   r   r   r;   r   rp   r   r   r   r   r   UUUUUU?r   r   )r   r   r   )r'   r@   rA   r   r   r!   r,   r+   )	rX   rW   r   r   r=   r   	recall_13
recall_allr   s	            rY   &test_precision_recall_f_ignored_labelsr   a  s     FF		!=J		!=JVz:67D( MFFL&&!QH	\66$G
!3*i.EFOYw-GH3Yz5RSGYw%?@ 6 	MGW-G1LLLL	MM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`.)r4   r4   r;   r;   r4   r   r   r;   r4   r;   )r4   r   r;   ffffff?皙?皙?皙?333333?r   r   r   r   r   r   r   )r   r   r   )r   r   r   z.multiclass-multioutput format is not supportedmatchr4   	pos_labelN)r@   r   r   r   r   r   )rX   y_scoreerr_msgs      rY   -test_average_precision_score_non_binary_classr   x  s    XX	
	F hh	
	G ?G	z	1 >1=> > >s   ,BBzy_true, y_scorer   r   r;   r4   r   r   r   r   )r   r   r   r   r;   r;   r;   r;   r;   r;   r;   )r   r   r   r   r   333333?r   re   re   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   rX   r   s     rY   -test_average_precision_score_duplicate_valuesr     s    8 #673q888r[   )r4   r4   r;   r;   r   )r   r   r   )r   r   r   r   )r   r   r   c                 &    t        | |      dk7  sJ y )Nr   r   r   s     rY   (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;   r4   r4   r4   r   r   r   )r   warnsUserWarningr   r   s    rY   (test_precision_recall_f_unused_pos_labelr     sB    
	  
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   r4   decimal=
ףp=?)r   r-   flattenr@   sqrtr   r,   )rX   rW   cmtpfpfntnnumdentrue_mccmccs              rY   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[   rZ   r   rX   rW   rx   r  rO   s        rY   test_confusion_matrix_binaryr    sR    't4FFA8 	&	!Q#a&	!F#;qCF#;<	!#;
   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-   )rX   rW   r  s      rY   r  z5test_multilabel_confusion_matrix_binary.<locals>.test  s7    (82"a1b' 2b!Wq"g4FGHr[   r  r  s        rY   'test_multilabel_confusion_matrix_binaryr    sS    't4FFAI 	&	!Q#a&	!F#;qCF#;<	!#;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   r4      )021r   r4   r;   r   )r%  r&  r'  3)r   r4   r;   r   rh   r   r  )rX   rW   string_typer  rp   s        rY   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        rY   +test_multilabel_confusion_matrix_multiclassr+    sT    'u5FFA
6 	&	!Q#a&	!F#;qCF#;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   )r4   r;   r   r;   r   r4   T
samplewiser   )rp   r2  )sample_weightr2  r   r   )r@   r   r   r-   )r,  r-  rX   rW   
y_true_csr
y_pred_csr
y_true_csc
y_pred_cscr3  real_cmtruespreds
y_true_tmp
y_pred_tmpr  s                  rY   +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;   r4   r3  zshould be a 1d arrayr;   r4   r   )r4   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)r4   r;   r   r;   r   r4   )r@   r   r   r   r   r   )rX   rW   r   s      rY   'test_multilabel_confusion_matrix_errorsrC  P  s   XXy)Y78FXXy)Y78F 
z)J	K J#FF1a&IJ	z)?	@ 
#F9i*K	

 7G	z	1 A#FFB4@A6G	z	1 @#FFA3?@ 
z)=	> K#IyTJK 8G	z	1 T#Y	$:Y	<RST T+J J
 
A A@ @K K
T TsH   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   r4   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_testrW   r  s         rY   test_confusion_matrix_normalizerQ  n  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         @r   rF  r   )r   sumr   r   r   r   r   RuntimeWarning)rP  rW   cm_truecm_preds       rY   ,test_confusion_matrix_normalize_single_classrX    s    %F%Fvv@G;;=FMM#.... 
	 	 	" Eg~6"66VDE ;;=FMM#....		 	 	" ;g~66:; ;E E; ;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  rW   s     rY   "test_confusion_matrix_single_labelr[    s:    FF	k)F	G )() ) )s	   :Azparams, warn_msg)r   r   r   r   r   r   rX   rW   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     rY   test_likelihood_ratios_warningsrb    s3    b 
k	2 *)&)* * *   1:zparams, err_msg)r   r;   r   r;   r   r;   r;   r   r   r4   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r_  )r   r   r   r   )r`  r   s     rY   test_likelihood_ratios_errorsrf    s2    $ 
z	1 *)&)* * *rc  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  r4   
   r  g?g_B{	%?g-q=)rtolr      r   r   r@  gUUUUUU@gqq?)r@   r   r   r*   r-   r   r   )rX   rW   posnegr3  s        rY   test_likelihood_ratiosrm    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;   <   rg   rh  2   gʡE?r   r  r4   r   r   r   .   ,   4          g??g+?r7   weightsg_vO?	quadraticg#?)r@   r   r   r+   append)r   r   kappas      rY   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[   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.
    r   r   N)r   r   r   r@   isnan)r|   rX   rW   r   results        rY   !test_zero_division_nan_no_warningr    ss     
	 	 	" Eg&mDE 
xxxx&&&E E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|   rX   rW   r  s       rY   test_zero_division_nan_warningr  7  s@     
,	- >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   r4   rg   sizer   r;   rh  )r@   rD   rE   randintr+   r   corrcoef)rS   rX   rW   s      rY   -test_matthews_corrcoef_against_numpy_corrcoefr  J  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   r4   rg   r  r@  rh  )r@   rD   rE   r  randr   rs   rT  ranger
  r   r+   )rS   rX   rW   r3  CNkmlcov_ytypr   gcov_ytytcov_ypyp
mcc_jurmanmcc_ourss                   rY   %test_matthews_corrcoef_against_jurmanr  T  s;    ))


"C[[AB['F[[AB['FHHRLM}EAAA 1X	
 	
1X	
 1X		
  adGa1g!Q$!AqD' 11	
1	
1	
H  1X	
 	
  adGKKMffuQxL!qLAQ!Va1gLgLMN	
H vv 1X	
 	
  adGKKMffuQxL!qLAQ!Va1gLg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   r4   rg   r  r   r   r   r   r   rZ  r   )r;   r   r;   r;   r   r;   r;   r;   r   r;   r;   r;   r;   r;   r;   r;   r   r;   r;   r;   )r;   r;   r;   r   r   r;   r;   r;   r;   r   r;   r;   r;   r   r;   r;   r;   r   r;   r;   r;   rh  r@  )r@   rD   rE   r  r+   r   r'   wherers   r   r   AssertionError)rS   r   rX   
y_true_invy_true_inv2y_1y_2masks           rY   test_matthews_corrcoefr  {  ss   
))


"C.1kk!QRk.HIQ!Vc$IFI )&&93? 5;;qc#s*;J;)&*=rB #s<K((;S1K)&+>C ),EsK )&3%#f+2EFL GC
FC)#s3S9 38qcBhD 
~	& R-c3dKSQR R; J <.R R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   rg   r  r   )r   r   r;   r;   r4   r4   )r4   r4   r   r   r;   r;   g      )r;   r;   r   r   r   r   ii  r   )r   r   r   r   	r   r;   r4   r   r;   r4   r   r;   r4   )	r;   r;   r;   r4   r4   r4   r   r   r   )r   r   r;   r;   r4   rd  r;   r;   r;   r;   r   r@  r   r   r;   r;   r   r   )	r@   rD   rE   ordr  chrr+   r   r
  )rS   ord_a	n_classesr   rX   
y_pred_bad
y_pred_minrW   r  r  r3  s              rY   !test_matthews_corrcoef_multiclassr    s[   
))


"CHEI&)kk!YRk&HIc%!)nIF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   rs   r@   r
  )rX   rW   conf_matrixtrue_pos	false_pos	false_negr  pos_rateactivitymcc_numeratormcc_denominators              rY   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_predrX   rW   rS   s        rY   	random_ysz2test_matthews_corrcoef_overflow.<locals>.random_ys  sN    ""8,#!2!28!<s!BCC##v~r[   r   r   )r   r   rS  )r@   rD   rE   repeatr+   r   )r  r  r  arrrX   rW   rS   s         @rY   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?r4   )HzG?g
ףp=
?re   )Q?333333?r  )r^   rd   rg   r;   r   r   g(\?r   r   gRQ?r   gGz?r   r   r   r   r(  r   )r  g=
ףp=?r  )r  re   r   )r  r  r  )r^   rg   rd   )rZ   r   r,   r-   r    r!   r   r   r   r   r   )
rX   rW   rx   rR   r   r   r   r   r   r   s
             rY   )test_precision_recall_f1_score_multiclassr    sT   '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	" 8VVY78	z	" 434	z	" AFFIC@A 1y$JAq!Q a!3Q7a!3Q7a!3Q7q,'!; ;8 84 4A A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;   r4   )rp   warn_forr   r   r   r;   r;   r   )r@   r   r   r-   )r   rX   rW   rR   r   r   r   s          rY   ;test_precision_refcall_f1_score_multilabel_unordered_labelsr  2  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   rw  )r@   r   r   r   bincountr   )
rX   rW   r   r   r   rx   rR   r   r   rb   s
             rY   .test_precision_recall_f1_score_binary_averagedr  A  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;   r4   r   r;   r4   )r4   r   r;   r;   r4   r   r   r   r   r4   r   )r@   seterrr   r+   r    r!   r   )old_error_settingsrX   rW   s      rY   test_zero_precision_recallr  R  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   r4   r$  r^   )rZ   r   r-   r@   max)rX   rW   rx   r  extra_labels        rY   .test_confusion_matrix_multiclass_subset_labelsr  c  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   )rZ   r   r   r   r   )rp   r   rX   rW   rx   s        rY   test_confusion_matrix_errorr  v  sD     (u5FFA	z	1 878 8 8s   AArp   )NonerM   
multiclassc                     | rt        |       nd}t        j                  ||ft              }t	        g g |       }t        ||       y )Nr   rL  r   )rs   r@   r   rC   r   r-   )rp   expected_n_classesexpectedr  s       rY   *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    )r@   onesrs   r   rL  int64bool_int32uint64astypefloat32float64objectfulluint32)rO   weightr  rL  s       rY   test_confusion_matrix_dtyper    s|   AWWSV_F	!Q	B88rxx((BHHbii0 $a&--E-2RSxx288###$ **bjj$7 &a&--E-2RSxx2::%%%&
 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   importorskipr@   r   Seriesr   r-   )rL  pd	y_ndarrayrX   y_predictedoutputexpected_outputs          rY   %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
rp   rq   r
   r<   rZ   r   r@   rA   rs   rq   rw   rX   rW   rx   ry   rz   s         rY   %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;   r4   r4   r4   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   )rX   rW   ry   rz   s       rY   .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<   rZ   r   r  s         rY   :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   )rp   rq   digitsr  r  s         rY   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   rq   rZ   r@   r   r   )rX   rW   rx   ry   rz   s        rY   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  rX   rW   rx   rp   ry   rz   s         rY   8test_classification_report_multiclass_with_unicode_labelr  9  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         rY   <test_classification_report_multiclass_with_long_string_labelr  O  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   r4   r   r   r   r4   r4   r   r   zclass 0zclass 1zclass 2z6labels size, 2, does not match size of target_names, 3r   r   r4   r  )r   r   r   r   )rX   rW   rq   r   s       rY   =test_classification_report_labels_target_names_unequal_lengthr"  f  sO    FF4L
BC	k	- XffaV,WX X X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   )rX   rW   rq   r   s       rY   @test_classification_report_no_labels_target_names_unequal_lengthr$  p  sP    FF4L	. 
 
z	1 Iff<HI I Is   AAc                  ~    d} d}t        d|| d      \  }}t        d|| d      \  }}d}t        ||      }||k(  sJ y )Nr   rq  r;   r   )rQ   rP   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  rP   rx   rX   rW   ry   rz   s          rY   %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;   )r@   r   r"   r   r   r?   r   s     rY   $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?)r@   r   r   r   r?   
zeros_like
sp_hamming)r   r   ws      rY   test_multilabel_hamming_lossr.    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   rM   r4   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   r4   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   )r@   r   r   r   r   r   r   r   )rX   rW   r   msg1msg2msg3r   s          rY   test_jaccard_score_validationr6    s   XXo&FXXo&FOG	z	1 Effh!DE XXy),-FXXy),-F	6 	
 
z	. Fffh"EF XXo&FXXo&F	 	
 
z	. 8ffh78WD	z	. 9ffi89	  
k	- DffgCD DAE EF F8 89 9D D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?r4   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.)r@   r   r   r   r   r?   r+   r-   r   r   r   r   r   rK  )recwarnr   r   rX   rW   r4  r5  r   s           rY   test_multilabel_jaccard_scorer9    sw   	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	. CffaS'BCD	z	. DffbT7CD	- 
 
,C	8 
"((QF8,bhhAx.@'R	

	, 
 
,C	8 
1a&1a&)*1a&1a&)*!
 	

 G}}AC CD D
 

 
s2    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<  birdr=  )r<  r;  r<  r<  r;  r=  r=  r<  )r;  r=  r<  r;  r=  r<  r   r;   r4   )r   r   r   Nr   r   r   )r&   rI   	transformr   r   zipr+   r@   r   r.   rK  )r8  rX   rW   rp   lbr   r   multi_jaccard_scorebin_jaccard_scoremulti_labels_listbin_labels_listr   m_labelb_labels                 rY   test_multiclass_jaccard_scorerG  4  s   GFGF#F		BFF6Nf%Jf%J!-@z:F						 1v1v1vsQC!dCO 8  #$5 G 	GW#GGD!''B	 XX1v1v1v./FXX1v1v1v./F		 FVVZ@AEEEF G}}F F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   rM   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   r0  r   )r   r   r   r   r@   r   r+   rK  )r8  r   rX   rW   s       rY   !test_average_binary_jaccard_scorerI  Y  s    !qc84;;;	'  
,C	8 FaVaVX>#EEEF !qcQASHHHXXo&FXXo&FffhGQffh!Dg G}}F Fs   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   )r@   r   r   r   r   r   r   )rX   rW   r   scores       rY   (test_jaccard_score_zero_division_warningrN  p  s     XXy),-FXXy),-F	C 
 
,C	8 +ffivVc****+ + +s   *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   rK  r   r   rL  )	r@   r   r   r   r   r   r   r   r   )r   expected_scorerX   rW   rM  s        rY   *test_jaccard_score_zero_division_set_valuerQ    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   r4   )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   rw  r   r@   r   r   r,   r   r+   r   r   rX   rW   rR   r   r   r   f2rb   s           rY   +test_precision_recall_f1_score_multilabel_1rY    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 )NrS  rT  r  r   r   r   r;   r  r   )r   r   r   r   r4   )r   r   r   r   )r   gQ?r   r   r;   r4   r;   r   rU  )r   皙?r   r   r         ?r   r   r   g      ?r*  r   r   rc   rw  r   g&S?rV  rW  s           rY   +test_precision_recall_f1_score_multilabel_2r_    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 )!NrT  rS  r  rZ  r[  rL  r   r   r4   r   r   r   r;   r\  r   r   r   r]  r   r         ?g?rw  r   rf   r   r   r   r   g@r   r   rc   gZd;O?)r@   r   r   r,   r   r  r+   r/   )r   zero_division_expectedrX   rW   rR   r   r   r   
expected_frX  rb   value_to_sumvalues_to_averageexpected_results                 rY   7test_precision_recall_f1_score_with_an_empty_predictionrh    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        j                         5  t        j
                  d       t        |||| |      \  }}}}t        ||| ||      }	d d d        J t        j                  |      r#	fD ]  }
t        j                  |
      rJ  y t        |      }t        |       t        |       t        |       t        	t        |             y # 1 sw Y   xY w)Nrg   r   r   r   r   r   ra  )r@   r   r+  r   r   r   r   r   r  rv   r+   )r   r   r   rX   rW   rR   r   r   r   fbetar|   s              rY   "test_precision_recall_f1_no_labelsrm  s  s	    XXgF]]6"F		 	 	" 
g&4'

1a '

" 99 
xx!Q& 	$F88F###	$-(M=)=)=)u]34=
 
s   ;DD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)Nrj  r   r  r   )	r@   r   r+  r   r   r   r   r+   r   )	r   rX   rW   funcrR   r   r   r   rl  s	            rY   1test_precision_recall_f1_no_labels_check_warningsrp    s    XXgF]]6"F*D	,	- E&&'D
1aE 11199	,	- GFFG#FG q!E EG Gs   
C
%C
CCc                    t        j                  d      }t        j                  |      }t        j                         5  t        j
                  d       t        ||d d|       \  }}}}t        ||dd |       }d d d        t        j                  |       } t        | | | gd       t        | | | gd       t        | | | gd       t        g dd       t        | | | gd       y # 1 sw Y   nxY w)Nrj  r   r   rk  ra  r4   rK  )
r@   r   r+  r   r   r   r   r   r  r,   )r   rX   rW   rR   r   r   r   rl  s           rY   /test_precision_recall_f1_no_labels_average_nonerr    s    XXgF]]6"F 
	 	 	" 
g&4'

1a Fd-

 JJ}-Ma-!NPQRa-!NPQRa-!NPQRaA.em]M%RTUV)
 
s   ;C''C0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)Nrj  r;   r  rK  r4   rU  )	r@   r   r+  r   r   r   r   r,   r   )rX   rW   rR   r   r   r   rl  s          rY   4test_precision_recall_f1_no_labels_average_none_warnrt    s    XXgF]]6"F 
,	- 
4FDq

1a

 aA.aA.aA.aA.	,	- BFFDAB eY2
 
B B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;   r4   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   rM   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   r@   r   r   r   r   r   popr   )r   r-  r   r   r   s        rY   test_prf_warningsr}    s   *,BqA. 5 	 \\!3' 	5iG4	5 	 \\!3' 	5iG4	5 	5!5*	  
as	# U	"((QFQF#
$bhhAA/?&@)TU	  
as	# U	"((QFQF#
$bhhAA/?&@)TU
	  
as	# S	"((QFQF#
$bhhAA/?&@'RS	  
as	# S	"((QFQF#
$bhhAA/?&@'RS
	  
as	# .	1a&2r(H-.	  
as	# .	2r(QFH-. 
	 	 	- 0h''AAI 	
 6::<''(C/// 	 6::<''(C/// 	 6::<''(C///-0 0K	5 	5	5 	5U UU US SS S. .. .0 0sl   LL'>L4.>M>M,>MM(<M5*B&NL$	'L1	4L>MMM%(M25M?Nc           	         t        j                         5  t        j                  d       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|        d d 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   bxY w# 1 sw Y   y xY w)Nr   rv  r   rw  rL  r;   r   r   r   r   rM   Tr   rz  )r   r   r   r   r@   r   rs   )r   r   r   s      rY   )test_prf_no_warnings_if_zero_division_setr  W  s   		 	 	" 2
g& 3 	G+9g] ,9g]	 	(HHq!fq!f%&HHq!fq!f%&'		
 	(HHq!fq!f%&HHq!fq!f%&'		
 	(HHq!fq!f%&HHq!fq!f%&'		
 	(HHq!fq!f%&HHq!fq!f%&'		
 	(FRHhm	
 	(Hq!fhm	
a2
h 
	 	 	-  h''FQFHM	
 6{a   i2
 2
h   s   E-G# 9G/#G,/G8c           	         t        j                         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 d 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   xY w# 1 sw Y   y xY w)Nr   r;   r   r   rL  Tr   rz  r   ry  )
r   r   r   r!   r@   r   r   r|  r   rs   r   r   s     rY   test_recall_warningsr    ss   		 	 	" 
g&HHq!fq!f%&HHq!fq!f%&'		

 
	 	 	- h'HHq!fq!f%&HHq!fq!f%&'		
 F"FJJL(() ." "" v;!###aVaV$F"FJJL(() ." ""+ 
 
 s   AE$
CE0$E-0E9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        j                         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 d d        y # 1 sw Y   }xY w# 1 sw Y   y xY w)NTr   rz  r;   r   r   rL  r   rx  r   )
r   r   r   r    r@   r   r   r|  r   rs   r  s     rY   test_precision_warningsr    ss   		 	 	- h'HHq!fq!f%&HHq!fq!f%&'		
 F"FJJL(() ." "" v;!###AA'F"FJJL(() ." ""+6 
	 	 	" 
g&HHq!fq!f%&HHq!fq!f%&'		

 
7 6
 
s   CE$AE0$E-0E9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   rz  r4   r   r;   r   r   rL  r   r{  )r   r   r   r   r   r   r@   r   rs   r   r|  r   )r   r   rM  s      rY   test_fscore_warningsr    s~   		 	 	- "(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;   r4   r   r   )r;   r4   r   r;   r2  r   r   r   r/  r1  r4   r   r   )
r@   r   r    r!   r   r   r   r   r   r   )
	y_true_mc	y_pred_mcmsg_mc
y_true_ind
y_pred_indmsg_indrX   rW   r   r|   s
             rY   'test_prf_average_binary_data_non_binaryr  	  s    II	1 
 9i;<J9i;<J	<  
Iv&	Z)  '
 Ka(	
 	'F z5 'vv&' '	'	'' 's   
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  rM   
continuouszmulticlass-multioutputzcontinuous-multioutputr   r   r   r   r;   )r4   r   r;   )r   rb  r   r4   r   r   rb  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;   r4   )r   r4   r   )r4   )r   r4   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.)r@   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                     rY   test__check_targetsr  +	  s    !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./ / )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	.' '+ +/ /, , 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     rY   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   rb  g333333ӿr   )r   r4   r4   r   )r@   r   r   rX   pred_decisions     rY   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;   r4   r;   r   r4   r;   r   r4   r   r   r   outr@   r   clipr   r   )r  rX   dummy_lossesdummy_hinge_losss       rY   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;   r4   r4   )gRQ?g rh?g(\gffffffr  r  zDPlease include all labels in y_true or pass labels as third argumentr   )r@   r   r   r   r   r   )rX   r  error_messages      rY   :test_hinge_loss_multiclass_missing_labels_with_labels_noner  	  si    XXl#FHH((((		
M 	O  
z	7 *6=)* * *   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)r4   r;   r   r;   r   r;   r;   )r   r;   r4   r;   r   r4   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;   r4   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))rX   r  rp   )r@   r   r   r   r   reescaper   )rX   r  r  rp   s       rY   <test_hinge_loss_multiclass_no_consistent_pred_decision_shaper  	  s     XX+,FHH23M	  
z=)A	B ?&>? HHq!fq!fq!fq!fq!fq!fqRSfUVMF	  
z=)A	B N&fMN N? ?N Ns   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;   r4   r;   r4   )r   r;   r4   r   r;   r   r4   r   r   r  r   r  r  rX   rp   r  r  s        rY   .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   r4   r4   r   r4   r   r;   r   r4   r   r   r  r   )r@   r   r  r   r+   r   r  s        rY   @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   r4   r   r   r   r  r  )rX   r  r  r  s       rY   +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   re   {Gz?Gz?r   r^  gMbP?g+?r  r;   rB  r   r   r   )r   r   r   )r   r   r   TrI  g躕ʀ?r4   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  )r@   r   r   r   r	   logpmfr*   r   r   r   log)	rX   rW   loss	loss_truer   	error_strtrue_log_losscalculated_log_lossy_score2s	            rY   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 ! ! Cj3*sCj1FWI	z	3 ! !
 WWRVVGAqDM233M"67Aq6B'7 F/BHFHY7DD266#;,'I! !$! !
! !s$    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)r@   r   r   isfinite)rL  rX   rW   r  s       rY   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)r@   r   r   r   r   r   )rL  rX   rW   s      rY   'test_log_loss_not_probabilities_warningr  
  si     XXl#FXXSzC:SzC:FeTF	k)O	P ! ! ! !r  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     rY   !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  )
r@   r   r)   r  r  r  rz  ImportErrorr   r*   )
y_try_prtypesr  r  TrueInputTypePredInputTyperX   rW   r  s
             rY   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   re   r   r   gffffff?r4   r   r   r;   )r   r;   r4   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   )
r@   r   r   normrs   r+   r   r   r   r   )rX   rW   
true_scorer  s       rY   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 )() ("u5t<(!se4d;(!se4d;(%3%5I4P(%3%5I4P-- -/ // /) )s0   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   rK  r   )r   r   r   r   r   s    rY   #test_balanced_accuracy_score_unseenr  
  s4    
1C	k	- 6	956 6 6s	   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!   r@   uniquer.   r   r   r   	full_like)rX   rW   macro_recallbalancedr  chances         rY   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.
    *   rh  r   T)r  replacer  r   N)	r@   rD   rE   choicer   uniformr  anyr  )r|   r   rS   rP   r   rX   rW   r  s           rY   *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   )rX   rW   rP  s      rY   2test_f1_for_small_binary_inputs_with_zero_divisionr    s$     FF#6&--:WWWWr[   scoringr~  r4   )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:   r4   r  )r  n_jobserror_scoreN)r
   make_classificationr(   rI   r%   )r  rN   rO   
classifiers       rY   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)r@   r   r   r   FutureWarningr   r   r   )rX   rW   ra  	error_msgs       rY   )test_brier_score_loss_deprecation_warningr  ?  s     XX()FXX56F5H	m8	4 
	

 BI	z	3 
	

 

 

 
s   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   re   r   r   r   gffffff?g?r  r  r\  F)rX   rW   rJ  r;   )r4   r;   r   r   r   r;   r   r   )rX   rW   r3  )rX   rW   r3  rJ  r   r   r   r   r^  )r   r;   r;   r;   )r  r  r  r  )r4   r4   r4   r4   r@  )highr   lowneutral)gffffff?r   r   r   )r   r   r   r   )r   r   r   )r   r   r   r  r  )r@   r   r$   r   r   r   rT  )rX   y_true_stringrW   y_pred_nulld2_scorelog_likelihoodlog_likelihood_nulld2_score_truer3  d2_score_stringd2_score_with_sample_weights              rY   test_d2_log_loss_scorer+  U  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   )rX   rW   errrp   s       rY   test_d2_log_loss_score_raisesr.    s    FCj3*sCj1F
/C	z	- *&&)*
 FCj3*sCj1FF
4C	z	- 9&&89 F/F
+C	z	- *&&)* SFCj\F
%C	,C	8 *&&)* FCj3*sAh/F
*C	z	- *&&)*
 FSFCj3*sAh/F
:C	z	- 9&&89 9O* *9 9* ** ** *9 9sG   F	2F2F#,F/-F;1G	FF #F,/F8;GG)NF)r  r   	functoolsr   	itertoolsr   r   r   numpyr@   r   scipyr   scipy.spatial.distancer   r,  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.   sklearn.utils.extmathr/   sklearn.utils.fixesr0   r1   sklearn.utils.validationr2   rZ   r}   r   markparametrizer   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r   r  r  r+  r=  rC  rQ  rX  r[  rb  rf  rm  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.  r6  r9  rG  rI  rN  rQ  rY  r_  rh  rm  rp  rr  rt  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+  r.  r   r[   rY   <module>rF     sm   	   2 2    8 ! ! ; 5     . N 3 @ / 0  . > 7)(`>DBW< 61a*@A B T{aVUOi=OP))(7D PQ R$ PQ*J R*JZ PQM R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> 1a.9)aS1#J<8!$	' 9 :' )aS1#J<8!$	 9$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 PQ% R%<6B(%DPJZ"J.+ 868:LM	2 N	2 PQ?U R?UD PQ= R=@ PQ+&&266266"23[	 R
[| !%$MN1a.9"5 : O &"5J $MN" O"& 1a.9 W : WF38e0P 1a.9:  :: z 61a*@A$ B$N 61a*@A$
 B$
N 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[   