Ë
    8Ò^j%  ã            
       óü  — 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 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>                  jA                  d «      Z!e!jE                  dd¬«      Z#e!jE                  dd¬«      Z$d„ Z%ejL                  jO                  deD � cg c]  } | e#e$f‘Œ	 c} «      d„ «       Z(ejL                  jO                  deD � cg c]  } | e#e$f‘Œ	 c} «      d„ «       Z)ejL                  jO                  de«      d„ «       Z*ejL                  jO                  d eee«      «      d„ «       Z+ejL                  jO                  d eee«      «      d„ «       Z,ejL                  jO                  dej[                  «       «      d„ «       Z.ejL                  jO                  d e/efi e¤Žja                  «       «      d„ «       Z1ejL                  jO                  d eee«      «      d „ «       Z2d!„ Z3e
e3gee3giZ4e4fd"„Z5ejL                  jO                  d# e«       «      ejL                  jO                  d$ e5«       «      d%„ «       «       Z6y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)Ú)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© ó    út/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_common.pyÚ"test_symmetric_non_symmetric_unionr$   a   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-   g   ó1   € ô   Ñ,€FÙ�"�b‹>œVŸ]™]©6°"°b«>Ó:Ò:Ð:Ñ:r"   c                 óf   — t         |    } |||«      t        j                   |||«      «      k7  sJ ‚y r   r&   r)   s       r#   Útest_non_symmetryr0   o   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   é   r2   r2   )r   r   r   r2   r2   )r   r   r   r2   é   g        )r   r   r2   r2   r3   )r   r   r2   r2   r2   )r   r2   r2   r2   r2   g      ð?)r   r   r   r   r   r   )r   r2   r3   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>   w   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   r2   r2   r   r2   ©r2   r   r2   r   r2   r2   r   r2   é
   ©é   rA   r   )r6   r7   r    r   ÚUNSUPERVISED_METRICSÚrandomÚrandint)r*   Úy_labelÚy_predr   Úscore_1ÚXs         r#   Útest_permute_labelsrK   Š   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   r2   r2   r2   r2   )r   r2   r3   r   r4   r5   é   rC   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 strsr2   zincluding negative intszstrictly positive ints)r6   r7   Ú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rA   )é   rA   r   )r    ÚziprD   r6   rE   rF   ÚastypeÚfloat)r*   Úy_truerH   rU   r   rI   Ú
y_true_genÚ
y_pred_genÚ
y_true_fmtÚfmt_nameÚ
y_pred_fmtÚ_rJ   s                r#   Útest_format_invariancera   �   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   r2   )r2   r   )r2   r2   r!   )r   ÚiÚjs      r#   Útest_single_samplere   Á   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   r2   rA   )r3   rA   r   zcontains (NaN|infinity))Úmatch)	r    r6   ÚinfÚnanrE   rF   r'   ÚraisesÚ
ValueError)r*   Úmetric_funcÚinvalidsrJ   Úargss        r#   Útest_inf_nan_inputro   È   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   rA   )é   rA   r   r   )rr   N)
r6   rE   ÚRandomStaterF   r    rD   Ú
isinstancerY   Úfloat64Úfloat32)rp   ÚrngrJ   Úlabels_trueÚlabels_predr   r=   s          r#   Útest_returned_value_consistencyrz   Ú   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 )Nr@   rA   rB   r   )Úa_npÚb_np)r6   r7   rE   rF   r   )r   Úarray_namespaceÚdevice_nameÚ
dtype_namerH   rJ   s         r#   Ú#check_array_api_unsupervised_metricr�   ñ   sF   € ô �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_name, dtype_namezmetric, check_funcc                 ó   —  || |||«       y r   r!   )r   r~   r   r€   Ú
check_funcs        r#   Útest_array_api_compliancerŠ     s   € ñ ˆv�¨°ZÕ@r"   )7Ú	functoolsr   Ú	itertoolsr   Únumpyr6   r'   Úsklearn.metrics.clusterr   r   r   r   r	   r
   r   r   r   r   r   r   Ú!sklearn.metrics.tests.test_commonr   Úsklearn.utils._array_apir   Úsklearn.utils._testingr   r    rD   r   r   ÚNORMALIZED_METRICSrE   rs   rw   rF   r+   r,   r$   ÚmarkÚparametrizer-   r0   r>   rK   ra   Úvaluesre   Údictrƒ   ro   rz   r�   Úarray_api_metric_checkersr‡   rŠ   )rp   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ñAó Tó	ñ
Aùò] Jùò Ns   ÃI4
Ã;I9
