
    e!h                       d dl Z d dlm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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)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d d	l?m@Z@ d d
lAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL d dlMmNZN d dlOmPZP d dlQmRZRmSZSmTZT d dlUmVZVmWZWmXZXmYZYmZZZm[Z[ d dl\m]Z]m^Z^m_Z_ d dl`maZa d dlbmcZcmdZd i de)de*de/de0de-de2de+ded ee7d      de;de<d ee1d        d!e.d"e,d# ee1d$       d% eed$       d&ed'eiZei d(ed)ed* eed+,      d- eed./      d0ed1d2 d3e3d4 ee3d+5      d6e"d7e>d8 ee>d./      d9e$d:e6d;e8d<e d= ee!d>?      d@ ee!dA?      i dBe(dC ee!dDdAE      dF ee dDG      dH ee!dDd>E      dI ee6dDG      dJ ee8dDG      dK ee$dDG      dL ee!dMdAE      dN ee dMG      dO ee!dMd>E      dP ee6dMG      dQ ee8dMG      dR ee$dMG      dS ee!dTdAE      dU ee dTG      dV ee!dTd>E      dW ee6dTG       ee8dTG       ee$dTG       ee!dXdAE       ee dXG       ee!dXd>E       ee6dXG       ee8dXG       ee$dXG      edY	ZfdZ Zge:eged[Zhi d\ed]e&d^e'd_ ee'd./      d`e#daedbe9dc ee9dDG      dd ee9dXG      de ee9dMG      df ee9dTdgh      di ee9dDdgh      dj ee9dTdkh      dl ee9dDdkh      dm ee9dAn      doedp eedDG       eedXG       eedMG      e%e4ee=dqZi ej       Zkekj                  ei       ekj                  ef       ekj                  ee       ekj                  eh       h drZmh dsZnemj                  en      Zph dtZqh duZrh dvZsh dwZth dxZuh dyZvh dzZwh d{Zxh d|Zyh d}Zzh d~Z{h dZ|ddhZ}d Z~d Zd Zej                  j                  d eey            d        Zej                  j                  d eez            d        Zej                  j                  d e eek      epz
              d        Zd Zej                  j                  d e eek      epz
              d        Zej                  j                  d e eef      epz
              d        Zej                  j                  dei      d        Zd dge
j                  e
j                  gfd dge
j                  e
j                  gfd dge
j                  e
j                  gfd dge
j                  dgfd dge
j                  dgfgZej                  j                  d eeij                         eej                                     ej                  j                  de      d               Zej                  j                  defj                               ej                  j                  dee
j                  dd>gg dfe
j                  dd>gg dfgz         d               Zej                  j                  defj                               d        Zd Zd Zej                  j+                  d      ej                  j                  d e eek      epz
   eei      z
              d               Zej                  j+                  d      ej                  j                  d eexewz              d               Zej                  j                  d eex            d        Zej                  j                  d eex            d        Zej                  j+                  d      ej                  j                  de]      d               Zej                  j                  d eew            d        Zej                  j                  d eeu            d        Zej                  j                  d eeu            d        Zej                  j                  d eeuj=                  ew                  d        Zd Zd Zej                  j                  d eeq            d        Zej                  j                  d eeqerz              d        Zej                  j                  d eeq            d        Zd Zej                  j                  d eeq            d        Zd Zej                  j                  d e eek      j=                   eee            e{z
              d        Zej                  j                  d e eek       eee      z
  e{z
  emz
              d        Zej                  j                  d e eek       eee      z
  e{z
  epz
              d        Zej                  j                  d eewevz  exz  e{z
              d        Zd Zej                  j                  d eewd3hz
              d        Zej                  j                  d eevexz              d        Zej                  j                  d e eei      epz
              d        Zej                  j                  def      d        Zej                  j                  ded+fed+fe d.f ee!d?      d.fe$d.fe5d+fe6d.fe8d.fe:d+fg	      ej                  j                  deeg      d               Zd Zd Zd Zd Zd Zd Zd Zi eeeege eeege3eeege>eeege1eg ee1d       eg ee1d       ege7eegeEege*eege/eege0eegeegeHege.egeBege,ege)ege+eegeCegeIegeDegeFegeGegeJegeKege;eege<eegeLegiZefdZej                  j                  d eT             ej                  j                  d e             d               Zej                  j                  dddg      ej                  j                  d eek            dń               ZdƄ Zy)    N)partial)	signature)chainpermutationsproduct)config_context)make_multilabel_classification)UndefinedMetricWarning),accuracy_scoreaverage_precision_scorebalanced_accuracy_scorebrier_score_losscohen_kappa_scoreconfusion_matrixcoverage_errord2_absolute_error_scored2_pinball_scored2_tweedie_score	dcg_score	det_curveexplained_variance_scoref1_scorefbeta_scorehamming_loss
hinge_lossjaccard_score%label_ranking_average_precision_scorelabel_ranking_losslog_lossmatthews_corrcoef	max_errormean_absolute_errormean_absolute_percentage_errormean_gamma_deviancemean_pinball_lossmean_poisson_deviancemean_squared_errormean_squared_log_errormean_tweedie_deviancemedian_absolute_errormultilabel_confusion_matrix
ndcg_scoreprecision_recall_curveprecision_scorer2_scorerecall_scoreroc_auc_score	roc_curveroot_mean_squared_errorroot_mean_squared_log_errortop_k_accuracy_scorezero_one_loss)_average_binary_score)additive_chi2_kernelchi2_kernelcosine_distancescosine_similarityeuclidean_distanceslinear_kernelpaired_cosine_distancespaired_euclidean_distancespolynomial_kernel
rbf_kernelsigmoid_kernel)LabelBinarizer)shuffle)_atol_for_type_convert_to_numpy)yield_namespace_device_dtype_combinations)_array_api_for_testsassert_allcloseassert_almost_equalassert_array_equalassert_array_lessignore_warnings)COO_CONTAINERSparse_version
sp_version)type_of_target)_num_samplescheck_random_stater!   r"   r'   r(   r%   r*   r#   r   r/   variance_weighted)multioutputr3   r4   mean_normal_deviance)powerr&   r$   mean_compound_poisson_deviancegffffff?r   r   r   r   r    adjusted_balanced_accuracy_scoreT)adjustedunnormalized_accuracy_scoreF	normalizeunnormalized_confusion_matrixnormalized_confusion_matrixc                      t        | i |j                  d      t        | i |j                  d      d d t        j                  f   z  S )Nfloat   axis)r   astypesumnpnewaxis)argskwargss     i/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/sklearn/metrics/tests/test_common.py<lambda>rl      sM    $)&)009
D
+F
+
/
/Q
/
72::
F	G     (unnormalized_multilabel_confusion_matrix/unnormalized_multilabel_confusion_matrix_sample)
samplewiser   r6   unnormalized_zero_one_lossr   r.   r0   r   f2_score   )beta
f0.5_score      ?matthews_corrcoef_scoreweighted_f0.5_scoreweighted)averagert   weighted_f1_scorerz   weighted_f2_scoreweighted_precision_scoreweighted_recall_scoreweighted_jaccard_scoremicro_f0.5_scoremicromicro_f1_scoremicro_f2_scoremicro_precision_scoremicro_recall_scoremicro_jaccard_scoremacro_f0.5_scoremacromacro_f1_scoremacro_f2_scoremacro_precision_scoresamples)	macro_recall_scoremacro_jaccard_scoresamples_f0.5_scoresamples_f1_scoresamples_f2_scoresamples_precision_scoresamples_recall_scoresamples_jaccard_scorer   c            
         t        | i |\  }}}t        |      t        |      z
  }t        j                  ||t        j                  |j                  t        j                        d|fdt        j                  g      g      S )a'  
    The dimensions of precision-recall pairs and the threshold array as
    returned by the precision_recall_curve do not match. See
    func:`sklearn.metrics.precision_recall_curve`

    This prevents implicit conversion of return value triple to an higher
    dimensional np.array of dtype('float64') (it will be of dtype('object)
    instead). This again is needed for assert_array_equal to work correctly.

    As a workaround we pad the threshold array with NaN values to match
    the dimension of precision and recall arrays respectively.
    r   constant)	pad_widthmodeconstant_values)r-   lenrg   arraypadre   float64nan)ri   rj   	precisionrecall
thresholdspad_threshholdss         rk   (precision_recall_curve_padded_thresholdsr      sz     %;D$KF$K!Ivz)ns:6O88FF!!"**-o.!#			
 rm   )r2   r-   r   r   r   r   unnormalized_log_lossr   r   r1   weighted_roc_aucsamples_roc_aucmicro_roc_aucovr_roc_aucovr)rz   multi_classweighted_ovr_roc_aucovo_roc_aucovoweighted_ovo_roc_aucpartial_roc_auc)max_fprr    weighted_average_precision_score)samples_average_precision_scoremicro_average_precision_scorer   r,   r   r5   >   r   r,   r   r   r   r   r   r   r   r   ro   r   >   r   rr   r   r2   r0   r   r   r1   r   r.   r   r   r   r-   ru   >   r   rr   r0   r   r.   ru   >   r1   r   r   >   r   rr   r   r2   r0   r   r.   r   r-   r   r   r   r   ru   >    r   rr   r   r2   r0   r   r   r   r   r   r.   r   r{   r}   r   r   r   r   r   r   r   r-   r   r~   r_   r^   rn   ro   ru   r   r   rx   >   r6   r   r5   >   r   r   r,   r   r1   r   r   r   r   r   r   r   r   r   r   r   >   r   r6   r   r   r   r   r   r   r   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r~   rq   r[   rn   r   r   r   rx   >   r/   r   r%   r'   r"   r*   r(   r   r3   r   r4   r#   >   r   r!   r   r   r6   r   r   r   r   r   r%   r'   r   r   r"   r   rV   r*   r   r   r   r(   rw   r3   rq   r4   r[   r   >   rr   r/   r   r2   r   r0   r   r.   r   r   r{   r}   r   r$   r   r&   r-   r   r   r   r   r~   r_   r^   r#   rX   rY   rn   ru   r   rx   >   r!   r   r   r*   >   r   r$   r&   rX   c                     t        t        | j                         |j                                     dz   }| |z  } ||z  }| |fS )zMake targets strictly positiverb   )absminy1y2offsets      rk   _require_positive_targetsr   ?  s?    RVVXrvvx()A-F&LB&LBr6Mrm   c                    t        t        | j                         |j                                     dz
  }| j                  t        j                        } |j                  t        j                        }| |z  } ||z  }| |fS )z$Make targets strictly larger than -1gGz?)r   r   re   rg   r   r   s      rk   _require_log1p_targetsr   G  sc    RVVXrvvx()D0F	2::	B	2::	B&LB&LBr6Mrm   c                      t         t        z  t        t              z  t        z  t        t
              k(  sJ t         t        z  t               k(  sJ y N)SYMMETRIC_METRICSNOT_SYMMETRIC_METRICSsetTHRESHOLDED_METRICS"METRIC_UNDEFINED_BINARY_MULTICLASSALL_METRICS rm   rk   test_symmetry_consistencyr   Q  sX     	
	 
!
"	# -	- 
[	    55#%???rm   namec                    t        d      }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }}n| t        v rt        ||      \  }}|j                  ddd      }|j                  ddd      }t        |    }| t        v r/| t        v r t         |||       |||      d| z         y J d       t         |||       |||      d| z         y )	Nr   rs      sizer      z%s is not symmetricerr_msgz This case is currently unhandled)
rS   randintMETRICS_REQUIRE_POSITIVE_Yr   METRICS_WITH_LOG1P_Yr   r   METRIC_UNDEFINED_BINARYMULTILABELS_METRICSrI   )r   random_statey_truey_pred
y_true_bin
y_pred_binmetrics          rk   test_symmetric_metricr   ]  s    &a(L!!!QU!3F!!!QU!3F))266B	%	%/?%%a%:J%%a%:JF&&&&z:.z:.-4 =<<566"66")D0	
rm   c                 D   t        d      }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }}t        |    }t        j                  t              5  t         |||       |||             t        d| z        # 1 sw Y   y xY w)Nr   rs   r   r   z%s seems to be symmetric)
rS   r   r   r   r   pytestraisesAssertionErrorrK   
ValueError)r   r   r   r   r   s        rk   test_not_symmetric_metricr     s     &a(L!!!QU!3F!!!QU!3F))266BF 
~	& <6&&16&&3IJ3d:;;< <s   -)BBc                 x   t        d      }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }}n| t        v rt        ||      \  }}t        ||d      \  }}t               5  t        |    }t         |||       |||      d| z         d d d        y # 1 sw Y   y xY w)Nr   rs   r   r   r    %s is not sample order invariantr   )
rS   r   r   r   r   r   rD   rM   r   rI   )r   r   r   r   y_true_shuffley_pred_shuffler   s          rk   test_sample_order_invariancer     s     &a(L!!!QU!3F!!!QU!3F))266B	%	%/?%,VV!%L"NN		 
T"66">>26=	

 
 
s   >)B00B9c                  d   t        d      } | j                  ddd      }| j                  ddd      }| j                  |j                        }||j	                  dd      z  }t        |||d      \  }}}t        D ]*  }t        |   }t         |||       |||      d	|z  
       , t        D ]*  }t        |   }t         |||       |||      d	|z  
       , t        D ]I  }t        |   }t         |||       |||      d	|z  
       t         |||       |||      d	|z  
       K y )Nr   rs   r   r   rb   Trd   keepdimsr   r   r   )rS   r   uniformshaperf   rD   r   r   rI   THRESHOLDED_MULTILABEL_METRICSMULTIOUTPUT_METRICS)	r   r   r   y_scorer   r   y_score_shuffler   r   s	            rk   7test_sample_order_invariance_multilabel_and_multioutputr     si   %a(L !!!QX!6F!!!QX!6F"""5G w{{D{11G6=a73NNO $ 
T"66">>26=	

 / 
T"67#>?36=	

 $ 
T"67#>?36=	

 	66">>26=	

rm   c                 <   t        d      }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }}n| t        v rt        ||      \  }}t        |      }t        |      }t        j                  |      t        j                  |      }}t        |j                  d       t        |j                  d       t        j                  |d      }t        j                  |d      }	t        j                  |d      }
t        j                  |d      }t               5  t        |    } |||      }t         |||      |d| z  	       t         |||      |d
| z  	       t         |||	      |d| z  	       t         |||      |d| z  	       t         |||      |d| z  	       t         |||	      |d| z  	       t         |||      |d| z  	       t         |||	      |d| z  	       t         |||      |d| z  	       t        j                   t"              5   |||       d d d        t        j                   t"              5   ||
|       d d d        t        j                   t"              5   |||       d d d        t        j                   t"              5   ||
|       d d d        t        j                   t"              5   |||       d d d        t        j                   t"              5   ||
|	       d d d        | t$        t&        z  t(        z  vrqd| v rBt        j*                  t,              5  t/        j0                   ||
|            sJ 	 d d d        n+t        j                   t"              5   ||
|       d d d        d d d        y # 1 sw Y   qxY w# 1 sw Y   SxY w# 1 sw Y   5x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   jxY w# 1 sw Y   y xY w)Nr   rs   r   r   rb   )rb   )rb   r   z,%s is not representation invariant with listr   z3%s is not representation invariant with np-array-1dz7%s is not representation invariant with np-array-columnz@%s is not representation invariant with mix np-array-1d and listzK%s is not representation invariant with mix np-array-1d and np-array-columnzD%s is not representation invariant with mix list and np-array-columnroc_auc)rS   r   r   r   r   r   listrg   r   rK   ndimreshaperM   r   rI   r   r   r   r   r   r   warnsr
   mathisnan)r   r   r   r   y1_listy2_listy1_1dy2_1d	y1_column	y2_columny1_rowy2_rowr   measures                 rk   &test_format_invariance_with_1d_vectorsr    s    &a(L			a		/B			a		/B))*2r2B	%	%'B/B2hG2hG88B<"5Euzz1%uzz1%

5'*I

5'*IZZw'FZZw'F		 f+T"R.7G$BTI	
 	5% IDP	
 	9i(MPTT	
 	5'"V	
 	7E"V	
 	5)$2 		
 	9e$2 		
 	7I&V	
 	9g&V	
 ]]:& 	"5&!	"]]:& 	"65!	"]]:& 	$7F#	$]]:& 	$67#	$]]:& 	&9f%	&]]:& 	&69%	&
 "@@CVV
 D  \\"89 >::fVV&<===> > ]]:. +66*+Kf+ f+Z	" 	"	" 	"	$ 	$	$ 	$	& 	&	& 	&> >+ +Kf+ f+s   1DP5
N.?!P 
N;*!P
O!P6
O !P!
O"+!P
O.;PO:1"P
PP.N8	3P;O	 PO	PO	P"O+	'P.O7	3P:P	?PP	PPc                 @   t        d      }|j                  ddd      }|j                  ddd      }t        j                  ddg      |   }t        j                  ddg      |   }d}ddg}t	               5  t
        |    } |||      }	|}
| t        v rt        |
|      }
 |
||      }t        |	|dj                  |       	        |
|j                  d
      |j                  d
            }t        |	|dj                  |       	       | t        v rwt        |
|      }
 |
||      }t        |	|dj                  |       	        |
|j                  d
      |j                  d
            }t        |	|dj                  |       	       d d d        y # 1 sw Y   y xY w)Nr   rs   r   r   eggsspam	pos_label+{0} failed string vs number invariance testr   O2{0} failed string object vs number invariance test)labelsz,{0} failed string vs number  invariance test)rS   r   rg   r   rM   CLASSIFICATION_METRICSMETRICS_WITH_POS_LABELr   rK   formatre   METRICS_WITH_LABELS)r   r   r   r   y1_stry2_strpos_label_str
labels_strr   measure_with_number
metric_strmeasure_with_strmeasure_with_strobjs                rk   7test_classification_invariance_string_vs_numbers_labelsr  W  s   
 &a(L			a		/B			a		/BXXvv&'+FXXvv&'+FM&!J		 &'-$Rn 
)) }EJ%ff5AHHN	
 )s);V]]3=OPHOOPTU	
 && J?J)&&9# FMMdS #-V]]3-?sAS"T##FMMdSE& & &s   8DFFc                    t        d      }|j                  ddd      }|j                  ddd      }t        j                  ddg      |   }d}t	               5  t
        |    }| t        vr||}| t        v rt        ||      } |||      } |||      }	t        ||	dj                  |       	        ||j                  d
      |      }
t        ||
dj                  |       	       net        j                  t              5   |||       d d d        t        j                  t              5   ||j                  d
      |       d d d        d d d        y # 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rs   r   r   r	  r
  r  r  r   r  r  )rS   r   rg   r   rM   r   r   r  r   rK   r  re   r   r   r   )r   r   r   r   r  r  r   r  r  r  r  s              rk   4test_thresholded_invariance_string_vs_numbers_labelsr    ss    &a(L			a		/B			a		/BXXvv&'+FM		 /$T*..J--$Z=I
"(R.)&"5# ELLTR #-V]]3-?"D##LSS z* #vr"#z* /v}}S)2./9/ /4# #/ /9/ /s=   B'E.
E!E.,E"E.E	E."E+	'E..E7rb   r   zy_true, y_scorec                     | t         k(  r|g}|g}t        j                  t        d      5   | ||       d d d        y # 1 sw Y   y xY w)Nzcontains (NaN|infinity)match)r   r   r   r   )r   r   r   s      rk   )test_regression_thresholded_inf_nan_inputr#    sH     )	z)C	D  vw     s	   
>A)rb   rs      c                 v   t        j                  |      j                         s+d}t        j                  |      j	                         rd}n-d}n*d}t        j                  |      j	                         rd}nd}d| d| }t        j                  t        |      5   | ||       ddd       y# 1 sw Y   yxY w)	z{check that classification metrics raise a message mentioning the
    occurrence of non-finite values in the target vectors.r   NaNzinfinity or a value too larger   zInput z
 contains r!  N)rg   isfiniteallr   anyr   r   r   )r   r   r   
input_nameunexpected_valuer   s         rk   !test_classification_inf_nan_inputr,    s     ;;v""$
88F!$>
88G  "$>zl*-=,>?G	z	1  vw     s   
B//B8c                     g dg d}}d}t        j                  t        |      5   | ||       ddd       y# 1 sw Y   yxY w)zocheck that classification metrics raise a message of mixed type data
    with continuous/binary target vectors.)abr.  皙?皙?333333?zJClassification metrics can't handle a mix of binary and continuous targetsr!  N)r   r   r   )r   r   r   r   s       rk   +test_classification_binary_continuous_inputr4    sD     &GFT  
z	1  vw     s	   
9Ac                     t         |    }| t        v rddg}n| t        v rddg}nddg}t        |d      D ]  \  }} ||g|g        y )Nrb   rs   gffffffr   repeat)r   r   r   r   )r   r   valuesijs        rk   check_single_sampler;    se    
 F ))Q	%	%Qq) 1sQCrm   c                     t         |    }t        ddgd      D ]<  \  }}}} |t        j                  ||gg      t        j                  ||gg             > y )Nr   rb      r6  )r   r   rg   r   )r   r   r9  r:  kls         rk   check_single_sample_multioutputr@    sV    Fq!fQ/ 7
1arxx!Q!288aVH#567rm   ignorec                     t        |        y r   )r;  r   s    rk   test_single_samplerD    s     rm   c                     t        |        y r   )r@  rC  s    rk   test_single_sample_multioutputrF  '  s     $D)rm   c                     t        j                  g dg dg dg      }t        j                  ddgddgddgg      }t        |    }t        j                  t
              5   |||       d d d        y # 1 sw Y   y xY w)N)rb   r   r   rb   )r   rb   rb   rb   )rb   rb   r   rb   r   rb   rg   r   r   r   r   r   )r   r   r   r   s       rk   (test_multioutput_number_of_output_differrI  -  sm    XX|\<@AFXX1v1v1v./FF	z	" vv  s   
A22A;c           	      6   t        d      }|j                  ddd      }|j                  ddd      }t        |    } |||      }t        d      D ]F  }|j	                  |j
                  d         }t         ||d d |f   |d d |f         |d| z         H y )	Nr   rs   )r      r   r$  rb   z'%s is not dimension shuffling invariantr   )rS   r   r   rangepermutationr   rI   )r   r   r   r   r   error_perms           rk   =test_multioutput_regression_invariance_to_dimension_shufflingrQ  7  s     &a(L!!!QW!5F!!!QW!5FF66"E1X 
''Q86!T'?F1d7O4=F	

rm   z1ignore::sklearn.exceptions.UndefinedMetricWarningcoo_containerc                    d}d}t        d|d|d      \  }}t        d|d|d      \  }}t        j                  |dg|z  gg      }t        j                  |dg|z  gg      } | |      } | |      }t        |      }t        |      }	|D 
cg c]  }
t        |
       }}
|	D 
cg c]  }
t        |
       }}
t        D ]z  }t
        |   }t        |t              rd|_        ||_	         |||      }t         |||      |d|z  	       t         |||      |d
|z  	       t         |||	      |d|z  	       | y c c}
w c c}
w )Nr=  2   rb   r   T
n_features	n_classesr   	n_samplesallow_unlabeledtmpzO%s failed representation invariance between dense and sparse indicator formats.r   z\%s failed representation invariance  between dense array and list of list indicator formats.zW%s failed representation invariance  between dense and list of array indicator formats.)r	   rg   vstackr   r   r   
isinstancer   
__module____name__rI   rJ   )rR  rW  rX  rO  r   r   y1_sparse_indicatory2_sparse_indicatory1_list_array_indicatory2_list_array_indicatorr.  y1_list_list_indicatory2_list_list_indicatorr   r   r  s                   rk   )test_multilabel_representation_invariancere  J  s    II*EAr +EAr 
B!y)*	+B	B!y)*	+B'+'+"2h"2h/FG!d1gGG/FG!d1gGG# '
T" fg& %F"FOR. 	&(;<6 		
 	)+AB% 		
 	*,CD% 		
='
 HGs   D=%Ec           	          dgdgddggg dg gdgt        j                  g ddggd      g}t        |    }|D ]-  }t        j                  t
              5   |||       d d d        / y # 1 sw Y   :xY w)Nrb   rs   r   )r   rs   )r   rb   r   objectdtyperH  )r   multilabel_sequencesr   seqs       rk   +test_raise_value_error_multilabel_sequencesrl    s     qcAq6		
"q!fX. F# ]]:& 	3	 		 	s   
A((A1	c                 N   d}d}t        d      }|j                  d||f      }|j                  d||f      }|j                  |j                        }t        |    }| t
        v r|n|} |||d      }	 |||d      }
t        d|	z  dd	
       t        |	|
|z  d|  
       y )Nrs   r   r   r   Tr\   F      0We failed to test correctly the normalize optionr   Failed with )rS   r   normalr   r   r   rL   rI   r   rW  rX  r   r   r   r   metricspredmeasure_normalizedmeasure_not_normalizeds              rk   +test_normalize_option_binary_classificationrw    s     II%a(L!!!Yi\!BF!!!Yi\!BF!!v||!4G$G117vD >$VTUC!!	B *tf%rm   c                 >   d}d}t        d      }|j                  d||f      }|j                  d||f      }|j                  ||f      }t        |    }| t        v r|n|} |||d      }	 |||d      }
t        d|	z  dd	
       t        |	|
|z  d|  
       y )Nr=  r   r   r   Tr\   Frn  ro  r   rp  )rS   r   r   r   r   rL   rI   rr  s              rk   /test_normalize_option_multiclass_classificationry    s     II%a(L!!!Yi\!BF!!!Yi\!BF""I(>"?G$G117vD >$VTUC!!	B *tf%rm   c                 j   d}d}t        d      }t        d|dd|      \  }}t        d|dd|      \  }}|j                  |j                        }|dg|z  z  }|dg|z  z  }t        |    }| t
        v r|n|}	 |||	d      }
 |||	d	      }t        d
|
z  dd       t        |
||z  d|         y )Nr=  d   r   rb   T)rV  rW  r   rY  rX  r   r\   Frn  ro  r   rp  )rS   r	   r   r   r   r   rL   rI   )r   rW  rX  r   rO  r   r   r   rs  rt  ru  rv  s               rk   /test_normalize_option_multilabel_classificationr|    s    
 II%a(L /IAv /IAv """5G qcIoF
qcIoF$G117vD >$VTUC!!	B *tf%rm   c                    |j                   \  }} | ||d       }t        |t        |      D 	cg c]  }	 | |d d |	f   |d d |	f          c}	        | ||d      }
t        |
 | |j                         |j                                       | ||d      }t        |t	        j
                  |             t	        j                  |dt              }t	        j                  |      dk7  r- | ||d      }t        |t	        j                  ||             n | ||d      }t        |d       |rN | ||d      }t        |t	        j
                  t        |      D 	cg c]  }	 | ||	   ||	          c}	             t        j                  t              5   | ||d	       d d d        t        j                  t              5   | ||d
       d d d        y c c}	w c c}	w # 1 sw Y   AxY w# 1 sw Y   y xY w)Nr|   r   r   r   )rd   ri  ry   )weightsr   unknowngarbage)r   rI   rL  ravelrg   meanrf   intrz   r   r   r   )r   r   r   y_true_binarizey_pred_binarizeis_multilabelrX  rW  label_measurer9  micro_measuremacro_measurer~  weighted_measuresample_measures                  rk   _check_averagingr    s    +00Iy 6648M 9%	
 ?1a4(/!Q$*?@	
 667;Mvo3357L7L7NO
 667;MM277=#9: ff_1C8G	vvg!!&&*E("**]G*TU!&&*E(!, 	BGG #9- ?1-q/AB	
 
z	" 2vvy12	z	" 2vvy12 2S	
@2 22 2s#   G
GG$G0$G-0G9c                     t        |      j                  d      }t        |    }| t        v rt	        ||||||       y | t
        v rt	        ||||||       y t        d      )N
multilabelz2Metric is not recorded as having an average option)rQ   
startswithr   METRICS_WITH_AVERAGINGr  "THRESHOLDED_METRICS_WITH_AVERAGINGr   )r   r   r  r   r  r   r  r   s           rk   check_averagingr  J  sm    "6*55lCMF%%FFO_m	
 
3	3FG_g}	
 MNNrm   c                 6   d\  }}t        d      }|j                  d||f      }|j                  d||f      }|j                  ||f      }t               j	                  |      }|j                  |      }|j                  |      }	t        | ||||	|       y )N)rT  r$  r   r   )rS   r   r   rC   fit	transformr  )
r   rX  rW  r   r   r   r   lbr  r  s
             rk   test_averaging_multiclassr  [  s     Iy%a(L!!!Yi\!BF!!!Yi\!BF""I(>"?G				f	%Bll6*Oll6*OD&/6?GTrm   c                     d\  }}t        d|d|d      \  }}|d d }|dd  }t        d      j                  d|f      }|}|}	t        | ||||	|       y )	N)(   rK  rb   rK  FrU  r   r   r   )r	   rS   rq  r  )
r   rX  rW  rO  yr   r   r   r  r  s
             rk   test_averaging_multilabelr  j  s{     !Iy)DAq sVFrsVF #**Y*@GOOD&/6?GTrm   c                     t        j                  d      }t        j                  d      }t        j                  d      }|}|}t        | |||||       y Nr   r$  )rg   zerosr  r   r   r   r   r  r  s         rk   $test_averaging_multilabel_all_zeroesr    sH    XXgFXXgFhhwGOOD&/6?GTrm   c                      t        j                  d      } t        j                  d      }| }|}dd}t        || |||d       y )Nr  c                 &    t        t        | ||      S r   )r7   r.   )r   r   rz   s      rk   rl   z=test_averaging_binary_multilabel_all_zeroes.<locals>.<lambda>  s    =R'> rm   T)r  )r   )rg   r  r  )r   r   r  r  binary_metrics        rk   +test_averaging_binary_multilabel_all_zeroesr    sK    XXgFXXgFOOM rm   c                     t        j                  d      }t        j                  d      }t        j                  d      }|}|}t        | |||||       y r  )rg   onesr  r  s         rk   "test_averaging_multilabel_all_onesr    sH    WWWFWWWFgggGOOD&/6?GTrm   c                    t         j                  j                  d      }|j                  ddt	        |            }| dk(  rt        |d      n|} |||d       }t        | |||t        j                  t	        |                  d	| z  
        ||||      }t        j                  t              5  t        ||       t        d|d|d|       # 1 sw Y   nxY w ||||j                               }t        ||d|d|d| 
        |t        j                  ||d      t        j                  ||d      d       }	t        ||	d| z  
       |dd d   }
t        j                  |      }d|d d d<   |dd d   }|dd d   } ||||
      } ||||      }t        ||d|d|d| 
       | j                  d      s$dD ]  }t        | |||||z        d| z  
       ! dj!                  t#        |      t#        |      t#        |      dz        }t        j                  t        |      5   |||t        j$                  ||g             d d d        y # 1 sw Y   y xY w)Nr   rb   
   r   r5   )r>  )sample_weight)r   zAFor %s sample_weight=None is not equivalent to sample_weight=onesr   z>Unweighted and weighted scores are unexpectedly almost equal (z) and (z) for zFWeighted scores for array and list sample_weight input are not equal (z != rc   z.Weighting %s is not equal to repeating samplesrs   zUZeroing weights does not give the same result as removing the corresponding samples (unnormalized)rs   r3  z/%s sample_weight is not invariant under scalingzJFound input variables with inconsistent numbers of samples: \[{}, {}, {}\]r!  )rg   randomRandomStater   r   r   rI   r  r   r   r   r   tolistr7  copyr  r  rR   hstack)r   r   r   r   rngr  unweighted_scoreweighted_scoreweighted_score_listrepeat_weighted_scoresample_weight_subsetsample_weight_zeroed	y1_subset	y2_subsetweighted_score_subsetweighted_score_zeroedscalingerror_messages                     rk   check_sample_weight_invariancer    s   
))


"CKK2CGK4M &*-C%CWVq!F b"D9r2RWW3r7%;<S
 B-@N 
~	& 
(.9 ).$@
 	

 
 !R}7K7K7MN
 .	6 #
		"m!,
		"m!,
 @4G )A.77=1 !114a4I14a4I"9,@ #2r9MN
 !"7	? ??>*   	Gr2]W-DEIDP		##)6l2.]0Ka0O$
  
z	7 Pr2RYY}/M%NOP P Ps   7!CC!?!I))I2c                     d}t        d      }|j                  |f      }|j                  |f      }t        |    }t        | |||       y )NrT  r   r   )rS   random_sampler   r  )r   rX  r   r   r   r   s         rk   (test_regression_sample_weight_invariancer  	  sU     I%a(L''i\':F''i\':FF"4@rm   c                     d}t        d      }|j                  dd|f      }|j                  dd|f      }|j                  |f      }t        |    }| t        v rt        | |||       y t        | |||       y )NrT  r   rs   r   )rS   r   r  r   r   r  )r   rX  r   r   r   r   r   s          rk   $test_binary_sample_weight_invariancer    s     I%a(L!!!Qi\!:F!!!Qi\!:F((yl(;GF""&tVVWE&tVVVDrm   c                 l   d}t        d      }|j                  dd|f      }|j                  dd|f      }|j                  |df      }t        |    }| t        v rJt        j                  |       }||j                  d      j                  dd      z  }t        | |||       y t        | |||       y )NrT  r   rK  r   r   rc   rb   )
rS   r   r  r   r   rg   exprf   r   r  )	r   rX  r   r   r   r   r   tempy_score_norms	            rk   (test_multiclass_sample_weight_invariancer  1  s     I%a(L!!!Qi\!:F!!!Qi\!:F((y!n(=GF""vvwhdhhBh/77A>>&tVV\J&tVVVDrm   c                    t        d      }t        ddddd      \  }}t        ddddd      \  }}t        j                  ||g      }t        j                  ||g      }|j	                  |j
                        }||j                  dd	      z  }t        |    }| t        v rt        | |||       y t        | |||       y )
Nr   rb   r  rT  FrU  r   Tr   )
rS   r	   rg   r[  r   r   rf   r   r   r  )	r   r   rO  yaybr   r   r   r   s	            rk   (test_multilabel_sample_weight_invariancer  K  s     &a(L*bRWEAr +bRWEAr YYBx FYYBx F"""5G w{{D{11GF""&tVVWE&tVVVDrm   c                     t        j                  g dg dg      } t        j                  g dg dg      }t        j                  g d      }t        j                  g d      }t        j                  g d      }t        j                  |d      \  }}t        D ]Y  }||g| |gfD ]L  \  }}	|t        vr|	j
                  d	kD  rt        |   }
 |
||	|d 
      } |
||	d       }t        |||          N [ y )N)rb   rb   r   r   r   r   rb   rb   )r   rb   rb   r   )r   rb   rs   )r   rs   r$  )r$  r   rb   rs   T)return_inverserb   )r  rz   r|   )rg   r   uniquer  r   r   r   rK   )y_true_multilabely_pred_multilabely_true_multiclassy_pred_multiclassr  rO  inverse_labelsr   r   r   r   score_labelsscores                rk   test_no_averaging_labelsr  i  s     ,!=>,!=>++XXl#F		&>A~& D 12 12
 	DNFF ..6;;? &F!&&NL6648E|U>-BC	DDrm   c                 "   t        d      }d\  }}|j                  dd||f      }|j                  dd||f      }t        |    } |||      }t        t	        |      |      D ])  }|d d |f   }	|d d |f   }
 ||
|	      }t        ||       + y )Nr   r   r=  rs   r   )rS   r   r   r   rL  rJ   r   r   rX  rW  r   r   r   r  rP  y_score_permy_true_permcurrent_scores               rk   -test_multilabel_label_permutations_invariancer    s     &a(L Iy!!!Qi-C!DF""1ay).D"EGF67#EU9-y9 2q$w'QWo{L9E=12rm   c                    t        d      }d\  }}|j                  dd||f      }|j                  |j                        }||j	                  dd      z  }d||j	                  d      dk(  df<   d||j	                  d      dk(  df<   t
        |    } |||      }t        t        |      |      D ]Q  }|d d |f   }	|d d |f   }
 ||
|	      }|t        k(  rt        j                  |      sJ |d	kD  rDJ t        ||       S y )
Nr   r  rs   r   rb   Tr   r=  g    .A)rS   r   r   r   rf   r   r   rL  r#   rg   r'  rJ   r  s               rk   ?test_thresholded_multilabel_multioutput_permutations_invariancer    s+    &a(L Iy!!!Qi-C!DF"""5G w{{D{11G %&F6::a=Aq !$%F6::a=Aq !F67#EU9-y9 6q$w'QWo{L933;;}--- 3&&&  }56rm   c                    d\  }}t        d      }|j                  ||      }t        j                  |       }||j	                  d      j                  dd      z  }|j                  d||      }t        |    } |||      }t        t        |      |      D ]r  }	t        j                  |t              }
t        j                  |      |
t        |	      <   |d d |
f   }t        j                  |	|      } |||      }t        ||       t y )N)r{  r$  r   r   rc   rb   r   rh  )rS   randrg   r  rf   r   r   r   r   rL  r  r  aranger   takerJ   )r   rX  rW  r   r   r  r   r   r  rP  inverse_permr  r  r  s                 rk   .test_thresholded_metric_permutation_invariancer    s     "Iy%a(L	95G667(DTXX2X&..r155G!!!YY!?FF67#EU9-y9 2xx	5#%99Y#7T$Z q,/ggdF+{L9E=12rm   metric_namec                 L   t         j                  j                  d      }t        j                  dgdz  dgdz  z   t              }|j                  dd|j                        }d	}t        j                  t        |
      5  t        |    ||       d d d        y # 1 sw Y   y xY w)N*   r
  r$  r	  rs   rh  r   r   z7Labels in y_true and y_pred should be of the same type.r!  )rg   r  r  r   rg  r   r   r   r   	TypeErrorr  )r  r  r   r   r   s        rk   "test_metrics_consistent_type_errorr    s     ))


#C	6(Q,&A-V	<B	Q	(BGG	y	0 4{+B34 4 4s   BB#zmetric, y_pred_thresholddtype_y_strc                    t         j                  j                  d      }t        j                  dgdz  dgdz  z   |      }|j	                  dd|j
                        }|st        j                  ddg|      |   }d	}d
}t        |       j                  d   j                  }|dk(  r|n|}	t        j                  t        |	      5   | ||       d d d        y # 1 sw Y   y xY w)Nr  r
  r$  r	  rs   rh  r   r   zy_true takes value in {'eggs', 'spam'} and pos_label is not specified: either make y_true take value in {0, 1} or {-1, 1} or pass pos_label explicitzHpos_label=1 is not a valid label. It should be one of \['eggs', 'spam'\]r  rb   r!  )rg   r  r  r   r   r   r   
parametersdefaultr   r   r   )
r   y_pred_thresholdr  r  r   r   err_msg_pos_label_Noneerr_msg_pos_label_1pos_label_defaultr   s
             rk    test_metrics_pos_label_error_strr    s    $ ))


#C	6(Q,&A-[	AB	Q	(BXXvv&k:2>	"  	X  "&)44[AII%6!%;!AWG	z	1 r2  s   
CC$c                 N   t        ||      }|j                  ||      }|j                  ||      }	 | ||fi |}
|j                  d      |j                  |d   |      |d<   |j                  d      }t        |t        j
                        r|j                  ||      |d<   	 t	        j                  |       t	        j                  |	       d}|rc | ||	fi |}t        ||
t        |              | ||	fi |}t        ||
t        |              | ||fi |}t        ||
t        |             t        d      5   | ||	fi |}t        t        |j                  |      |      |
t        |             d d d        y # t        $ r d}Y w xY w# 1 sw Y   y xY w)N)devicer  rU   TF)atol)array_api_dispatch)rH   asarraygetr\  rg   ndarrayr  rI   rE   r   rF   )r   array_namespacer  
dtype_namea_npb_npmetric_kwargsxpa_xpb_xp	metric_nprU   numpy_as_array_works	metric_xpmetric_xp_mixed_1metric_xp_mixed_2s                   rk   check_array_api_metricr  	  s    
ov	6B::d6:*D::d6:*DtT3]3I)5)+/*6 *4 *
o&  ##M2K+rzz*')zz+fz'Mm$%


4


4# 477	
+	

 #4??
+	

 #4??
+	
 
4	0 
477	bjj3R8
+	

 
5  %  %	%4
 
s   ),F
 ;F
FFF$c           	          t        j                  g d      }t        j                  g d      }t        | |||||d        t        j                  g d|      }t        | ||||||       y )Nr  )r   rb   r   rb   r   r  r          r1         @      ?rh  rg   r   r  r   r  r  r  	y_true_np	y_pred_npr  s          rk   ,check_array_api_binary_classification_metricr  H  sm     &I&I HH1DM#rm   c                    t        j                  g d      }t        j                  g d      }ddi}t        | |      }|D ]A  }t        | |||f||d d| t        j                  g d|      }	t        | |||f|||	d| C y )	N)r   rb   rs   r$  )r   rb   r   rs   rz   r   r   ry   r   paramsr  r  rh  rg   r   (_get_metric_kwargs_for_array_api_testingr  
r   r  r  r  r  r  additional_paramsmetric_kwargs_combinationsr  r  s
             rk   0check_array_api_multiclass_classification_metricr   e  s     &I&I 	1 "J " 4 
			

 		
 		
 !5ZH			

 '		
 		

rm   c                 2   t        j                  ddgddgddgg|      }t        j                  ddgddgddgg|      }ddi}t        | |      }|D ]A  }t        | |||f||d d| t        j                  g d|      }	t        | |||f|||	d| C y )	Nrb   r   rh  rz   r  r  r  )r  r1  r  r  r  s
             rk   0check_array_api_multilabel_classification_metricr"    s     1a&1a&1a&1DI1a&1a&1a&1DI 	1 "J " 4 
			

 		
 		
 
C			

 '		
 		

rm   c                    t        | t              r| j                  j                  n| j                  }|dk(  r't        t        d      k  rt        j                  d       t        j                  g d|      }t        j                  g d|      }i }t        |       j                  }d|v rd |d<   t        | |||f||d| d|v r/t        j                  g d	|      |d<   t        | |||f||d| y y )
Nr&   z1.14.0zJmean_poisson_deviance's dependency `xlogy` is available as of scipy 1.14.0)r  r1  r  g      @rh  )rv   rv   rs   rs   r  r   r  )r1  r        ?rv   )r\  r   funcr^  rP   rO   r   skiprg   r   r   r  r  )	r   r  r  r  	func_namer  r  r  metric_paramss	            rk   !check_array_api_regression_metricr*    s   (267(C$$I++
]8=T0TX	
 -Z@I)<IMf%00M-')-o&	
   -')+ 
*
o& 			

 	
 	
 (rm   c                 h   t        j                  g dg dg|      }t        j                  g dg dg|      }t        | |||||d        t        j                  ddg|      }t        | ||||||       t        | |||||t        j                  g d	|      
       t        | |||||d
       y )N)rb   r$  rs   )rb   rs   rs   rh  )rb   r=  r=  )rb   rb   rb   r  r1  r  )r1  r3  ffffff?)r   r  rU   
raw_valuesr  r  s          rk   -check_array_api_regression_metric_multioutputr.    s     )Y/zBI)Y/zBI HHc3Zz:M# HH_J?  rm   c                    t        j                  g dg dg|      }t        j                  g dg dg|      }i }dt        |       j                  v rd|d<   t	        | |||f||d| d	|d<   t	        | |||f||d| y )
Nr0  )皙?rv   333333?rh  )r2  r3  r0  )rv   r1  r,  dense_outputFr$  T)rg   r   r   r  r  )r   r  r  r  X_npY_npr  s          rk   check_array_api_metric_pairwiser5    s    88_o6jID88_o6jIDM6*555(-n%		

 	
 	
 )-n%	
  rm   g      r%  c              #   V   K   | j                         D ]  \  }}|D ]  }||f 
  y wr   )items)metric_checkersr   checkerscheckers       rk   !yield_metric_checker_combinationsr;  t  s<     +113 " 	"G'/!	""s   ')z#array_namespace, device, dtype_namezmetric, check_funcc                      || |||       y r   r   )r   r  r  r  
check_funcs        rk   test_array_api_compliancer>  z  s    
 v
;rm   df_lib_namepandaspolarsc                 L   t        j                  |      }|j                  g d      }|j                  g d      }t        |    }	  ||j	                         |j	                               }t         |||             y # t
        $ r t        j                  |  d       Y 7w xY w)N)r  r  r   r  )r  r  r  r  z can not deal with 1d inputs)r   importorskipSeriesr   to_numpyr   r'  rI   )r  r?  df_libr   r   r   expected_metrics          rk   test_metrics_dataframe_seriesrH    s       -F]]-.F]]/0F%FB !2FOO4EF F66*O<  B{m#?@ABs   %A? ?!B#"B#c                     i g}|j                         D ]U  \  }}|t        |       j                  vrg }|D ]/  }|D ](  }|j                         }|||<   |j	                  |       * 1 |}W |S )zHelper function to enable specifying a variety of additional params and
    their corresponding values, so that they can be passed to a metric function
    when testing for array api compliance.)r7  r   r  r  append)	r   r  r  paramr8  new_combinationsrj   value
new_kwargss	            rk   r  r    s     #% 6v	&)4440 	4F 4#[[]
$)
5! ''
34	4 &6"6 &%rm   )r   	functoolsr   inspectr   	itertoolsr   r   r   numpyrg   r   sklearn._configr   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   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   sklearn.metrics._baser7   sklearn.metrics.pairwiser8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   sklearn.preprocessingrC   sklearn.utilsrD   sklearn.utils._array_apirE   rF   rG   sklearn.utils._testingrH   rI   rJ   rK   rL   rM   sklearn.utils.fixesrN   rO   rP   sklearn.utils.multiclassrQ   sklearn.utils.validationrR   rS   REGRESSION_METRICSr  r   CURVE_METRICSr   dictr   updater   METRIC_UNDEFINED_MULTICLASSunionr   r  r  r  r  METRICS_WITH_NORMALIZE_OPTIONr   r   r   r   r   METRICS_WITHOUT_SAMPLE_WEIGHTr   r   r   r   r   markparametrizesortedr   r   r   r   r   r  r  r  infr   invalids_nan_infr8  r#  r,  r4  r;  r@  filterwarningsrD  rF  rI  rQ  re  rl  rw  ry  intersectionr|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  strrg  r  r  r  r   r"  r*  r.  r5  array_api_metric_checkersr;  r>  rH  r  r   rm   rk   <module>rq     s      2 2   * ; 5- - - - - - - - - - - -\ 8    1 ! 
  J I 3 EF. , 4	
 * 2 %&D  8 .AB 6 "#> G$9C 2 . %g.C3&O   0<!" (#$ 6% *6n666 '0GRV(W6 "7>U#K	6 $%56 " $6 /0K6 6w#86$ L%6& ]'6( !'-5"I)6, ]-6. /60 L162 364 !,566 '+C0768 096: 7;
M;6< :>=6> jqI?6@  LA6B W\:FC6D gmZHE6F W3GG6H gh8I6J gk7CK6L W_gFM6N ',@O6P 7='BQ6R W3GS6T gh8U6V gk7CW6X W_gFY6Z ",@"='B!+ysK)<YQG&	J#L)D$]IF*k6 r@ F n ,    WX?	 
 *  (  ]  zB  w}i@  W]G<  7='uM  Gzu  7='uM   Gzu! & w}c:' ( 6) * ')+ 0 (/( &--Dg%V-R0?  D f   & '   ) *   % &   = !   * &=%B%B& "
 & " (! H! " ( D "  H  H!   ! 	@ (9!:;
 <
B (=!>?< @<" 
F3{#&HHI

**
Z 
F3{#&HHI{+{+| 
F3-.1SST22j !45'/ 6'/V VbffbffVbffbffVbffbffVbffa[Vbffa[  e'..02D2K2K2MN *,<=  >  #9#@#@#BC
 &&!Q#
&&!Q#	
 
 D , #9#@#@#BC  D $7 H%

K -	- !
"		#		 &
 H%(;>Q(Q!RS* T &* (;!<= > (;!<=
 >
$ OP.9H
 : QH
V (;!<= >  (E!FG H8 (E!FG H8 
F0==>QRS,,^32lO" (>!?@U AU 
F),NNOUU$ (>!?@U AU& (>!?@U AU^PB 

K%%c*<&=>
'	(AA 

K
 
!	"
'	( "	"EE 

K
 
!	"
'	( -	-EE" 

	=	=@S	S
'	(EE.D2 
F&*T)UUV22$ 
F14GGH66B 
F3*+.PPQ22* (>?	4 @	4 	 $'	4 	5	1	%u-		&	% 	u	D
 f6 74<
~:$
N$
N'
T.b<E488E 488E  488"E  488!E* =>+E, !.1R0S-E. !-0Q/R/E0 )51E8 789E: )5;EB )5CEJ )5KER )SEX =>YEZ =>[E\ :;]E^ ;<_E` 12")5% 12!@ A679:347801)5  )5" 45IE P 7P " )+T+V -/P/RS< T< 8(<={(;<= = >=&rm   