
    {KgK              
          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 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j6                  j9                  d       Zej=                  dd      Zej=                  dd      Z d Z!ejD                  jG                  d      ejD                  jI                  deD  cg c]  } | ee f	 c}       d               Z%ejD                  jI                  deD  cg c]  } | ee f	 c}       d        Z&ejD                  jG                  d      ejD                  jI                  de      d               Z'ejD                  jG                  d      ejD                  jI                  d eee            d               Z(ejD                  jG                  d      ejD                  jI                  d eee            d               Z)ejD                  jI                  dejU                               d        Z+ejD                  jI                  d e,efi ej[                               d        Z.y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)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     m/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_common.py"test_symmetric_non_symmetric_unionr"   ]   s+    #&;;<A   r    zignore::FutureWarningzmetric_name, y1, y2c                 f    t         |    } |||      t        j                   |||            k(  sJ y r   r   pytestapproxmetric_namey1y2r   s       r!   test_symmetryr+   d   s1    
  ,F"b>V]]6"b>::::r    c                 f    t         |    } |||      t        j                   |||            k7  sJ y r   r$   r'   s       r!   test_non_symmetryr-   m   s1      ,F"b>V]]6"b>::::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      r/   r/   )r   r   r   r/   r/   )r   r   r   r/      g        )r   r   r/   r/   r0   )r   r   r/   r/   r/   )r   r/   r/   r/   r/   g      ?)r   r   r   r   r   r   )r   r/   r0   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;   v   s     'M&M,F/?3c999/?3c999/?3c999/?3c999-/6==3EEEE&M&MHH	}	-vm]/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   r/   r/   r   r/   )r/   r   r/   r   r/   r/   r   r/   
   )   r=   r   )r3   r4   r   r   UNSUPERVISED_METRICSrandomrandint)r(   y_labely_predr   score_1Xs         r!   test_permute_labelsrF      s    
 hh,-GXX+,F((#K0)F
G!<=F
AK!@AG!<=%k2IIbw/F#1v:!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   r/   r/   r/   r/   )r   r/   r0   r   r1   r2      r>   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 strsr/   zincluding negative intszstrictly positive ints)r3   r4   toliststrobject)yxs     r!   generate_formatsz0test_format_invariance.<locals>.generate_formats   s     HHQK  hhj.((&'hhj1js1v}j1>AAHHQXXZ8Zc!ftmZ8G
 	
 !e...!e--- 28s   ACB:(CB?.Cr=   )   r=   r   )r   zipr?   r3   r@   rA   astypefloat)r(   y_truerC   rP   r   rD   
y_true_gen
y_pred_gen
y_true_fmtfmt_name
y_pred_fmt_rE   s                r!   test_format_invariancer\      s    
 &F%F
. ((#K0(%f-
%f-
7::z7R3"ZOZfZ<<<< 8S &k2IIbw/F#&%&9999%f-
$. JfQ
3333 %/r    r   c                 .    dD ]  \  }} | |g|g        y )N))r   r   )r   r/   )r/   r   )r/   r/   r   )r   ijs      r!   test_single_sampler`      s      11sQC 1r    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}nt        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   r/   r=   )r0   r=   r   zcontains (NaN|infinity))match)	r   r3   infnanr@   rA   r%   raises
ValueError)r(   metric_funcinvalidsrE   argss        r!   test_inf_nan_inputrj      s     ((Vbffbff%&Vbffbff%&Vbffbff%&
 IIbw/()A/?+@1rvvrvvFVBWX	z)C	DD  
E	D	Ds   D--D6)/	functoolsr   	itertoolsr   numpyr3   r%   sklearn.metrics.clusterr   r   r   r   r	   r
   r   r   r   r   r   r   sklearn.utils._testingr   r   r?   r   r   NORMALIZED_METRICSr@   RandomStaterngrA   r)   r*   r"   markfilterwarningsparametrizer+   r-   r;   rF   r\   valuesr`   dictitemsrj   )names   0r!   <module>rz      s          3 #=.,**$@&2
  )#$4[I60	    -.BC 	  	iiA[[[[[[ 347HI7HtT2rN7HI; 5;
 7LM7LtT2rN7LM;; 34(:;! < 5!& 34.@BV(WX8 Y 58& 34.@BV(WX4 Y 54B #5#<#<#>? @ %7 P;O P V V XS J Ns   II!
