Ë
    íì�i-%  ã            
       ó  — d dl mZ d dlmZ d dlZd dl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 d dlmZ d dlmZmZ d dlmZ ee	eeeeeeedœ	Ze eed	¬
«      e
edœZg d¢ZddgZg d¢Zej@                  jC                  d «      Z"e"jG                  dd¬«      Z$e"jG                  dd¬«      Z%d„ Z&ejN                  jQ                  deD � cg c]  } | e$e%f‘Œ	 c} «      d„ «       Z)ejN                  jQ                  deD � cg c]  } | e$e%f‘Œ	 c} «      d„ «       Z*ejN                  jQ                  de«      d„ «       Z+ejN                  jQ                  d eee«      «      d„ «       Z,ejN                  jQ                  d eee«      «      d„ «       Z-ejN                  jQ                  dej]                  «       «      d„ «       Z/ejN                  jQ                  d e0efi e¤Žjc                  «       «      d„ «       Z2ejN                  jQ                  d eee«      «      d „ «       Z3d!„ Z4e
e4gee4giZ5e5fd"„Z6ejN                  jQ                  d# e«       e¬$«      ejN                  jQ                  d% e6«       «      d&„ «       «       Z7yc c} w c c} w )'é    )Úpartial)ÚchainN)Úadjusted_mutual_info_scoreÚadjusted_rand_scoreÚcalinski_harabasz_scoreÚcompleteness_scoreÚdavies_bouldin_scoreÚfowlkes_mallows_scoreÚhomogeneity_scoreÚmutual_info_scoreÚnormalized_mutual_info_scoreÚ
rand_scoreÚsilhouette_scoreÚv_measure_score)Úcheck_array_api_metric)Ú_get_namespace_device_dtype_idsÚ)yield_namespace_device_dtype_combinations)Úassert_allclose)	r   r   r   r   r   r   r   r   r
   Ú	manhattan)Úmetric)r   Úsilhouette_manhattanr   r	   )r   r   r   r   r   r   r
   r   r   )r   r   r   r   r   r   r
   r   é   é   ©Úsizec                  óT   — t        t        t        z   «      t        t        «      k(  sJ ‚y ©N)ÚsortedÚSYMMETRIC_METRICSÚNON_SYMMETRIC_METRICSÚSUPERVISED_METRICS© ó    úŽ/var/www/ITT-ServiceAPI-Services/ITT-Document-Scan/mrzscanner/mrzenv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_common.pyÚ"test_symmetric_non_symmetric_unionr%   b   s+   € ÜÔ#Ô&;Ñ;Ó<ÄÜóAò ð ñ r#   zmetric_name, y1, y2c                 óf   — t         |    } |||«      t        j                   |||«      «      k(  sJ ‚y r   ©r!   ÚpytestÚapprox©Úmetric_nameÚy1Úy2r   s       r$   Útest_symmetryr.   h   ó1   € ô   Ñ,€FÙ�"�b‹>œVŸ]™]©6°"°b«>Ó:Ò:Ð:Ñ:r#   c                 óf   — t         |    } |||«      t        j                   |||«      «      k7  sJ ‚y r   r'   r*   s       r$   Útest_non_symmetryr1   p   r/   r#   r+   c                 ó|  — g d¢}g d¢}t         |    } |g d¢g d¢«      dkD  sJ ‚ |g d¢g d¢«      dkD  sJ ‚ |g d¢g d¢«      dk  sJ ‚ |g d¢g d¢«      dk  sJ ‚ |||«      t        j                  d«      k(  sJ ‚g d	¢}g d
¢}t        j                   |||«       |||«      g«      }|dk  j                  «       rJ ‚y )N)r   r   r   é   r3   r3   )r   r   r   r3   r3   )r   r   r   r3   é   g        )r   r   r3   r3   r4   )r   r   r3   r3   r3   )r   r3   r3   r3   r3   g      ð?)r   r   r   r   r   r   )r   r3   r4   r   é   é   r   )r!   r(   r)   ÚnpÚarrayÚany)r+   Úupper_bound_1Úupper_bound_2r   Úlower_bound_1Úlower_bound_2Úscores          r$   Útest_normalized_outputr?   x   sÏ   € â&€MÚ&€MÜ Ñ,€FÙ’/¢?Ó3°cÒ9Ð9Ð9Ù’/¢?Ó3°cÒ9Ð9Ð9Ù’/¢?Ó3°cÒ9Ð9Ð9Ù’/¢?Ó3°cÒ9Ð9Ð9Ù�- Ó/´6·=±=ÀÓ3EÒEÐEÐEâ&€MÚ&€MÜ�H‰HÙ	�˜}Ó	-©v°mÀ]Ó/SÐTó€Eð ˜‘	�‰Ô Ð Ð Ð r#   c                 ó²  — t        j                  g d¢«      }t        j                  g d¢«      }| t        v rXt        |    } |||«      }t        | |d|z
  |«      «       t        | |d|z
  d|z
  «      «       t        | ||d|z
  «      «       y t        |    }t         j
                  j                  dd¬«      } |||«      }t        | ||d|z
  «      «       y )N)r   r   r   r3   r3   r   r3   ©r3   r   r3   r   r3   r3   r   r3   é
   ©é   rB   r   )r7   r8   r!   r   ÚUNSUPERVISED_METRICSÚrandomÚrandint)r+   Úy_labelÚy_predr   Úscore_1ÚXs         r$   Útest_permute_labelsrL   ‹   sÈ   € ô �h‰hÒ,Ó-€GÜ�X‰XÒ+Ó,€FØÔ(Ñ(Ü# KÑ0ˆÙ˜ Ó)ˆÜ˜¡¨¨F©
°GÓ!<Ô=Ü˜¡¨¨F©
°A¸±KÓ!@ÔAÜ˜¡¨°°G±Ó!<Õ=ä% kÑ2ˆÜ�I‰I×Ñ˜b wÐÓ/ˆÙ˜˜FÓ#ˆÜ˜¡¨¨1¨v©:Ó!6Õ7r#   c                 ó¨  — g d¢}g d¢}d„ }| t         v rKt         |    } |||«      } ||«      } ||«      }t        ||«      D ]  \  \  }}	\  }
}| |||
«      k(  rŒJ ‚ y t        |    }t        j                  j                  dd¬«      } |||«      }| ||j                  t        «      |«      k(  sJ ‚ ||«      }|D ]  \  }}	| |||«      k(  rŒJ ‚ y )N)r   r   r   r   r3   r3   r3   r3   )r   r3   r4   r   r5   r6   é   rD   c              3   óŒ  K  — t        j                  | «      } | df–— | j                  «       df–— | j                  «       D �cg c]  }t        |«      dz   ‘Œ c}df–— t        j                  | j                  «       D �cg c]  }t        |«      dz   ‘Œ c}t        ¬«      df–— | dz
  df–— | dz   d	f–— y c c}w c c}w ­w)
Nzarray of intszlist of intsz-azlist of strs)Údtypezarray of strsr3   zincluding negative intszstrictly positive ints)r7   r8   ÚtolistÚstrÚobject)ÚyÚxs     r$   Úgenerate_formatsz0test_format_invariance.<locals>.generate_formats¥   s±   è ø€ Ü�H‰H�Q‹KˆØ�Ð Ò Ø�h‰h‹j˜.Ð(Ò(Ø&'§h¡h£jÖ1 Œs�1‹v˜‹}Ò1°>ÐAÒAä�H‰H¨Q¯X©X«ZÖ8¨”c˜!“f˜t“mÒ8ÄÔGØð
ò 	
ð �!‰eÐ.Ð.Ò.Ø�!‰eÐ-Ð-Ó-ùò 2ùâ8ùs   ‚ACÁB:Á(CÂB?Â.CrB   )é   rB   r   )r!   ÚziprE   r7   rF   rG   ÚastypeÚfloat)r+   Úy_truerI   rV   r   rJ   Ú
y_true_genÚ
y_pred_genÚ
y_true_fmtÚfmt_nameÚ
y_pred_fmtÚ_rK   s                r$   Útest_format_invariancerb   ž   s  € ò &€FÚ%€Fò
.ð Ô(Ñ(Ü# KÑ0ˆÙ˜ Ó(ˆÙ% fÓ-ˆ
Ù% fÓ-ˆ
Ü7:¸:ÀzÓ7Rò 	=Ñ3Ñ"ˆZ˜¡O Z°Ø™f Z°Ó<Ó<Ð<Ð<ñ	=ô & kÑ2ˆÜ�I‰I×Ñ˜b wÐÓ/ˆÙ˜˜FÓ#ˆØ™& §¡¬%£°&Ó9Ò9Ð9Ð9Ù% fÓ-ˆ
Ø$.ò 	4Ñ ˆJ˜Ø™f Q¨
Ó3Ó3Ð3Ð3ñ	4r#   r   c                 ó.   — dD ]  \  }} | |g|g«       Œ y )N))r   r   )r   r3   )r3   r   )r3   r3   r"   )r   ÚiÚjs      r$   Útest_single_samplerf   Â   s%   € ð 1ò ‰ˆˆ1Ù�ˆs�Q�CÕñr#   zmetric_name, metric_funcc                 ór  — | t         v rlddgt        j                  t        j                  gfddgt        j                  t        j                  gfddgt        j                  t        j                  gfg}n†t        j                  j                  dd¬«      }|t        j                  t        j                  gf|t        j                  t        j                  gf|t        j                  t        j                  gfg}t        j                  t        d¬«      5  |D ]  } ||Ž  Œ	 	 d d d «       y # 1 sw Y   y xY w)Nr   r3   rB   )r4   rB   r   zcontains (NaN|infinity))Úmatch)	r!   r7   ÚinfÚnanrF   rG   r(   ÚraisesÚ
ValueError)r+   Úmetric_funcÚinvalidsrK   Úargss        r$   Útest_inf_nan_inputrp   É   s÷   € ð Ô(Ñ(à�ˆV”b—f‘fœbŸf™fÐ%Ð&Ø�ˆV”b—f‘fœbŸf™fÐ%Ð&Ø�ˆV”b—f‘fœbŸf™fÐ%Ð&ð
‰ô �I‰I×Ñ˜b wÐÓ/ˆØœŸ™¤§¡Ð(Ð)¨A´·±¼¿¹Ð/?Ð+@À1ÄrÇvÁvÌrÏvÉvÐFVÐBWÐXˆÜ	�‰”zÐ)CÔ	Dñ Øò 	ˆDÙ˜Òñ	÷÷ ñ ús   ÄD-Ä-D6Únamec                 óŽ  — t         j                  j                  d«      }|j                  dd¬«      }|j                  ddd¬«      }|j                  ddd¬«      }| t        v rt        |    } |||«      }nt
        |    } |||«      }t        |t        «      sJ ‚t        |t         j                  t         j                  f«      rJ ‚y)z�Ensure that the returned values of all metrics are consistent.

    It can only be a float. It should not be a numpy float64 or float32.
    r   rB   )é   rB   r   r   )rs   N)
r7   rF   ÚRandomStaterG   r!   rE   Ú
isinstancerZ   Úfloat64Úfloat32)rq   ÚrngrK   Úlabels_trueÚlabels_predr   r>   s          r$   Útest_returned_value_consistencyr{   Û   s·   € ô �)‰)×
Ñ
 Ó
"€CØ�‰�B˜XˆÓ&€AØ—+‘+˜a ¨�+Ó/€KØ—+‘+˜a ¨�+Ó/€KàÔ!Ñ!Ü# DÑ)ˆÙ�{ KÓ0‰ä% dÑ+ˆÙ�q˜+Ó&ˆä�eœUÔ#Ð#Ð#Ü˜%¤"§*¡*¬b¯j©jÐ!9Ô:Ð:Ð:Ð:r#   c                 ó–   — t        j                  g d¢«      }t         j                  j                  dd¬«      }t	        | |||||¬«       y )NrA   rB   rC   r   )Úa_npÚb_np)r7   r8   rF   rG   r   )r   Úarray_namespaceÚdeviceÚ
dtype_namerI   rK   s         r$   Ú#check_array_api_unsupervised_metricr‚   ò   sD   € Ü�X‰XÒ+Ó,€FÜ
�	‰	×Ñ˜" 7ÐÓ+€AäØØØØØØör#   c              #   óV   K  — | j                  «       D ]  \  }}|D ]  }||f–— Œ
 Œ y ­wr   )Úitems)Úmetric_checkersr   ÚcheckersÚcheckers       r$   Ú!yield_metric_checker_combinationsrˆ   
  s<   è ø€ Ø+×1Ñ1Ó3ò "Ñˆ�Øò 	"ˆGØ˜'�/Ó!ñ	"ñ"ùs   ‚')z#array_namespace, device, dtype_name)Úidszmetric, check_funcc                 ó   —  || |||«       y r   r"   )r   r   r€   r�   Ú
check_funcs        r$   Útest_array_api_compliancerŒ     s   € ñ ˆv�¨°
Õ;r#   )8Ú	functoolsr   Ú	itertoolsr   Únumpyr7   r(   Úsklearn.metrics.clusterr   r   r   r   r	   r
   r   r   r   r   r   r   Ú!sklearn.metrics.tests.test_commonr   Úsklearn.utils._array_apir   r   Úsklearn.utils._testingr   r!   rE   r   r    ÚNORMALIZED_METRICSrF   rt   rx   rG   r,   r-   r%   ÚmarkÚparametrizer.   r1   r?   rL   rb   Úvaluesrf   Údictr„   rp   r{   r‚   Úarray_api_metric_checkersrˆ   rŒ   )rq   s   0r$   ú<module>rš      sþ  ðÝ Ý ã Û ÷÷ ÷ ó õ E÷õ 3ð #=Ø.ØØ,Ø*Ø*Ø$@Ø&Ø2ñ
Ð ð )Ù#Ð$4¸[ÔIØ6Ø0ñ	Ð ò Ð ð -Ð.BÐCÐ ò	Ð ð 	‡i�i×Ñ˜AÓ€Ø‡[�[�˜€[Ó€Ø‡[�[�˜€[Ó€òð ‡�×ÑØÐ7HÖI¨t˜T 2 ršNÒIóñ;óð;ð
 ‡�×ÑØÐ7LÖM¨t˜T 2 ršNÒMóñ;óð;ð
 ‡�×Ñ˜Ð(:Ó;ñ!ó <ð!ð$ ‡�×Ñ˜©Ð.@ÐBVÓ(WÓXñ8ó Yð8ð$ ‡�×Ñ˜©Ð.@ÐBVÓ(WÓXñ4ó Yð4ðB ‡�×Ñ˜Ð#5×#<Ñ#<Ó#>Ó?ñó @ðð ‡�×ÑØ¡Ð%7Ñ PÐ;OÑ P× VÑ VÓ Xóñóðð ‡�×Ñ˜¡Ð'9Ð;OÓ!PÓQñ;ó Rð;ò,ð Ø+ðð Ø+ðð	Ð ð 7Pó "ð ‡�×ÑØ)Ù-Ó/Ø'ð ó ð
 ‡�×ÑÐ-Ñ/PÓ/RÓSñ<ó Tóñ<ùò[ Jùò Ns   Ã
I8
Ã=I=
