
    Ug9                     
   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d Z ed           Zd	Zd
ZdZe                    eef          Ze                    eef          Ze                    d          Z e                    d          Z! eeeg          \  Z"Z#edk                         ej$                  Z%edk                         ej$                  Z& ee%e&g          \  Z'Z(e                    eef          Z) ej*        e)e)j+                  Z,di fdi fd e-d          fdi fd e-e                    e          f          fd e-e,f          fdi fdi fdi fd e-de                    e          f          fg
Z.ej/        0                    de.d            ej/        0                    d!eefe e!fe"e#fg          ej/        0                    d"e          d#                                     Z1ej/        0                    d$e          ej/        0                    d%e%e&fe'e(fg          ej/        0                    d"e          d&                                     Z2ej/        0                    de.d'            ej/        0                    d(ee e"g          ej/        0                    d"e          d)                                     Z3ej/        0                    de.d*            d+             Z4ej/        0                    d$e          ej/        0                    d,e%e'g          ej/        0                    d"e          d-                                     Z5ej/        0                    d.d/d0g          ej/        0                    de.d1            ej/        0                    d(ee g          d2                                     Z6ej/        0                    d$e          ej/        0                    d,e%e'g          d3                         Z7ej/        0                    d!eefe e!fe"e#fg          ej/        0                    d"e          d4                         Z8d5 Z9d6 Z:d7 Z;ej/        0                    d8 ej<        g d9          e=d:f ej<        d;d<ej>        g          e=d=fgd> eD              ej<        g d?          e=d@f ej<        g           e=dAf          dB             Z?dC Z@ej/        0                    dDe.          ej/        0                    dEejA        ej$        f          dF                         ZBdG ZCdH ZDdS )I    N)cdist)DistanceMetric)BOOL_METRICSDistanceMetric32DistanceMetric64)check_random_state)assert_allclosecreate_memmap_backed_data)CSR_CONTAINERSparse_version
sp_versionc                 B    t          j        | |z
  |z            d|z  z  S )Ng      ?)npsum)x1x2ps      f/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/metrics/tests/test_dist_metrics.py	dist_funcr      s#    627q.!!cAg..             float32g333333?gffffff?	euclidean	cityblock	minkowski)      ?         ?      r   	chebyshev
seuclideanVmahalanobisVIhammingcanberra
braycurtis)r   r   r    r"   r   wmetric_param_gridc                     | d         S Nr    paramss    r   <lambda>r6   <   
    F1I r   )idszX, Ycsr_containerc                    | \  }}|                                 } ||           ||          }}t          j        |                                 D ]p}	t	          t          ||	                    }
i }|dk    r|j        t          j        k    rddi}|dk    r:|
d         }t          t          d          k     r|dk     rt          j        d           t          |||fi |
}t          j        ||j        fi |
}|                    ||          }|j        j        sJ t'          ||fi | |                    ||          }|j        j        sJ t'          ||fi | |                    ||          }|j        j        sJ t'          ||fi | |                    ||          }|j        j        sJ t'          ||fi | rd S 	Nr(   rtolư>r   r   z1.7.0r   z9scipy does not support 0<p<1 for minkowski metric < 1.7.0keys	itertoolsproductvaluesdictzipdtyper   r   r   r   pytestskipr   r   
get_metricpairwiseflagsc_contiguousr	   )r0   XYr9   metric
param_gridr?   X_csrY_csrvalskwargs	rtol_dictr   D_scipy_cdistdm	D_sklearns                   r   
test_cdistrX   ;   s    +FJ??D =##]]1%5%55E!:#4#4#6#67 &? &?c$oo&&	]""qw"*'<'<  I [  sAM'2222q1uuWXXXaF55f55&vqwAA&AA KK1%%	++++	=>>I>>>KKu--	++++	=>>I>>>KKq))	++++	=>>I>>>KK5))	++++	=>>I>>>>M&? &?r   rN   zX_bool, Y_boolc                 h   t          |||           }t          j        |           }|                    ||          }t	          ||            ||           ||          }}|                    ||          }|j        j        sJ t	          ||           |                    ||          }|j        j        sJ t	          ||           |                    ||          }|j        j        sJ t	          ||           |                    ||          }|j        j        sJ t	          ||           d S N)r   r   rH   rI   r	   rJ   rK   )	rN   X_boolY_boolr9   rU   rV   rW   
X_bool_csr
Y_bool_csrs	            r   test_cdist_bool_metricr_   m   s=    &&&11M		"6	*	*BFF++II}--- +]622MM&4I4I
JFF++I?''''I}---J
33I?''''I}---FJ//I?''''I}---J//I?''''I}-----r   c                     | d         S r2   r3   r4   s    r   r6   r6      r7   r   rL   c                 
   | \  }}|                                 } ||          }t          j        |                                 D ]<}t	          t          ||                    }i }	|dk    r|j        t          j        k    rddi}	|dk    r:|d         }
t          t          d          k     r|
dk     rt          j        d           t          |||fi |}t          j        ||j        fi |}|                    |          }|j        j        sJ t'          ||fi |	 |                    |          }|j        j        sJ t'          ||fi |	 |                    ||          }|j        j        sJ t'          ||fi |	 >d S r;   r>   )r0   rL   r9   rN   rO   r?   rP   rR   rS   rT   r   D_scipy_pdistrV   rW   D_sklearn_csrs                  r   
test_pdistrd      s    +FJ??DM!E!:#4#4#6#67 C Cc$oo&&	]""qw"*'<'<  I [  sAM'2222q1uuWXXXaF55f55&vqwAA&AAKKNN	++++	=>>I>>>E**++++}BB	BBBE511++++}BB	BBBB=C Cr   c                     | d         S r2   r3   r4   s    r   r6   r6      r7   r   c                    | \  }}|                                 }d}t          j        |                                 D ] }t	          t          ||                    }t          j        |t          j	        fi |}t          j        |t          j
        fi |}|                    t                    }	|                    t                    }
|	j        t          j	        k    sJ |
j        t          j
        k    sJ t          |	|
|           |                    t          t                     }	|                    t          t"                    }
t          |	|
|           "d S )Ngh㈵>r<   )r?   r@   rA   rB   rC   rD   r   rH   r   float64r   rI   X64X32rE   r	   Y64Y32)r0   rN   rO   r?   r<   rR   rS   dm64dm32D64D32s              r   'test_distance_metrics_dtype_consistencyrq      s?    +FJ??D D!:#4#4#6#67 - -c$oo&&(FFvFF(FFvFFmmC  mmC  yBJ&&&&yBJ&&&&
 	St,,,,mmC%%mmC%%St,,,,,%- -r   r[   c                     t          |||           }t          j        |           }|                    |          }t	          ||            ||          }|                    |          }t	          ||           d S rZ   )r   r   rH   rI   r	   )rN   r[   r9   rb   rV   rW   r]   s          r   test_pdist_bool_metricsrs      s|     &&&11M		"6	*	*BF##II}---v&&JJ''II}-----r   writable_kwargsTFc                     | d         S r2   r3   r4   s    r   r6   r6      r7   r   c                 l   |\  }}|                                 }t          j        |                                 D ]}t	          d |D                       rIt          j        |          }|D ]2}t          |t          j	                  r|
                    |            3t          t          ||                    }t          j        ||j        fi |}	|	                    |          }
t#          j        t#          j        |	                    }|                    |          }t)          |
|           d S )Nc              3   J   K   | ]}t          |t          j                  V  d S rZ   )
isinstancer   ndarray).0vals     r   	<genexpr>ztest_pickle.<locals>.<genexpr>   s.      ;;sz#rz**;;;;;;r   write)r?   r@   rA   rB   anycopydeepcopyrx   r   ry   setflagsrC   rD   r   rH   rE   rI   pickleloadsdumpsr	   )rt   r0   rL   rN   rO   r?   rR   r{   rS   rV   D1dm2D2s                r   test_pickler      s+    +FJ??D!:#4#4#6#67    ;;d;;;;; 	8=&&D 8 8c2:.. 8LLL777c$oo&&&vqwAA&AA[[^^l6<++,,\\!__B   r   c                     t          j        |           }|                    |          }t          j        t          j        |                    }|                    |          }t          ||           d S rZ   )r   rH   rI   r   r   r   r	   )rN   r[   rV   r   r   r   s         r   test_pickle_bool_metricsr      se     
	"6	*	*B	V		B
,v|B''
(
(C	f		BBr   c                    t          j        | d d d df                   } t          j        |d d d df                   } ||            ||          }}d }t          j        |j        d         |j        d         f          }t	          |           D ]+\  }}t	          |          D ]\  }	}
 |||
          |||	f<   ,t          j        d| j                  }|                    | |          }t          |
                    |          t          j        d|z            dz  d           t          ||           |                    ||          }|j        j        sJ t          ||           |                    ||          }|j        j        sJ t          ||           |                    | |          }|j        j        sJ t          ||           d S )Nr!   c                 b   dt          j        t          j        t          j        d| d         |d         z
  z            dz  t          j        | d                   t          j        |d                   z  t          j        d| d         |d         z
  z            dz  z  z                       z  S )Nr!   r   r   r   )r   arcsinsqrtsincos)r   r   s     r   haversine_slowz-test_haversine_metric.<locals>.haversine_slow  s    29Gsbebem,--2&A--"&A--/"&119N2O2OST2TTU 
 
 
 	
r   r   	haversiner   r=   rg   )r   asarrayzerosshape	enumerater   rH   rE   rI   r	   dist_to_rdistr   rJ   rK   )rL   rM   r9   rP   rQ   r   D_referenceixijyjr   rW   s                r   test_haversine_metricr     s
    	
1QQQU8A

1QQQU8A =##]]1%5%55E
 
 
 (EKNEKN;<<K1 7 72q\\ 	7 	7EAr .r2 6 6K1	7 )+qw??I""1a((I	**BF33D,E,E,JQU    I{+++""5%00I?''''I{+++""5!,,I?''''I{+++""1e,,I?''''I{+++++r   c                  $   t           j                            d          } t          j        d          }t          j        dt          d          }t          j        t          j        |                    }t          j        t          j        |                    }|                    |           }|                    |           }|                    |           }|                    |           }t          ||           t          ||           d S )N)
   r"   r   pyfuncr!   )funcr   )
r   randomr   rH   r   r   r   r   rI   r	   )	rL   r   r   euclidean_pkl
pyfunc_pklr   r   D1_pklD2_pkls	            r   test_pyfunc_metricr   6  s    
	!!A)+66I&xi1EEEF Li!8!899Mfl62233J			A		B			B##A&&F  ##FBFF#####r   c                     d } t          d          }|                    dd          }t          j        d|           }t          j        d          }t	          |                    |          |                    |          dz             d S )	Nc                 \    | j         d         dk    sJ t          j        | |z
  dz            S )Nr   r"   r!   )r   r   r   )xys     r   custom_metricz+test_input_data_size.<locals>.custom_metricN  s-    wqzQvq1ul###r   r   r   r"   r   )r   r   r!   )r   randr   rH   r	   rI   )r   rngrL   r   eucls        r   test_input_data_sizer   K  s    $ $ $ Q

CQA&xmDDDF$[11DFOOA&&a(8(8A(=>>>>>r   c                  *   t          d          } |                     d          }|                     dd          }|                    d           |                    d           t          j        d|           t          j        d|	           d S )
Nr   d   r   Fr}   r%   r&   r(   r)   )r   r   r   r   rH   )r   weightsr*   s      r   test_readonly_kwargsr   Z  s     Q

ChhsmmG	"b		B5!!!KKeK lg6666m333333r   zw, err_type, err_msg)r   r    iz!w cannot contain negative weightsr   r    zw contains NaNc                 :    g | ]} |g d g          t           dfS ))r   r    r   z8Sparse data was passed for w, but dense data is required)	TypeError)rz   r9   s     r   
<listcomp>r   o  sE     

 

 

 	 {{{m,,J

 

 

r   )abcz!could not convert string to floatza minimum of 1 is requiredc                     t          j        ||          5  t          j        dd|            d d d            d S # 1 swxY w Y   d S )Nmatchr   r"   r.   )rF   raisesr   rH   )r/   err_typeerr_msgs      r   -test_minkowski_metric_validate_weights_valuesr   j  s    $ 
xw	/	/	/ 9 9!+a88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   <A A c                  h   t                               t          dz             } t          j        dd|           }dt
          j        d          d| j        d          d}t          j        t          |	          5  |
                    t
          t                     d d d            d S # 1 swxY w Y   d S )
Nr   r   r"   r.   zEMinkowskiDistance: the size of w must match the number of features \(z\). Currently len\(w\)=r   .r   )r   random_sampledr   rH   ri   r   rF   r   
ValueErrorrI   rk   )w2rV   msgs      r   +test_minkowski_metric_validate_weights_sizer     s    			1q5	!	!B		";!r	:	:	:B	/%(Yq\	/ 	/ "	/ 	/ 	/ 
 
z	-	-	-  
C                 s   9!B''B+.B+zmetric, metric_kwargsrE   c                    t           j        t          t           j        t          i|         }d |                                D             }t          t          j        | |fi |          }t           |j        | fi |          }||u sJ d S )Nc                 &    i | ]\  }}||d          S )r   r3   )rz   kvs      r   
<dictcomp>z)test_get_metric_dtype.<locals>.<dictcomp>  s"    ???AQ!???r   )	r   r   r   rh   r   itemstyper   rH   )rN   metric_kwargsrE   specialized_clsgeneric_typespecialized_types         r   test_get_metric_dtyper     s     	
$

$ O @?)<)<)>)>???M1&%QQ=QQRRL6O6vOOOOPP+++++++r   c                      t           j        } d}t          j        t          |          5  t          j        d|            d d d            d S # 1 swxY w Y   d S )Nz8Unexpected dtype .* provided. Please select a dtype fromr   	manhattan)r   int32rF   r   r   r   rH   )rE   r   s     r   test_get_metric_bad_dtyper     s    HE
EC	z	-	-	- 6 6!+u5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   AAAc                      d} t          j        t          |           5  t          j        dd           d d d            d S # 1 swxY w Y   d S )Nzp must be greater than 0r   r   r   r#   )rF   r   r   r   rH   )r   s    r   .test_minkowski_metric_validate_bad_p_parameterr     s    
$C	z	-	-	- 4 4!+33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   AA	A)Er   r@   r   numpyr   rF   scipy.spatial.distancer   sklearn.metricsr   sklearn.metrics._dist_metricsr   r   r   sklearn.utilsr   sklearn.utils._testingr	   r
   sklearn.utils.fixesr   r   r   r   r   r   n1n2r   ri   rk   astyperj   rl   X_mmapY_mmaprh   r[   r\   X_bool_mmapY_bool_mmapr'   dotTr*   rC   METRICS_DEFAULT_PARAMSmarkparametrizerX   r_   rd   rq   rs   r   r   r   r   r   r   arrayr   nanr   r   r   r   r   r   r3   r   r   <module>r      s              ( ( ( ( ( ( * * * * * *         
 - , , , , , M M M M M M M M I I I I I I I I I I/ / / 	Q  	Q  	jj	jj,,c3Z88  )		BJ	'	'
)		BJ	'	'667GHH k q!fRVAqs^^ ""$$,---."443,,Q//12223DDRENNN#O2$$)c.?.?.B.B-DEEEF  /5M5M    3*sCj66:J!KLL.99*? *? :9 ML 
*?Z <00'+{)CD  .99. . :9  10
.8 /5M5M    sC011.99"C "C :9 21 
"CJ /5M5M   - - -> <00FK#899.99. . :9 :9 10. *T5M::/5M5M    sCj))    *)  ;:
 " <00FK#899  :9 10 3*sCj66:J!KLL.99), ), :9 ML),X$ $ $*? ? ?4 4 4  	---	 	 *.QR	1c26"	#	#Z1AB

 

 "0

 

 

 
///	"	"J0ST 
"z#?@ "9 9# "9
	 	 	 02HII2:rz":;;, , <; JI,6 6 64 4 4 4 4r   