
    UgA                        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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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d d	l;m<Z< d d
l=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZD d dlEmFZFmGZGmHZHmIZImJZJmKZK d dlLmMZM d dlNmOZO d dlPmQZQmRZR e&e'e,e*e.e(e ee3d           ee-d           e+e) ee-d           eed          eedZSi deded eed          d eed          dedd  d!e/d" ee/d#          d$ed%e8d& ee8d          d'e!d(e2d)e4d*ed+ eed,-          d. eed/-          i d0e%d1 eed2d/3          d4 eed25          d6 eed2d,3          d7 ee2d25          d8 ee4d25          d9 ee!d25          d: eed;d/3          d< eed;5          d= eed;d,3          d> ee2d;5          d? ee4d;5          d@ ee!d;5          dA eedBd/3          dC eedB5          dD eedBd,3          dE ee2dB5           ee4dB5           ee!dB5           eedFd/3           eedF5           eedFd,3           ee2dF5           ee4dF5           ee!dF5          edG	ZTdH ZUe6eUedIZVi dJedKe#dLe$dM ee$d          dNe dOedPe5dQ ee5d25          dR ee5dF5          dS ee5d;5          dT ee5dBdUV          dW ee5d2dUV          dX ee5dBdYV          dZ ee5d2dYV          d[ ee5d/\          d]ed^ eed25           eedF5           eed;5          e"e0ee7d_ZW eX            ZYeYZ                    eW           eYZ                    eT           eYZ                    eS           eYZ                    eV           h d`Z[h daZ\e[]                    e\          Z^h dbZ_h dcZ`h ddZah deZbh dfZch dgZdh dhZeh diZfh djZgh dkZhh dlZih dmZjdn Zkdo Zle
jm        n                    dp eoeg                    dq             Zpe
jm        n                    dp eoeh                    dr             Zqe
jm        n                    dp eo ereY          e^z
                      ds             ZseKdt             Zte
jm        n                    dp eo ereY          e^z
                      du             Zue
jm        n                    dp eo ereT          e^z
                      dv             Zve
jm        n                    dpeW          dw             Zwd dxge	jx        e	jx        gfd dxge	jy        e	jy        gfd dxge	jy        e	jx        gfd dxge	jx        dxgfd dxge	jy        dxgfgZze
jm        n                    dy eeW{                                eS{                                                    e
jm        n                    dzez          d{                         Z|e
jm        n                    dyeT{                                          e
jm        n                    dzeze	jy        dxd,gg d|fe	jx        dxd,gg d|fgz             d}                         Z}e
jm        n                    dyeT{                                          d~             Z~eKd             ZeKd             Ze
jm        n                    dp eo ereY          e^z
   ereW          z
                      d             Ze
jm        n                    dp eoefeez                      d             Ze
jm        n                    dp eoef                    d             Ze
jm        n                    dp eoef                    d             ZeKe
jm        n                    deM          d                         Ze
jm        n                    dp eoee                    d             Ze
jm        n                    dp eoec                    d             Ze
jm        n                    dp eoec                    d             Ze
jm        n                    dp eoec                    ee                              d             ZeKd             Zd Ze
jm        n                    dp eoe_                    d             Ze
jm        n                    dp eoe_e`z                      d             Ze
jm        n                    dp eoe_                    d             Zd Ze
jm        n                    dp eoe_                    d             ZeKd             Ze
jm        n                    dp eo ereY                               ereS                    eiz
                      d             Ze
jm        n                    dp eo ereY           ereS          z
  eiz
  e[z
                      d             Ze
jm        n                    dp eo ereY           ereS          z
  eiz
  e^z
                      d             Ze
jm        n                    dp eoeeedz  efz  eiz
                      d             ZeKd             Ze
jm        n                    dp eoeed!hz
                      d             Ze
jm        n                    dp eoedefz                      d             Ze
jm        n                    dp eo ereW          e^z
                      d             Ze
jm        n                    deT          d             Ze
jm        n                    dedfedfedf eedx-          dfe!dfe1dfe2dfe4dfe6dfg	          e
jm        n                    deeg          d                         Zd Zd Zd Zd Zd Zd Zeeeege8eeege3ege<egiZefdZe
jm        n                    d eD                      e
jm        n                    d e                      d                         ZdS )    )partial)	signature)chainpermutationsproductN)config_context)make_multilabel_classification))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_tweedie_deviancemedian_absolute_errormultilabel_confusion_matrix
ndcg_scoreprecision_recall_curveprecision_scorer2_scorerecall_scoreroc_auc_score	roc_curvetop_k_accuracy_scorezero_one_loss)_average_binary_score)cosine_similarity)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)type_of_target)_num_samplescheck_random_statevariance_weighted)multioutput)powergffffff?)r    r!   r&   r$   r(   r"   r   r-   mean_normal_deviancer%   r#   mean_compound_poisson_deviancer   r   r   r
   r    adjusted_balanced_accuracy_scoreT)adjustedunnormalized_accuracy_scoreF	normalizeunnormalized_confusion_matrixnormalized_confusion_matrixc                      t          | i |                    d          t          | i |                    d          d d t          j        f         z  S )Nfloat   axis)r   astypesumnpnewaxis)argskwargss     `/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/metrics/tests/test_common.py<lambda>r\      s[    $)&))0099
D
+F
+
+
/
/Q
/
7
72:
F	G     (unnormalized_multilabel_confusion_matrix/unnormalized_multilabel_confusion_matrix_sample)
samplewiser   r2   unnormalized_zero_one_lossr   r,   r.   r   f2_score   )beta
f0.5_score      ?matthews_corrcoef_scoreweighted_f0.5_scoreweighted)averagerd   weighted_f1_scorerj   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        |                    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+   lenrW   arraypadrU   float64nan)rY   rZ   	precisionrecall
thresholdspad_threshholdss         r[   (precision_recall_curve_padded_thresholdsr      s     %;D$KF$K$K!Ivz)nns:6O8F!!"*--o.!#	  		
  r]   )r0   r+   r   r   r   r   unnormalized_log_lossr   r   r/   weighted_roc_aucsamples_roc_aucmicro_roc_aucovr_roc_aucovr)rj   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   r1   >   r   r*   r   r   r   r   r   r   r   r   r_   r   >   r   rb   r   r0   r.   r   r   r/   r   r,   r   r   r   r+   re   >   r   rb   r.   r   r,   re   >   r/   r   r   >   r   rb   r   r0   r.   r   r,   r   r+   r   r   r   r   re   >    r   rb   r   r0   r.   r   rz   r{   rs   rt   r,   r   rk   rm   r~   rv   r   rw   r|   ru   ro   r+   rp   rn   rO   rN   r^   r_   re   rx   rq   rh   >   r2   r
   r1   >   r   r   r*   r   r/   r   r   r   r   r   r   r   r   r   r   r   >   r   r2   r
   rz   r{   rs   rt   r   r   rk   rm   r~   rv   r   rw   r   r|   ru   r   ro   rp   r   rn   ra   rK   r^   rx   rq   r   rh   >	   r-   r   r$   r&   r!   r(   r   r   r"   >   r   r    r   r   r2   r
   rz   rs   rt   r   r$   r&   rv   r   r!   rw   rG   r(   ru   r   ro   rg   ra   rK   rq   >   rb   r-   r   r0   r   r.   r{   r,   r   r   rk   rm   r~   r#   r|   r%   r+   rp   r   r   r   rn   rO   rN   r"   rH   rI   r^   re   rx   rh   >   r    r   r   r(   >   r   r#   r%   rH   c                     t          t          |                                 |                                                    dz   }| |z  } ||z  }| |fS )zMake targets strictly positiverR   )absmin)y1y2offsets      r[   _require_positive_targetsr     sI    RVVXXrvvxx(())A-F&LB&LBr6Mr]   c                      t           t          z  t          t                    z  t          z  t          t
                    k    sJ t           t          z  t                      k    sJ d S N)SYMMETRIC_METRICSNOT_SYMMETRIC_METRICSsetTHRESHOLDED_METRICS"METRIC_UNDEFINED_BINARY_MULTICLASSALL_METRICS r]   r[   test_symmetry_consistencyr   '  sn     	
	 
!
"
"	# -	- 
[		     55#%%??????r]   namec                    t          d          }|                    ddd          }|                    ddd          }| t          v rt          ||          \  }}|                    ddd          }|                    ddd          }t          |          }| t
          v r>| t          v r+t           |||           |||          d| z             d S J d	            t           |||           |||          d| z             d S )
Nr   rc      sizer      z%s is not symmetricerr_msgFz This case is currently unhandled)rC   randintMETRICS_REQUIRE_POSITIVE_Yr   r   METRIC_UNDEFINED_BINARYMULTILABELS_METRICSr;   )r   random_statey_truey_pred
y_true_bin
y_pred_binmetrics          r[   test_symmetric_metricr   3  sY    &a((L!!!QU!33F!!!QU!33F)))266BB%%a%::J%%a%::JF&&&&&&z:..z:..-4      =<<<<F66""F66"")D0	
 	
 	
 	
 	
 	
r]   c                    t          d          }|                    ddd          }|                    ddd          }| t          v rt          ||          \  }}t          |          }t          j        t                    5  t           |||           |||                     t          d| z            # 1 swxY w Y   d S )Nr   rc   r   r   z%s seems to be symmetric)
rC   r   r   r   r   pytestraisesAssertionErrorr=   
ValueError)r   r   r   r   r   s        r[   test_not_symmetric_metricr   R  s     &a((L!!!QU!33F!!!QU!33F)))266BBF 
~	&	& < <66&&1166&&3I3IJJJ3d:;;;< < < < < < < < < <s   7B99B= B=c                    t          d          }|                    ddd          }|                    ddd          }| t          v rt          ||          \  }}t	          ||d          \  }}t                      5  t          |          }t           |||           |||          d| z             d d d            d S # 1 swxY w Y   d S )Nr   rc   r   r   r    %s is not sample order invariantr   )rC   r   r   r   r6   r?   r   r;   )r   r   r   r   y_true_shuffley_pred_shuffler   s          r[   test_sample_order_invariancer   d  s4    &a((L!!!QU!33F!!!QU!33F)))266BB%,VV!%L%L%L"NN			 
 
T"F66""F>>226=	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   ?7CC
Cc                     t          d          } |                     ddd          }|                     ddd          }|                     |j                  }||                    dd          z  }t          |||d          \  }}}t          D ]8}t          |         }t           |||           |||          d	|z  
           9t          D ]8}t          |         }t           |||           |||          d	|z  
           9t          D ]a}t          |         }t           |||           |||          d	|z  
           t           |||           |||          d	|z  
           bd S )Nr   rc   r   r   rR   TrT   keepdimsr   r   r   )rC   r   uniformshaperV   r6   r   r   r;   THRESHOLDED_MULTILABEL_METRICSMULTIOUTPUT_METRICS)	r   r   r   y_scorer   r   y_score_shuffler   r   s	            r[   7test_sample_order_invariance_multilabel_and_multioutputr   z  s   %a((L !!!QX!66F!!!QX!66F"""55G w{{D{111G6=a7 7 73NNO $ 
 
T"F66""F>>226=	
 	
 	
 	
 	
 / 
 
T"F67##F>?336=	
 	
 	
 	
 	
 $ 
 
T"F67##F>?336=	
 	
 	
 	

 	F66""F>>226=	
 	
 	
 	
 	

 
r]   c                 z   t          d          }|                    ddd          }|                    ddd          }| 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            n# 1 swxY w Y   t          j        t                    5   ||
|           d d d            n# 1 swxY w Y   t          j        t                    5   |||           d d d            n# 1 swxY w Y   t          j        t                    5   ||
|           d d d            n# 1 swxY w Y   t          j        t                    5   |||           d d d            n# 1 swxY w Y   t          j        t                    5   ||
|	           d d d            n# 1 swxY w Y   | t           t"          z  t$          z  vr=t          j        t                    5   ||
|           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rc   r   r   rR   )rR   )rR   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)rC   r   r   r   listrW   r   r=   ndimreshaper?   r   r;   r   r   r   r   r   r   )r   r   r   r   y1_listy2_listy1_1dy2_1d	y1_column	y2_columny1_rowy2_rowr   measures                 r[   &test_format_invariance_with_1d_vectorsr     s    &a((L			a		/	/B			a		/	/B)))*2r22B2hhG2hhG8B<<"5Euz1%%%uz1%%%
5'**I
5'**IZw''FZw''F			 `' `'T"&R..F7G$$BTI	
 	
 	
 	
 	F5%  IDP	
 	
 	
 	
 	F9i((MPTT	
 	
 	
 	
 	F5'""V	
 	
 	
 	
 	F7E""V	
 	
 	
 	
 	F5)$$2 		
 	
 	
 	
 	F9e$$2 		
 	
 	
 	
 	F7I&&V	
 	
 	
 	
 	F9g&&V	
 	
 	
 	
 ]:&& 	" 	"F5&!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]:&& 	" 	"F65!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]:&& 	$ 	$F7F###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$]:&& 	$ 	$F67###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$]:&& 	& 	&F9f%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&]:&& 	& 	&F69%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
 "@@CVV
 
 z** ' 'vv&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '`' `' `' `' `' `' `' `' `' `' `' `' `' `' `' `' `' `'s  .E
P08JP0J	P0J	P05KP0K	P0K	P02L?P0L	P0L	P0/M<P0M	P0M	P0,N9P0N			P0N		P0)O6P0O	P0	O	
5P0?PP0P	P0P	 P00P47P4c                    t          d          }|                    ddd          }|                    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	                    |           	            |
|
                    d
          |
                    d
                    }t          |	|d	                    |           	           | t          v rt          |
|          }
 |
||          }t          |	|d	                    |           	            |
|
                    d
          |
                    d
                    }t          |	|d	                    |           	           d d d            d S # 1 swxY w Y   d S )Nr   rc   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)rC   r   rW   r   r?   CLASSIFICATION_METRICSMETRICS_WITH_POS_LABELr   r=   formatrU   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                r[   7test_classification_invariance_string_vs_numbers_labelsr  !  s   
 &a((L			a		/	/B			a		/	/BXvv&''+FXvv&''+FM&!J			 & &'-$fRnn 
))) }EEEJ%:ff55AHHNN	
 	
 	
 	
 )js););V]]3=O=OPPHOOPTUU	
 	
 	
 	
 &&& J???J)z&&99# FMMdSS    #-*V]]3-?-?sASAS"T"T##FMMdSS   E& & & & & & & & & & & & & & & & & &s   E G99G= G=c                    t          d          }|                    ddd          }|                    ddd          }t          j        ddg          |         }d}t	                      5  t
          |          }| t          vr|}| t          v rt          ||          } |||          } |||          }	t          ||	d
                    |           	            ||                    d
          |          }
t          ||
d
                    |           	           nt          j        t                    5   |||           d d d            n# 1 swxY w Y   t          j        t                    5   ||                    d
          |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rc   r   r   r   r   r   r   r   r   r   )rC   r   rW   r   r?   r   r   r   r   r=   r   rU   r   r   r   )r   r   r   r   r   r   r   r  r  r  r  s              r[   4test_thresholded_invariance_string_vs_numbers_labelsr  Y  s    &a((L			a		/	/B			a		/	/BXvv&''+FM			 / /$T*...J---$Z=III
"(&R..)z&"55# ELLTRR    #-*V]]3-?-?"D"D##LSS      z** # #vr"""# # # # # # # # # # # # # # #z** / /v}}S))2.../ / / / / / / / / / / / / / /9/ / / / / / / / / / / / / / / / / /s[   ,CF;:EF;E	F;E	F;7 F#F;#F'	'F;*F'	+F;;F?F?rR   r   zy_true, y_scorec                     | t           k    r|g}|g}t          j        t          d          5   | ||           d d d            d S # 1 swxY w Y   d S )Nzcontains (NaN|infinity)match)r   r   r   r   )r   r   r   s      r[   )test_regression_thresholded_inf_nan_inputr    s     )	z)C	D	D	D    vw                                   s   AAA)rR   rc      c                    t          j        |                                          s.d}t          j        |                                          rd}n0d}n-d}t          j        |                                          rd}nd}d| d| }t          j        t          |          5   | ||           ddd           dS # 1 swxY w Y   dS )	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)rW   isfiniteallisnananyr   r   r   )r   r   r   
input_nameunexpected_valuer   s         r[   !test_classification_inf_nan_inputr    s*    ;v""$$ ?
8F!! 	?$>
8G  "" 	?$>?z??-=??G	z	1	1	1    vw                                   s   %B??CCc                     g dg d}}d}t          j        t          |          5   | ||           ddd           dS # 1 swxY w Y   dS )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       r[   +test_classification_binary_continuous_inputr    s     &ooGFT  
z	1	1	1    vw                                   s   A  AAc                     t           |          }| t          v rddg}nddg}t          |d          D ]\  }} ||g|g           d S )NrR   rc   r   repeat)r   r   r   )r   r   valuesijs        r[   check_single_sampler$    ss     F )))QQq)))  1sQC r]   c                     t           |          }t          ddgd          D ]=\  }}}} |t          j        ||gg          t          j        ||gg                     >d S )Nr   rR      r  )r   r   rW   r   )r   r   r"  r#  kls         r[   check_single_sample_multioutputr)    ss    Fq!fQ/// 7 7
1arx!Q!!28aVH#5#566667 7r]   c                 $    t          |            d S r   )r$  r   s    r[   test_single_sampler,    s     r]   c                 $    t          |            d S r   )r)  r+  s    r[   test_single_sample_multioutputr.    s    #D)))))r]   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            d S # 1 swxY w Y   d S )N)rR   r   r   rR   )r   rR   rR   rR   )rR   rR   r   rR   r   rR   rW   r   r   r   r   r   )r   r   r   r   s       r[   (test_multioutput_number_of_output_differr1    s    X|||\\\<<<@AAFX1v1v1v.//FF	z	"	"  vv                 s   !A;;A?A?c           	         t          d          }|                    ddd          }|                    ddd          }t          |          } |||          }t          d          D ]U}|                    |j        d                   }t           ||d d |f         |d d |f                   |d| z             Vd S )	Nr   rc   )r      r   r  rR   z'%s is not dimension shuffling invariantr   )rC   r   r   rangepermutationr   r;   )r   r   r   r   r   error_perms           r[   =test_multioutput_regression_invariance_to_dimension_shufflingr9    s     &a((L!!!QW!55F!!!QW!55FFF66""E1XX 
 
''Q88F6!!!T'?F111d7O44=F	
 	
 	
 	
 	

 
r]   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 |D             }
d |	D             }t          D ]}t
          |         }t          |t                    rd	|_        ||_	         |||          }t           |||          |d
|z             t           ||
|          |d|z             t           |||	          |d|z             d S )Nr&  2   rR   r   T
n_features	n_classesr   	n_samplesallow_unlabeledc                 ,    g | ]}t          |          S r   r   .0r  s     r[   
<listcomp>z=test_multilabel_representation_invariance.<locals>.<listcomp>0      GGG!d1ggGGGr]   c                 ,    g | ]}t          |          S r   rC  rD  s     r[   rF  z=test_multilabel_representation_invariance.<locals>.<listcomp>1  rG  r]   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	   rW   vstackr   r   r   
isinstancer   
__module____name__r;   r<   )r:  r?  r@  r7  r   r   y1_sparse_indicatory2_sparse_indicatory1_list_array_indicatory2_list_array_indicatory1_list_list_indicatory2_list_list_indicatorr   r   r   s                  r[   )test_multilabel_representation_invariancerT    s
    II*  EAr +  EAr 
B!y)*	+	+B	B!y)*	+	+B'-++'-++"2hh"2hhGG/FGGGGG/FGGG# '
 '
T" fg&& 	# %F"FO&R.. 	F&(;<<6 		
 	
 	
 	
 	F)+ABB% 		
 		
 		
 		
 	F*,CDD% 		
 		
 		
 		
 		
='
 '
r]   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            n# 1 swxY w Y   @d S )NrR   rc   r   )r   rc   )r   rR   r   objectdtyper0  )r   multilabel_sequencesr   seqs       r[   +test_raise_value_error_multilabel_sequencesr[  ]  s     qcAq6		
"q!fX... F#  ]:&& 	 	F3	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   A..A2	5A2	c                    d}d}t          d          }|                    d||f          }|                    d||f          }|                    |j                  }t          |          }| t
          v r|n|} |||d          }	 |||d          }
t          d|	z  dd	
           t          |	|
|z  d|  
           d S )Nrc   r   r   r   TrL   F      0We failed to test correctly the normalize optionr   Failed with )rC   r   normalr   r   r   r>   r;   r   r?  r@  r   r   r   r   metricspredmeasure_normalizedmeasure_not_normalizeds              r[   +test_normalize_option_binary_classificationrf  n  s    II%a((L!!!Yi\!BBF!!!Yi\!BBF!!v|!44G$G11177vD >>>$WVTUCCC!!	B    *%t%%     r]   c                    d}d}t          d          }|                    d||f          }|                    d||f          }|                    ||f          }t          |          }| t          v r|n|} |||d          }	 |||d          }
t          d|	z  dd	
           t          |	|
|z  d|  
           d S )Nr&  r   r   r   TrL   Fr]  r^  r   r_  )rC   r   r   r   r   r>   r;   ra  s              r[   /test_normalize_option_multiclass_classificationrh    s    II%a((L!!!Yi\!BBF!!!Yi\!BBF""I(>"??G$G11177vD >>>$WVTUCCC!!	B    *%t%%     r]   c                    d}d}t          d          }t          d|dd|          \  }}t          d|dd|          \  }}|                    |j                  }|dg|z  z  }|dg|z  z  }t          |          }| t
          v r|n|}	 |||	d          }
 |||	d	          }t          d
|
z  dd           t          |
||z  d|             d S )Nr&  d   r   rR   T)r>  r?  r   rA  r@  r   rL   Fr]  r^  r   r_  )rC   r	   r   r   r   r   r>   r;   )r   r?  r@  r   r7  r   r   r   rb  rc  rd  re  s               r[   /test_normalize_option_multilabel_classificationrk    sT   
 II%a((L /  IAv /  IAv """55G qcIoF
qcIoF$G11177vD >>>$WVTUCCC!!	B    *%t%%     r]   c           	      ,    j         \  }}  ||d           }t          | fdt          |          D                          ||d          }	t          |	                                                                                         ||d          }
t          |
t	          j        |                     t	          j        dt                    }t	          j        |          dk    r3  ||d          }t          |t	          j        ||                     n  ||d          }t          |d           |rK  ||d	          }t          |t	          j         fd
t          |          D                                  t          j
        t                    5    ||d           d d d            n# 1 swxY w Y   t          j
        t                    5    ||d           d d d            d S # 1 swxY w Y   d S )Nrl   c                 P    g | ]"} d d |f         d d |f                   #S r   r   rE  r"  r   y_pred_binarizey_true_binarizes     r[   rF  z$_check_averaging.<locals>.<listcomp>  sO     	
 	
 	
 F?111a4(/!!!Q$*?@@	
 	
 	
r]   rr   ry   r   )rT   rX  ri   )weightsr}   c                 @    g | ]} |         |                   S r   r   rn  s     r[   rF  z$_check_averaging.<locals>.<listcomp>  s?        F?1-q/ABB  r]   unknowngarbage)r   r;   r4  ravelrW   meanrV   intrj   r   r   r   )r   r   r   rp  ro  is_multilabelr@  r?  label_measuremicro_measuremacro_measurerq  weighted_measuresample_measures   `  ``         r[   _check_averagingr~    s    +0Iy F664888M	
 	
 	
 	
 	
 	
9%%	
 	
 	
   F667;;;Mvvo33557L7L7N7NOO  
 F667;;;MM27=#9#9::: f_1C888G	vg!!6&&*EEE("*]G*T*T*TUUUU!6&&*EEE(!,,,  

	BBBG     "9--   	
 	
 	
 
z	"	" 2 2vvy11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	z	"	" 2 2vvy11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s$   .G		GG-H		HHc                     t          |                              d          }t          |          }| t          v rt	          ||||||           d S | t
          v rt	          ||||||           d S t          d          )N
multilabelz2Metric is not recorded as having an average option)rA   
startswithr   METRICS_WITH_AVERAGINGr~  "THRESHOLDED_METRICS_WITH_AVERAGINGr   )r   r   rp  r   ro  r   rx  r   s           r[   check_averagingr    s    "6**55lCCMF%%%FFO_m	
 	
 	
 	
 	
 
3	3	3FG_g}	
 	
 	
 	
 	
 MNNNr]   c                    d\  }}t          d          }|                    d||f          }|                    d||f          }|                    ||f          }t                                          |          }|                    |          }|                    |          }	t          | ||||	|           d S )N)r<  r  r   r   )rC   r   r   r5   fit	transformr  )
r   r@  r?  r   r   r   r   lbrp  ro  s
             r[   test_averaging_multiclassr  "  s     Iy%a((L!!!Yi\!BBF!!!Yi\!BBF""I(>"??G					f	%	%Bll6**Oll6**OD&/6?GTTTTTr]   c                     d\  }}t          d|d|d          \  }}|d d         }|dd          }t          d                              d|f          }|}|}	t          | ||||	|           d S )	N)(   r3  rR   r3  Fr=  r   r   r   )r	   rC   r`  r  )
r   r@  r?  r7  yr   r   r   rp  ro  s
             r[   test_averaging_multilabelr  1  s     !Iy)  DAq ssVFrssVF ##**Y*@@GOOD&/6?GTTTTTr]   c                     t          j        d          }t          j        d          }t          j        d          }|}|}t          | |||||           d S Nr   r  )rW   zerosr  r   r   r   r   rp  ro  s         r[   $test_averaging_multilabel_all_zeroesr  F  sW    XgFXgFhwGOOD&/6?GTTTTTr]   c                      t          j        d          } t          j        d          }| }|}dd}t          || |||d           d S )Nr  ry   c                 0    t          t          | ||          S r   )r3   r,   )r   r   rj   s      r[   r\   z=test_averaging_binary_multilabel_all_zeroes.<locals>.<lambda>W  s    =R'> > r]   T)rx  )ry   )rW   r  r~  )r   r   rp  ro  binary_metrics        r[   +test_averaging_binary_multilabel_all_zeroesr  Q  sp    XgFXgFOO  M      r]   c                     t          j        d          }t          j        d          }t          j        d          }|}|}t          | |||||           d S r  )rW   onesr  r  s         r[   "test_averaging_multilabel_all_onesr  d  sW    WWFWWFggGOOD&/6?GTTTTTr]   c                    t           j                            d          }|                    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xY w Y    ||||                                          }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| 
           |                     d          s)dD ]&}t          | |||||z            d| z  
           'd                    t#          |          t#          |          t#          |          dz            }t          j	        t          |          5   |||t          j        ||g                     d d d            d S # 1 swxY w Y   d S )Nr   rR   
   r   r1   )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 != rS   z.Weighting %s is not equal to repeating samplesrc   zUZeroing weights does not give the same result as removing the corresponding samples (unnormalized)rc   r  z/%s sample_weight is not invariant under scalingzJFound input variables with inconsistent numbers of samples: \[{}, {}, {}\]r	  )rW   randomRandomStater   r   r   r;   r  r   r   r   r   tolistr   copyr  r   rB   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                     r[   check_sample_weight_invariancer  o  sE   
)


"
"CKK2CGGK44M &*-C%C%CWVq!!!!F vb"D999r2RW3r77%;%;%;<<<S
    VB-@@@N 
~	&	& 
 
(.999j )((...$$@
 
 	

 
 
 
 
 
 
 
 !&R}7K7K7M7MNNN
 >>...	6    #F
	"m!,,,
	"m!,,,  
 @4G    )A.7=11 !114a4I14a4I"F9,@   #F2r9MNNN
 !  "7"7"7	?    ??>**    	 	Gr2]W-DEEEIDP    	##)6l2..]0K0Ka0O$
 $
  
z	7	7	7 P Pr2RY}/M%N%NOOOOP P P P P P P P P P P P P P P P P Ps$   )C==DD#KKKc                     d}t          d          }|                    |f          }|                    |f          }t          |          }t          | |||           d S )Nr<  r   r   )rC   random_sampler   r  )r   r@  r   r   r   r   s         r[   (test_regression_sample_weight_invariancer    sj     I%a((L''i\'::F''i\'::FF"4@@@@@r]   c                 2   d}t          d          }|                    dd|f          }|                    dd|f          }|                    |f          }t          |          }| t          v rt          | |||           d S t          | |||           d S )Nr<  r   rc   r   )rC   r   r  r   r   r  )r   r@  r   r   r   r   r   s          r[   $test_binary_sample_weight_invariancer    s     I%a((L!!!Qi\!::F!!!Qi\!::F((yl(;;GF"""&tVVWEEEEE&tVVVDDDDDr]   c                    d}t          d          }|                    dd|f          }|                    dd|f          }|                    |df          }t          |          }| t          v rVt          j        |           }||                    d                              dd          z  }t          | |||           d S t          | |||           d S )Nr<  r   r3  r   r   rS   rR   )
rC   r   r  r   r   rW   exprV   r   r  )	r   r@  r   r   r   r   r   tempy_score_norms	            r[   (test_multiclass_sample_weight_invariancer    s     I%a((L!!!Qi\!::F!!!Qi\!::F((y!n(==GF"""vwhdhhBh//77A>>>&tVV\JJJJJ&tVVVDDDDDr]   c                    t          d          }t          ddddd          \  }}t          ddddd          \  }}t          j        ||g          }t          j        ||g          }|                    |j                  }||                    dd	          z  }t          |          }| t          v rt          | |||           d S t          | |||           d S )
Nr   rR   r  r<  Fr=  r   Tr   )
rC   r	   rW   rJ  r   r   rV   r   r   r  )	r   r   r7  yaybr   r   r   r   s	            r[   (test_multilabel_sample_weight_invariancer    s    &a((L*bRW  EAr +bRW  EAr YBx  FYBx  F"""55G w{{D{111GF"""&tVVWEEEEE&tVVVDDDDDr]   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 ]e}||g| |gfD ]Z\  }}	|t          vr|	j        d	k    rt          |         }
 |
||	|d 
          } |
||	d           }t          |||                    [fd S )N)rR   rR   r   r   r   r   rR   rR   )r   rR   rR   r   )r   rR   rc   )r   rc   r  )r  r   rR   rc   T)return_inverserR   )r   rj   rl   )rW   r   uniquer  r   r   r   r=   )y_true_multilabely_pred_multilabely_true_multiclassy_pred_multiclassr   r7  inverse_labelsr   r   r   r   score_labelsscores                r[   test_no_averaging_labelsr  1  sI    ,,,!=>>,,,!=>>++++Xlll##F	&>>>A~& D D 12 12
 	D 	DNFF ...6;?? &F!6&&NNNLF664888E|U>-BCCCC	DD Dr]   c                 p   t          d          }d\  }}|                    dd||f          }|                    dd||f          }t          |          } |||          }t          t	          |          |          D ]6}|d d |f         }	|d d |f         }
 ||
|	          }t          ||           7d S )Nr   r   r&  rc   r   )rC   r   r   r   r4  r<   r   r   r@  r?  r   r   r   r  r8  y_score_permy_true_permcurrent_scores               r[   -test_multilabel_label_permutations_invariancer  K  s     &a((L Iy!!!Qi-C!DDF""1ay).D"EEGFF67##EU9--y99 2 2qqq$w'QQQWo{L99E=11112 2r]   c                 r   t          d          }d\  }}|                    dd||f          }|                    |j                  }||                    dd          z  }d||                    d          dk    df<   d||                    d          dk    df<   t
          |          } |||          }t          t          |          |          D ]`}|d d |f         }	|d d |f         }
 ||
|	          }|t          k    rt          j
        |          sJ |d	k    sJ Pt          ||           ad S )
Nr   r  rc   r   rR   Tr   r&  g    .A)rC   r   r   r   rV   r   r   r4  r"   rW   r  r<   r  s               r[   ?test_thresholded_multilabel_multioutput_permutations_invariancer  `  sq    &a((L Iy!!!Qi-C!DDF"""55G w{{D{111G %&F6::a==Aq !$%F6::a==Aq !FF67##EU9--y99 6 6qqq$w'QQQWo{L99333;}----- 3&&&&&  }55556 6r]   c                 x   d\  }}t          d          }|                    ||          }t          j        |           }||                    d                              dd          z  }|                    d||          }t          |          } |||          }t          t          |          |          D ]~}	t          j
        |t                    }
t          j        |          |
t          |	          <   |d d |
f         }t          j        |	|          } |||          }t          ||           d S )N)rj  r  r   r   rS   rR   r   rW  )rC   randrW   r  rV   r   r   r   r   r4  r  rw  aranger   taker<   )r   r@  r?  r   r   r  r   r   r  r8  inverse_permr  r  r  s                 r[   .test_thresholded_metric_permutation_invariancer    s>    "Iy%a((L	955G67(DTXX2X&&..r1555G!!!YY!??FFF67##EU9--y99 2 2x	555#%9Y#7#7T$ZZ qqq,/gdF++{L99E=11112 2r]   metric_namec                 b   t           j                            d          }t          j        dgdz  dgdz  z   t                    }|                    dd|j                  }d	}t          j        t          |
          5  t          |          ||           d d d            d S # 1 swxY w Y   d S )N*   r   r  r   rc   rW  r   r   z7Labels in y_true and y_pred should be of the same type.r	  )rW   r  r  r   rV  r   r   r   r   	TypeErrorr   )r  r  r   r   r   s        r[   "test_metrics_consistent_type_errorr    s     )


#
#C	6(Q,&A-V	<	<	<B	Q	(	(BGG	y	0	0	0 4 4{+B3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s    B$$B(+B(zmetric, y_pred_thresholddtype_y_strc                    t           j                            d          }t          j        dgdz  dgdz  z   |          }|                    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            d S # 1 swxY w Y   d S )Nr  r   r  r   rc   rW  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   rR   r	  )rW   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
             r[    test_metrics_pos_label_error_strr    sK   $ )


#
#C	6(Q,&A-[	A	A	AB	Q	(	(B ?Xvv&k:::2>	"  	X  "&))4[AI%6!%;%;!!AWG	z	1	1	1  r2                 s   C  C$'C$c                    t          ||          }|                    ||          }|                    ||          }	 | ||fi |}
|                    d           |                    |d         |          |d<   t          d          5   | ||	fi |}t	          t          |                    |          |          |
t          |                     d d d            d S # 1 swxY w Y   d S )N)devicer  T)array_api_dispatch)atol)r:   asarraygetr   r;   r8   r7   )r   array_namespacer  
dtype_namea_npb_npmetric_kwargsxpa_xpb_xp	metric_np	metric_xps               r[   check_array_api_metricr    s_    
ov	6	6B::d6:**D::d6:**DtT33]33I))5)+/*6 *4 *
 *
o& 
4	0	0	0 
 
F47777	bjj33R88
++	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AC&&C*-C*c           	          t          j        g d          }t          j        g d          }t          | |||||d            t          j        g d|          }t          | ||||||           d S )Nr  )r   rR   r   rR   r  r  r          r         @g      ?rW  rW   r   r  r   r  r  r  	y_true_np	y_pred_npr  s          r[   ,check_array_api_binary_classification_metricr         &&I&&I    H111DDDM#     r]   c           	          t          j        g d          }t          j        g d          }t          | |||||d            t          j        g d|          }t          | ||||||           d S )N)r   rR   rc   r  )r   rR   r   rc   r  r  rW  r  r   s          r[   0check_array_api_multiclass_classification_metricr    r  r]   c           	      
   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          | |||||d            t          j        g d|          }t          | ||||||           d S )NrR   r   rW  r  )r  r  r  r  r   s          r[   0check_array_api_multilabel_classification_metricr  %  s     1a&1a&1a&1DDDI1a&1a&1a&1DDDI    H___J???M#     r]   c           	          t          j        ddgddgg|          }t          j        ddgddgg|          }t          | |||||d            t          j        ddg|          }t          | ||||||           d S )	NrR   r  rc   rW  r&  r  r  r  r  r   s          r[   !check_array_api_regression_metricr
  B  s    1a&1a&)<<<I1a&1a&)<<<I    Hc3Zz:::M#     r]   c                     t          j        g dg dg|          }t          j        g dg dg|          }i }dt          |           j        v rd|d<   t	          | |||||           d S )	Nr  )皙?rf   333333?rW  )r  r  r  )rf   r  gffffff?dense_outputT)r  r  )rW   r   r   r  r  )r   r  r  r  X_npY_npr  s          r[   check_array_api_metric_pairwiser  ]  s    8___ooo6jIIID8___ooo6jIIIDM6**555(,n%$T     r]   c              #   T   K   |                                  D ]\  }}|D ]}||fV  	d S r   )items)metric_checkersr   checkerscheckers       r[   !yield_metric_checker_combinationsr  {  sW      +1133 " " 	" 	"G'/!!!!	"" "r]   z#array_namespace, device, dtype_namezmetric, check_funcc                 "     || |||           d S r   r   )r   r  r  r  
check_funcs        r[   test_array_api_compliancer    s     
 Jv
;;;;;r]   )	functoolsr   inspectr   	itertoolsr   r   r   numpyrW   r   sklearn._configr   sklearn.datasetsr	   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.   r/   r0   r1   r2   sklearn.metrics._baser3   sklearn.metrics.pairwiser4   sklearn.preprocessingr5   sklearn.utilsr6   sklearn.utils._array_apir7   r8   r9   sklearn.utils._testingr:   r;   r<   r=   r>   r?   sklearn.utils.fixesr@   sklearn.utils.multiclassrA   sklearn.utils.validationrB   rC   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   markparametrizesortedr   r   r   r   r   r   r  r  infr   invalids_nan_infr!  r  r  r  r$  r)  r,  r.  r1  r9  rT  r[  rf  rh  intersectionrk  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  strrV  r  r  r  r  r  r
  r  array_api_metric_checkersr  r  r   r]   r[   <module>r;     sB               2 2 2 2 2 2 2 2 2 2      * * * * * * ; ; ; ; ; ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *V 8 7 7 7 7 7 6 6 6 6 6 6 0 0 0 0 0 0 ! ! ! ! ! !         
                / . . . . . 3 3 3 3 3 3 E E E E E E E EH .,*2&D 8.ABBB#G$9CCC2.&-g.C3&O&O&O 0<<<(6  $6n666 '0GRV(W(W(W6 "77>U#K#K#K	6 $%56 " $ $6 /0K6 6ww#8 8 86$ L%6& ]'6( !''-5"I"I"I)6, ]-6. /60 L162 364 !,,,566 ''+C00076 68 096: 77;
MMM;6< :>>>=6> jqIII?6@  L L LA6B WW\:FFFC6D ggmZHHHE6F W3GGGG6H ggh888I6J ggk7CCCK6L WW_gFFFM6N '',@@@O6P 77='BBBQ6R W3GGGS6T ggh888U6V ggk7CCCW6X WW_gFFFY6 6Z "',@@@"7='BBB!'+ysKKK)<<<YQGGG&w	JJJ#GL)DDD$W]IFFF*k6 6 6 r  @ F  n ,    WWX???	 
 *  (  ]  zBBB  ww}i@@@  WW]G<<<  77='uMMM  GGzu    77='uMMM   GGzu  ! & ww}c:::' ( 6) * ') ) )+ 0 (/w( ( ( &-W-Dg%V%V%V-R0?      D dff   & ' ' '   ) * * *   % & & &   = ! ! !       * &=%B%B& & "
   & & & "   (! ! ! H! ! ! " " " (   D
 
 
    B      H! ! !      	@ 	@ 	@ (9!:!:;;
 
 <;
< (=!>!>??< < @?<" 
FF33{##&HHII 
 
 
& *
 *
 *
Z 
FF33{##&HHII s' s' s'l 
FF33-..1SSTT 2 2 2j !455'/ '/ 65'/V VbfbfVbfbfVbfbfVbfa[Vbfa[  ee'..002D2K2K2M2MNN  *,<==    >=   #9#@#@#B#BCC
 &!Q#
&!Q#	
 
   
 
 DC , #9#@#@#B#BCC    DC      7 7 7 

FK -	- #!
"
"		# 	 	 	 	 (;>Q(Q!R!RSS* * TS* (;!<!<==  >= (;!<!<==
 
 >=
$ .99H
 H
 :9 H
V (;!<!<==  >=  (E!F!FGG  HG8 (E!F!FGG  HG8 
FF0==>QRRSS , , ,^ 32 32 32lO O O" (>!?!?@@U U A@U 
FF),NNOO U U U$ (>!?!?@@U U A@U  & (>!?!?@@U U A@U ^P ^P ^PB 

FK%%cc*<&=&=>>
'	(  A A A 

FK
# 
!
!	"
'	( "	"  E E E 

FK
# 
!
!	"
'	( -	-  E E E" 

F	=	=@S	S
'	(  E E E. D D D2 
FF&*T)UUVV 2 2 2$ 
FF14GGHH 6 6 6B 
FF33*++.PPQQ 2 2 2* (>??	4 	4 @?	4 	 $'	4 	5	1	%	%	%u-		&	% 	u	D
  f66  76 4
 
 
2  :  :  :  6   488
 488
 0178   7P " " " " )+T+T+V+V  -/P/P/R/RSS< < TS < < <r]   