
    =[g              
          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D  cg c]  } | ee f	 c}       d        Z$ejD                  jG                  deD  cg c]  } | ee f	 c}       d        Z%ejD                  jG                  de      d        Z&ejD                  jG                  d eee            d        Z'ejD                  jG                  d eee            d        Z(ejD                  jG                  dejS                               d        Z*ejD                  jG                  d e+efi ejY                               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     d/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_common.py"test_symmetric_non_symmetric_unionr"   ]   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+   c   1      ,F"b>V]]6"b>::::r    c                 f    t         |    } |||      t        j                   |||            k7  sJ y r   r$   r'   s       r!   test_non_symmetryr.   k   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      r0   r0   )r   r   r   r0   r0   )r   r   r   r0      g        )r   r   r0   r0   r1   )r   r   r0   r0   r0   )r   r0   r0   r0   r0   g      ?)r   r   r   r   r   r   )r   r0   r1   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<   s   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   r0   r0   r   r0   )r0   r   r0   r   r0   r0   r   r0   
   )   r>   r   )r4   r5   r   r   UNSUPERVISED_METRICSrandomrandint)r(   y_labely_predr   score_1Xs         r!   test_permute_labelsrG      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   r0   r0   r0   r0   )r   r0   r1   r   r2   r3      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 strsr0   zincluding negative intszstrictly positive ints)r4   r5   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@   r4   rA   rB   astypefloat)r(   y_truerD   rQ   r   rE   
y_true_gen
y_pred_gen
y_true_fmtfmt_name
y_pred_fmt_rF   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   r0   )r0   r   )r0   r0   r   )r   ijs      r!   test_single_samplera      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   r0   r>   )r1   r>   r   zcontains (NaN|infinity))match)	r   r4   infnanrA   rB   r%   raises
ValueError)r(   metric_funcinvalidsrF   argss        r!   test_inf_nan_inputrk      s     ((Vbffbff%&Vbffbff%&Vbffbff%&
 IIbw/()A/?+@1rvvrvvFVBWX	z)C	DD  
E	D	Ds   D--D6).	functoolsr   	itertoolsr   numpyr4   r%   sklearn.metrics.clusterr   r   r   r   r	   r
   r   r   r   r   r   r   sklearn.utils._testingr   r   r@   r   r   NORMALIZED_METRICSrA   RandomStaterngrB   r)   r*   r"   markparametrizer+   r.   r<   rG   r]   valuesra   dictitemsrk   )names   0r!   <module>rz      sI          3 #=.,**$@&2
  )#$4[I60	    -.BC 	  	iiA[[[[[[ 7HI7HtT2rN7HI;;
 7LM7LtT2rN7LM;;
 (:;! <!$ .@BV(WX8 Y8$ .@BV(WX4 Y4B #5#<#<#>? @ %7 P;O P V V XG J Ns   <G$
/G)
