§
    rŠtj%  ã            
       ó8  — 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                              d ¦  «        Z!e! "                    dd¬¦  «        Z#e! "                    dd¬¦  «        Z$d„ Z%ej&         '                    dd„ eD ¦   «         ¦  «        d„ ¦   «         Z(ej&         '                    dd„ eD ¦   «         ¦  «        d„ ¦   «         Z)ej&         '                    de¦  «        d„ ¦   «         Z*ej&         '                    d eee¦  «        ¦  «        d„ ¦   «         Z+ej&         '                    d eee¦  «        ¦  «        d„ ¦   «         Z,ej&         '                    de -                    ¦   «         ¦  «        d„ ¦   «         Z.ej&         '                    d e/efi e¤Ž 0                    ¦   «         ¦  «        d „ ¦   «         Z1ej&         '                    d! eee¦  «        ¦  «        d"„ ¦   «         Z2d#„ Z3e
e3gee3giZ4e4fd$„Z5ej&         '                    d% e¦   «         ¦  «        ej&         '                    d& e5¦   «         ¦  «        d'„ ¦   «         ¦   «         Z6dS )(é    )Ú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                  ón   — t          t          t          z   ¦  «        t          t          ¦  «        k    sJ ‚d S ©N)ÚsortedÚSYMMETRIC_METRICSÚNON_SYMMETRIC_METRICSÚSUPERVISED_METRICS© ó    úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/metrics/cluster/tests/test_common.pyÚ"test_symmetric_non_symmetric_unionr$   a   sC   € ÝÕ#Õ&;Ñ;Ñ<Ô<ÅÝñAô Aò ð ð ð ð ð r"   zmetric_name, y1, y2c                 ó,   — g | ]}|t           t          f‘ŒS r!   ©Úy1Úy2©Ú.0Únames     r#   ú
<listcomp>r,   h   s   € ÐIÐIÐI¨t˜T¥2¥r˜NÐIÐIÐIr"   c                 ó|   — t           |          } |||¦  «        t          j         |||¦  «        ¦  «        k    sJ ‚d S r   ©r    ÚpytestÚapprox©Úmetric_namer'   r(   r   s       r#   Útest_symmetryr3   g   óC   € õ   Ô,€FØˆ6�"�b‰>Œ>�Vœ]¨6¨6°"°b©>¬>Ñ:Ô:Ò:Ð:Ð:Ð:Ð:Ð:r"   c                 ó,   — g | ]}|t           t          f‘ŒS r!   r&   r)   s     r#   r,   r,   p   s   € ÐMÐMÐM¨t˜T¥2¥r˜NÐMÐMÐMr"   c                 ó|   — t           |          } |||¦  «        t          j         |||¦  «        ¦  «        k    sJ ‚d S r   r.   r1   s       r#   Útest_non_symmetryr7   o   r4   r"   r2   c                 óÀ  — g d¢}g d¢}t           |          } |g d¢g d¢¦  «        dk    sJ ‚ |g d¢g d¢¦  «        dk    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                          ¦   «         rJ ‚d S )N)r   r   r   é   r9   r9   )r   r   r   r9   r9   )r   r   r   r9   é   g        )r   r   r9   r9   r:   )r   r   r9   r9   r9   )r   r9   r9   r9   r9   g      ð?)r   r   r   r   r   r   )r   r9   r:   r   é   é   r   )r    r/   r0   ÚnpÚarrayÚany)r2   Úupper_bound_1Úupper_bound_2r   Úlower_bound_1Úlower_bound_2Úscores          r#   Útest_normalized_outputrE   w   sF  € à&Ð&Ð&€MØ&Ð&Ð&€MÝ Ô,€FØˆ6�/�/�/ ? ? ?Ñ3Ô3°cÒ9Ð9Ð9Ð9Øˆ6�/�/�/ ? ? ?Ñ3Ô3°cÒ9Ð9Ð9Ð9Øˆ6�/�/�/ ? ? ?Ñ3Ô3°cÒ9Ð9Ð9Ð9Øˆ6�/�/�/ ? ? ?Ñ3Ô3°cÒ9Ð9Ð9Ð9Øˆ6�- Ñ/Ô/µ6´=ÀÑ3EÔ3EÒEÐEÐEÐEà&Ð&Ð&€MØ&Ð&Ð&€MÝŒHØ	ˆ�˜}Ñ	-Ô	-¨v¨v°mÀ]Ñ/SÔ/SÐTñô €Eð ˜’	�ŠÑ Ô Ð Ð Ð Ð Ð r"   c                 ó  — t          j        g d¢¦  «        }t          j        g d¢¦  «        }| t          v rut          |          } |||¦  «        }t          | |d|z
  |¦  «        ¦  «         t          | |d|z
  d|z
  ¦  «        ¦  «         t          | ||d|z
  ¦  «        ¦  «         d S t          |          }t           j                             dd¬¦  «        } |||¦  «        }t          | ||d|z
  ¦  «        ¦  «         d S )N)r   r   r   r9   r9   r   r9   ©r9   r   r9   r   r9   r9   r   r9   é
   ©é   rH   r   )r=   r>   r    r   ÚUNSUPERVISED_METRICSÚrandomÚrandint)r2   Úy_labelÚy_predr   Úscore_1ÚXs         r#   Útest_permute_labelsrR   Š   s  € õ ŒhÐ,Ð,Ð,Ñ-Ô-€GÝŒXÐ+Ð+Ð+Ñ,Ô,€FØÕ(Ð(Ð(Ý# KÔ0ˆØ�&˜ Ñ)Ô)ˆÝ˜  ¨¨F©
°GÑ!<Ô!<Ñ=Ô=Ð=Ý˜  ¨¨F©
°A¸±KÑ!@Ô!@ÑAÔAÐAÝ˜  ¨°°G±Ñ!<Ô!<Ñ=Ô=Ð=Ð=Ð=å% kÔ2ˆÝŒI×Ò˜b wÐÑ/Ô/ˆØ�&˜˜FÑ#Ô#ˆÝ˜  ¨¨1¨v©:Ñ!6Ô!6Ñ7Ô7Ð7Ð7Ð7r"   c                 óþ  — g d¢}g d¢}d„ }| t           v r_t           |          } |||¦  «        } ||¦  «        } ||¦  «        }t          ||¦  «        D ]\  \  }}	\  }
}| |||
¦  «        k    sJ ‚Œd S t          |          }t          j                             dd¬¦  «        } |||¦  «        }| ||                     t          ¦  «        |¦  «        k    sJ ‚ ||¦  «        }|D ]\  }}	| |||¦  «        k    sJ ‚Œd S )N)r   r   r   r   r9   r9   r9   r9   )r   r9   r:   r   r;   r<   é   rJ   c              3   óL  K  — t          j        | ¦  «        } | dfV — |                      ¦   «         dfV — d„ |                      ¦   «         D ¦   «         dfV — t          j        d„ |                      ¦   «         D ¦   «         t          ¬¦  «        dfV — | dz
  d	fV — | dz   d
fV — d S )Nzarray of intszlist of intsc                 ó2   — g | ]}t          |¦  «        d z   ‘ŒS ©z-a©Ústr©r*   Úxs     r#   r,   zDtest_format_invariance.<locals>.generate_formats.<locals>.<listcomp>¨   s"   € Ð1Ð1Ð1 �s�1‰vŒv˜‰}Ð1Ð1Ð1r"   zlist of strsc                 ó2   — g | ]}t          |¦  «        d z   ‘ŒS rW   rX   rZ   s     r#   r,   zDtest_format_invariance.<locals>.generate_formats.<locals>.<listcomp>ª   s"   € Ð8Ð8Ð8¨•c˜!‘f”f˜t‘mÐ8Ð8Ð8r"   )Údtypezarray of strsr9   zincluding negative intszstrictly positive ints)r=   r>   ÚtolistÚobject)Úys    r#   Úgenerate_formatsz0test_format_invariance.<locals>.generate_formats¤   sØ   è è € ÝŒH�Q‰KŒKˆØ�Ð Ð Ð Ð Ø�hŠh‰jŒj˜.Ð(Ð(Ð(Ð(Ø1Ð1 a§h¢h¡j¤jÐ1Ñ1Ô1°>ÐAÐAÐAÐAåŒHÐ8Ð8¨Q¯XªX©Z¬ZÐ8Ñ8Ô8ÅÐGÑGÔGØð
ð 	
ð 	
ð 	
ð �!‰eÐ.Ð.Ð.Ð.Ð.Ø�!‰eÐ-Ð-Ð-Ð-Ð-Ð-Ð-r"   rH   )é   rH   r   )r    ÚziprK   r=   rL   rM   ÚastypeÚfloat)r2   Úy_truerO   ra   r   rP   Ú
y_true_genÚ
y_pred_genÚ
y_true_fmtÚfmt_nameÚ
y_pred_fmtÚ_rQ   s                r#   Útest_format_invariancerm   �   so  € ð &Ð%Ð%€FØ%Ð%Ð%€Fð
.ð 
.ð 
.ð Õ(Ð(Ð(Ý# KÔ0ˆØ�&˜ Ñ(Ô(ˆØ%Ð% fÑ-Ô-ˆ
Ø%Ð% fÑ-Ô-ˆ
Ý7:¸:ÀzÑ7RÔ7Rð 	=ð 	=Ñ3Ñ"ˆZ˜¡O Z°Ø˜f˜f Z°Ñ<Ô<Ò<Ð<Ð<Ð<Ð<ð	=ð 	=õ & kÔ2ˆÝŒI×Ò˜b wÐÑ/Ô/ˆØ�&˜˜FÑ#Ô#ˆØ˜&˜& §¢­%¡¤°&Ñ9Ô9Ò9Ð9Ð9Ð9Ø%Ð% fÑ-Ô-ˆ
Ø$.ð 	4ð 	4Ñ ˆJ˜Ø˜f˜f Q¨
Ñ3Ô3Ò3Ð3Ð3Ð3Ð3ð	4ð 	4r"   r   c                 ó2   — dD ]\  }} | |g|g¦  «         Œd S )N))r   r   )r   r9   )r9   r   )r9   r9   r!   )r   ÚiÚjs      r#   Útest_single_samplerq   Á   s:   € ð 1ð ð ‰ˆˆ1Øˆ�ˆs�Q�CÑÔÐÐðð r"   zmetric_name, metric_funcc                 ó  — | t           v rTd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}nnt          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 ¦  «         d S # 1 swxY w Y   d S )Nr   r9   rH   )r:   rH   r   zcontains (NaN|infinity))Úmatch)	r    r=   ÚinfÚnanrL   rM   r/   ÚraisesÚ
ValueError)r2   Úmetric_funcÚinvalidsrQ   Úargss        r#   Útest_inf_nan_inputr{   È   sH  € ð Õ(Ð(Ð(à�ˆV•b”f�bœfÐ%Ð&Ø�ˆV•b”f�bœfÐ%Ð&Ø�ˆV•b”f�bœfÐ%Ð&ð
ˆˆõ ŒI×Ò˜b wÐÑ/Ô/ˆØ�œ¥¤Ð(Ð)¨Aµ´½¼Ð/?Ð+@À1ÅrÄvÍrÌvÐFVÐBWÐXˆÝ	Œ•zÐ)CÐ	DÑ	DÔ	Dð ð Øð 	ð 	ˆDØˆK˜ÐÐÐð	ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Ã'D Ä DÄDr+   c                 óÈ  — t           j                             d¦  «        }|                     dd¬¦  «        }|                     ddd¬¦  «        }|                     ddd¬¦  «        }| t          v rt          |          } |||¦  «        }nt
          |          } |||¦  «        }t          |t          ¦  «        sJ ‚t          |t           j        t           j	        f¦  «        rJ ‚dS )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   rH   )é   rH   r   r   )r}   N)
r=   rL   ÚRandomStaterM   r    rK   Ú
isinstancere   Úfloat64Úfloat32)r+   ÚrngrQ   Úlabels_trueÚlabels_predr   rD   s          r#   Útest_returned_value_consistencyr…   Ú   sÛ   € õ Œ)×
Ò
 Ñ
"Ô
"€CØ�Š�B˜XˆÑ&Ô&€AØ—+’+˜a ¨�+Ñ/Ô/€KØ—+’+˜a ¨�+Ñ/Ô/€KàÕ!Ð!Ð!Ý# DÔ)ˆØ��{ KÑ0Ô0ˆˆå% dÔ+ˆØ��q˜+Ñ&Ô&ˆå�e�UÑ#Ô#Ð#Ð#Ð#Ý˜%¥"¤*­b¬jÐ!9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:r"   c                 óž   — t          j        g d¢¦  «        }t           j                             dd¬¦  «        }t	          | |||||¬¦  «         d S )NrG   rH   rI   r   )Úa_npÚb_np)r=   r>   rL   rM   r   )r   Úarray_namespaceÚdevice_nameÚ
dtype_namerO   rQ   s         r#   Ú#check_array_api_unsupervised_metricrŒ   ñ   sg   € õ ŒXÐ+Ð+Ð+Ñ,Ô,€FÝ
Œ	×Ò˜" 7ÐÑ+Ô+€AåØØØØØØðñ ô ð ð ð 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_name, dtype_namezmetric, check_funcc                 ó"   —  || |||¦  «         d S r   r!   )r   r‰   rŠ   r‹   Ú
check_funcs        r#   Útest_array_api_compliancer•     s    € ð €Jˆv�¨°ZÑ@Ô@Ð@Ð@Ð@r"   )7Ú	functoolsr   Ú	itertoolsr   Únumpyr=   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    rK   r   r   ÚNORMALIZED_METRICSrL   r~   r‚   rM   r'   r(   r$   ÚmarkÚparametrizer3   r7   rE   rR   rm   Úvaluesrq   ÚdictrŽ   r{   r…   rŒ   Úarray_api_metric_checkersr’   r•   r!   r"   r#   ú<module>r£      s®  ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð 3Ð 2Ð 2Ð 2Ð 2Ð 2ð #=Ø.ØØ,Ø*Ø*Ø$@Ø&Ø2ð
ð 
Ð ð )Ø#˜GÐ$4¸[ÐIÑIÔIØ6Ø0ð	ð Ð ð ð ð Ð ð -Ð.BÐCÐ ð	ð 	ð 	Ð ð 	„i×Ò˜AÑÔ€Ø‡[‚[�˜€[ÑÔ€Ø‡[‚[�˜€[ÑÔ€ðð ð ð „×ÒØÐIÐIÐ7HÐIÑIÔIñô ð;ð ;ñô ð;ð
 „×ÒØÐMÐMÐ7LÐMÑMÔMñô ð;ð ;ñô ð;ð
 „×Ò˜Ð(:Ñ;Ô;ð!ð !ñ <Ô;ð!ð$ „×Ò˜¨¨Ð.@ÐBVÑ(WÔ(WÑXÔXð8ð 8ñ YÔXð8ð$ „×Ò˜¨¨Ð.@ÐBVÑ(WÔ(WÑXÔXð4ð 4ñ YÔXð4ðB „×Ò˜Ð#5×#<Ò#<Ñ#>Ô#>Ñ?Ô?ðð ñ @Ô?ðð „×ÒØ  Ð%7Ð PÐ PÐ;OÐ PÐ P× VÒ VÑ XÔ Xñô ðð ñô ðð „×Ò˜  Ð'9Ð;OÑ!PÔ!PÑQÔQð;ð ;ñ RÔQð;ð,ð ð ð" Ø+ðð Ø+ðð	Ð ð 7Pð "ð "ð "ð "ð „×ÒØ.Ø-Ð-Ñ/Ô/ñô ð „×ÒÐ-Ð/PÐ/PÑ/RÔ/RÑSÔSðAð Añ TÔSñ	ô ð
Að Að Ar"   