Ë
    ÷Q(hEÏ  ã                   ó	  — d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 d dl
mZmZ d dlmZmZmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZ g d	¢Zd7d
ededefd„Zd„ Z d„ Z!	 	 d8d„Z"dddddddœd„Z#	 	 	 d9d„Z$dddœZ%dddœZ&eejN                  f ee"fi e&¤ŽeejP                  f ee"fi e%¤ŽeejN                  f ee$fi e&¤ŽeejP                  f ee$fi e%¤ŽiZ)d„ Z*ejV                  jY                  dddg«      d„ «       Z-ejV                  jY                  de«      d„ «       Z.d „ Z/d!„ Z0d"„ Z1d#„ Z2ejV                  jY                  d$eeg«      ejV                  jY                  d%ejN                  ejP                  g«      	 d:d&„«       «       Z3ejV                  jY                  d$eeg«      ejV                  jY                  d%ejN                  ejP                  g«      	 d:d'„«       «       Z4ejV                  jY                  d(eejN                  feejP                  feejP                  feejN                  fg«      ejV                  jY                  de«      d)„ «       «       Z5ejV                  jY                  d$eeg«      	 d;d*„«       Z6ejV                  jY                  d
e«      ejV                  jY                  d+d,«      ejV                  jY                  d%ejN                  ejP                  g«      ejV                  jY                  de«      	 	 	 d<d-„«       «       «       «       Z7ejV                  jY                  d
e«      ejV                  jY                  d+d,«      ejV                  jY                  d%ejN                  ejP                  g«      	 	 d=d.„«       «       «       Z8ejV                  jY                  d$eeg«      ejV                  jY                  d
d/d0g«      ejV                  jY                  d%ejN                  ejP                  g«      d1„ «       «       «       Z9ejV                  jY                  d%ejN                  ejP                  g«      ejV                  jY                  de«      d2„ «       «       Z:d3„ Z;ejV                  jY                  d4g d5¢«      d6„ «       Z<y)>é    N)Úpartial)Úcdist)Úeuclidean_distancesÚpairwise_distances)ÚArgKminÚArgKminClassModeÚ BaseDistancesReductionDispatcherÚRadiusNeighborsÚRadiusNeighborsClassModeÚsqeuclidean_row_norms)Úassert_allcloseÚassert_array_equalÚcreate_memmap_backed_data)ÚCSR_CONTAINERS)Ú_get_threadpool_controller)Ú
braycurtisÚcanberraÚ	chebyshevÚ	cityblockÚ	euclideanÚ	minkowskiÚ
seuclideanÚmetricÚ
n_featuresÚseedc           
      óD  — t         j                  j                  |«      }| dk(  rYt        d¬«      t        d¬«      t        d¬«      t        t         j                  ¬«      t        d|j                  |«      ¬«      g}|S | dk(  rt        |j                  |«      ¬«      gS i gS )	z5Return list of dummy DistanceMetric kwargs for tests.r   g      ø?)Úpé   é   )r   Úwr   )ÚV)ÚnpÚrandomÚRandomStateÚdictÚinfÚrand)r   r   r   ÚrngÚminkowski_kwargss        úu/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/metrics/tests/test_pairwise_distances_reduction.pyÚ_get_metric_params_listr+   +   s‹   € ô �)‰)×
Ñ
 Ó
%€Cà�Òä�3ŒKÜ�1ŒIÜ�1ŒIÜ”2—6‘6ŒNÜ�1˜Ÿ™ Ó,Ô-ð
Ðð  Ðà�ÒÜ�s—x‘x 
Ó+Ô,Ð-Ð-ð ˆ4€Kó    c                 ó@  — t        t        ||«      «      }t        t        ||«      «      }t        |«      j                  t        |«      «      }	|	D ]  }
||
   }||
   }	 t	        ||||¬«       Œ y	# t
        $ r$}t        d| › d|
› d|› d|› d|› d|› d�«      |‚d	}~ww xY w)
zÕCheck that the distances of common neighbors are equal up to tolerance.

    This does not check if there are missing neighbors in either result set.
    Missingness is handled by assert_no_missing_neighbors.
    )ÚrtolÚatolúQuery vector with index z< lead to different distances for common neighbor with index z	: dist_a=z vs dist_b=z (with atol=z
 and rtol=ú)N)r%   ÚzipÚsetÚintersectionr   ÚAssertionError)Ú	query_idxÚ
dist_row_aÚ
dist_row_bÚindices_row_aÚindices_row_br.   r/   Úindices_to_dist_aÚindices_to_dist_bÚcommon_indicesÚidxÚdist_aÚdist_bÚes                 r*   Ú*assert_same_distances_for_common_neighborsrB   D   s×   € ô" œS °
Ó;Ó<ÐÜœS °
Ó;Ó<Ðä˜Ó'×4Ñ4´S¸Ó5GÓH€NØò ˆØ" 3Ñ'ˆØ" 3Ñ'ˆð	Ü˜F F°¸DÖAñ	øô
 ò 		ô !Ø*¨9¨+ð 63Ø36°%ð 8Ø!˜( +¨f¨X°\À$Àð HØ˜˜að!óð
 ðûð			ús   ÁA0Á0	BÁ9BÂBc                 óö   — ||k  }||k  }t        j                  ||   |«      }t        j                  ||   |«      }	t        |	«      dkD  st        |«      dkD  r!t        d| › d|	› d|› d|› d|› d|› d|› d	�«      ‚y
)aó  Compare the indices of neighbors in two results sets.

    Any neighbor index with a distance below the precision threshold should
    match one in the other result set. We ignore the last few neighbors beyond
    the threshold as those can typically be missing due to rounding errors.

    For radius queries, the threshold is just the radius minus the expected
    precision level.

    For k-NN queries, it is the maximum distance to the k-th neighbor minus the
    expected precision level.
    r   r0   zC lead to mismatched result indices:
neighbors in b missing from a: z 
neighbors in a missing from b: z
dist_row_a=z
dist_row_b=z
indices_row_a=z
indices_row_b=ú
N)r"   Ú	setdiff1dÚlenr5   )
r6   r7   r8   r9   r:   Ú	thresholdÚmask_aÚmask_bÚmissing_from_bÚmissing_from_as
             r*   Úassert_no_missing_neighborsrL   j   s¹   € ð( ˜)Ñ#€FØ˜)Ñ#€FÜ—\‘\ -°Ñ"7¸ÓG€NÜ—\‘\ -°Ñ"7¸ÓG€NÜ
ˆ>Ó˜QÒ¤# nÓ"5¸Ò"9ÜØ& y kð 2.Ø.<Ð-=ð >.Ø.<Ð-=ð >Ø$˜ð &Ø$˜ð &Ø*˜Oð ,Ø*˜O¨2ð/ó
ð 	
ð #:r,   çñhãˆµøä>c           
      ó  — d„ }| j                   |j                   cxk(  r%|j                   cxk(  r|j                   k(  sJ d«       ‚ J d«       ‚| j                   \  }}t        |«      D ]   }	| |	   }
||	   }||	   }||	   } ||
«      s
J d|	› �«       ‚ ||«      s
J d|	› �«       ‚t        |	|
|||||«       d|z
  t        j                  t        j
                  |
«      t        j
                  |«      «      z  |z
  }t        |	|
||||«       Œ¢ y)a  Assert that argkmin results are valid up to rounding errors.

    This function asserts that the results of argkmin queries are valid up to:
    - rounding error tolerance on distance values;
    - permutations of indices for distances values that differ up to the
      expected precision level.

    Furthermore, the distances must be sorted.

    To be used for testing neighbors queries on float32 datasets: we accept
    neighbors rank swaps only if they are caused by small rounding errors on
    the distance computations.
    c                 ó>   — t        j                  | d d | dd  k  «      S ©Néÿÿÿÿé   ©r"   Úall©Úas    r*   ú<lambda>z3assert_compatible_argkmin_results.<locals>.<lambda>£   ó   € œ"Ÿ&™&  3 B ¨1¨Q¨R¨5¡Ó1€ r,   z+Arrays of results have incompatible shapes.úDistances aren't sorted on row rR   N)ÚshapeÚrangerB   r"   ÚmaximumÚmaxrL   )Úneighbors_dists_aÚneighbors_dists_bÚneighbors_indices_aÚneighbors_indices_br.   r/   Ú	is_sortedÚ	n_queriesÚ_r6   r7   r8   r9   r:   rG   s                  r*   Ú!assert_compatible_argkmin_resultsre   Ž   s`  € ñ* 2€Ið 	×ÑØ×"Ñ"ô	%à×$Ñ$ô	%ð ×$Ñ$ò	%ð5ð
 5ó5ñ	%ð5ð
 5ó5ð	%ð %×*Ñ*�L€Iˆqô ˜9Ó%ò &
ˆ	Ø& yÑ1ˆ
Ø& yÑ1ˆ
Ø+¨IÑ6ˆØ+¨IÑ6ˆá˜Ô$ÐSÐ(GÈ	À{Ð&SÓSÐ$Ù˜Ô$ÐSÐ(GÈ	À{Ð&SÓSÐ$ä2ØØØØØØØô	
ð& ˜‘X¤§¡Ü�F‰F�:Ó¤§¡ zÓ 2ó"
ñ 
àñˆ	ô 	$ØØØØØØõ	
ñ?&
r,   é
   )ÚXÚYr   Úprecomputed_distsÚexpected_n_neighborsÚn_subsampled_queriesc                 óÄ   — |€	|€J d«       ‚|€| €J ‚|€J ‚t        | |fd|i|¤Ž}n|d | j                  «       }|j                  d¬«       |d d …|f   j                  «       S )Nz4Either metric or precomputed_dists must be provided.r   rR   ©Úaxis)r   ÚcopyÚsortÚmean)rg   rh   r   ri   rj   rk   Úmetric_kwargsÚsampled_distss           r*   Ú_non_trivial_radiusrt   Ø   s“   € ð  	Ð%¨Ð);ð>à=ó>Ø;ð Ð Øˆ}Ðˆ}Øˆ}Ðˆ}Ü*¨1¨aÑP¸ÐPÀ-ÑP‰à)Ð*?Ð+?Ð@×EÑEÓGˆØ×Ñ˜AÐÔØšÐ0Ð0Ñ1×6Ñ6Ó8Ð8r,   Tc           
      óÈ  — d„ }t        | «      t        |«      cxk(  rt        |«      cxk(  rt        |«      k(  sJ ‚ J ‚t        | «      }	t        |	«      D �]  }
| |
   }||
   }||
   }||
   }|r$ ||«      s
J d|
› �«       ‚ ||«      s
J d|
› �«       ‚t        |«      t        |«      k(  sJ ‚t        |«      t        |«      k(  sJ ‚t        |«      dkD  r*t        j                  |«      }||k  sJ d|› d|› d|
› �«       ‚t        |«      dkD  r*t        j                  |«      }||k  sJ d|› d|› d|
› �«       ‚t	        |
||||||«       d|z
  |z  |z
  }t        |
|||||«       �Œ y)	a&  Assert that radius neighborhood results are valid up to:

      - relative and absolute tolerance on computed distance values
      - permutations of indices for distances values that differ up to
        a precision level
      - missing or extra last elements if their distance is
        close to the radius

    To be used for testing neighbors queries on float32 datasets: we
    accept neighbors rank swaps only if they are caused by small
    rounding errors on the distance computations.

    Input arrays must be sorted w.r.t distances.
    c                 ó>   — t        j                  | d d | dd  k  «      S rP   rS   rU   s    r*   rW   z2assert_compatible_radius_results.<locals>.<lambda>  rX   r,   rY   r   zLargest returned distance z not within requested radius z on row rR   N)rF   r[   r"   r]   rB   rL   )r^   r_   r`   ra   ÚradiusÚcheck_sortedr.   r/   rb   rc   r6   r7   r8   r9   r:   Ú
max_dist_aÚ
max_dist_brG   s                     r*   Ú assert_compatible_radius_resultsr{   õ   sï  € ñ0 2€Iô 	ÐÓÜÐ Ó!ô	$äÐ"Ó#ô	$ô Ð"Ó#ò	$ðñ	$ðð	$ô Ð%Ó&€Iô ˜9Ó%ó -
ˆ	Ø& yÑ1ˆ
Ø& yÑ1ˆ
Ø+¨IÑ6ˆØ+¨IÑ6ˆáÙ˜ZÔ(ÐWÐ,KÈIÈ;Ð*WÓWÐ(Ù˜ZÔ(ÐWÐ,KÈIÈ;Ð*WÓWÐ(ä�:‹¤# mÓ"4Ò4Ð4Ð4Ü�:‹¤# mÓ"4Ò4Ð4Ð4ô ˆz‹?˜QÒÜŸ™ 
Ó+ˆJØ Ò'ð Ø,¨Z¨Lð 9Ø!˜( (¨9¨+ð7óÐ'ô ˆz‹?˜QÒÜŸ™ 
Ó+ˆJØ Ò'ð Ø,¨Z¨Lð 9Ø!˜( (¨9¨+ð7óÐ'ô
 	3ØØØØØØØô	
ð ˜‘X Ñ'¨$Ñ.ˆ	Ü#ØØØØØØö	
ñM-
r,   çH¯¼šò×z>©r/   r.   g•Ö&è.>c                  ó*  — d} d}t        | |¬«      }| dz  }d|z
  }d|z   }d|z
  }d|z   }t        j                  dd|d|g||d	||gg«      }t        j                  g d
¢g d¢g«      }	t        |||	|	|«       t        t        j                  dd|d|gg«      t        j                  dd|d|gg«      t        j                  g d
¢g«      t        j                  g d¢g«      fi |¤Ž t        t        j                  dddd|gg«      t        j                  ddd|dgg«      t        j                  g d
¢g«      t        j                  g d¢g«      fi |¤Ž t        t        j                  |d	|||gg«      t        j                  d	d	d	d	|gg«      t        j                  g d¢g«      t        j                  g d¢g«      fi |¤Ž t        t        j                  |d	|||gg«      t        j                  |d	d	d	|gg«      t        j                  g d¢g«      t        j                  g d¢g«      fi |¤Ž t	        j
                  d«      }
t        j                  t        |
¬«      5  t        t        j                  dd|d|gg«      t        j                  dd|d|gg«      t        j                  g d
¢g«      t        j                  g d¢g«      fi |¤Ž d d d «       t	        j
                  d«      }
t        j                  t        |
¬«      5  t        t        j                  dd|d|gg«      t        j                  dd|d|gg«      t        j                  g d
¢g«      t        j                  g d¢g«      fi |¤Ž d d d «       t	        j
                  d«      }
t        j                  t        |
¬«      5  t        t        j                  |d|d|gg«      t        j                  dd|ddgg«      t        j                  g d
¢g«      t        j                  g d¢g«      fi |¤Ž d d d «       t	        j
                  d«      }
t        j                  t        |
¬«      5  t        t        j                  |d|ddgg«      t        j                  dd|d|gg«      t        j                  g d¢g«      t        j                  g d¢g«      fi |¤Ž d d d «       d}
t        j                  t        |
¬«      5  t        t        j                  dd|d|gg«      t        j                  dd|d|gg«      t        j                  g d
¢g«      t        j                  g d¢g«      fi |¤Ž d d d «       y # 1 sw Y   �Œ�xY w# 1 sw Y   �Œ÷xY w# 1 sw Y   �Œ^xY w# 1 sw Y   ŒÄxY w# 1 sw Y   y xY w) Nr|   ç        r}   r   ç      ð?çffffff@ç333333ó?ç      @rR   ©rR   r   r   é   é   ©é   é   é   é	   rf   )rR   r   r†   r…   r   g      @)rR   r   r   rˆ   r‰   )r‰   rˆ   rŠ   rf   r‹   ©rˆ   r‹   r‰   rŠ   rf   )é"   é   rŠ   é   é   )é*   rR   é   é   r   úpQuery vector with index 0 lead to different distances for common neighbor with index 1: dist_a=1.2 vs dist_b=2.5©Úmatch©r   rR   r   r…   r†   zFneighbors in b missing from a: [12]
neighbors in a missing from b: [1])r�   r   r…   é   r   zDneighbors in b missing from a: []
neighbors in a missing from b: [3]r‰   )r   rR   r…   r†   r�   zDneighbors in b missing from a: [5]
neighbors in a missing from b: [])rR   r   r   r…   r�   )r   rR   r†   r   r…   ú Distances aren't sorted on row 0©r   rR   r…   r†   r   )	r%   r"   Úarrayre   ÚreÚescapeÚpytestÚraisesr5   )r/   r.   ÚtolsÚepsÚ_1mÚ_1pÚ_6_1mÚ_6_1pÚref_distÚref_indicesÚmsgs              r*   Ú&test_assert_compatible_argkmin_resultsr©   _  sI  € Ø€DØ€DÜ�T Ô%€Dà
�‰(€CØ
�‰)€CØ
�‰)€Cà�#‰I€EØ�#‰I€Eä�x‰xà�#�u˜c 5Ð)Ø�#�q˜#˜sÐ#ð	
ó€Hô —(‘(âÚð	
ó€Kô &Ø�(˜K¨°dôô &Ü
�‰�3˜˜U C¨Ð/Ð0Ó1Ü
�‰�3˜˜U C¨Ð/Ð0Ó1Ü
�‰’/Ð"Ó#Ü
�‰’/Ð"Ó#ñ	ð
 òô &Ü
�‰�3˜˜S # uÐ-Ð.Ó/Ü
�‰�3˜˜S %¨Ð-Ð.Ó/Ü
�‰’/Ð"Ó#Ü
�‰’/Ð"Ó#ñ	ð
 òô &Ü
�‰�3˜˜3  SÐ)Ð*Ó+Ü
�‰�1�a˜˜A˜sÐ#Ð$Ó%Ü
�‰Ò"Ð#Ó$Ü
�‰Ò"Ð#Ó$ñ	ð
 òô &Ü
�‰�3˜˜3  SÐ)Ð*Ó+Ü
�‰�3˜˜1˜a Ð%Ð&Ó'Ü
�‰Ò%Ð&Ó'Ü
�‰Ò$Ð%Ó&ñ	ð
 òô �)‰)ð	-ó€Cô 
�‰”~¨SÔ	1ñ 
Ü)Ü�H‰H�s˜C ¨¨UÐ3Ð4Ó5Ü�H‰H�s˜C ¨¨UÐ3Ð4Ó5Ü�H‰H’oÐ&Ó'Ü�H‰H’oÐ&Ó'ñ		
ð
 ò	
÷
ô �)‰)ØQó€Cô 
�‰”~¨SÔ	1ñ 
Ü)Ü�H‰H�s˜C ¨¨UÐ3Ð4Ó5Ü�H‰H�s˜C ¨¨UÐ3Ð4Ó5Ü�H‰H’oÐ&Ó'Ü�H‰HÒ'Ð(Ó)ñ		
ð
 ò	
÷
ô �)‰)ØOó€Cô 
�‰”~¨SÔ	1ñ 
Ü)Ü�H‰H�s˜C ¨¨UÐ3Ð4Ó5Ü�H‰H�s˜C ¨¨QÐ/Ð0Ó1Ü�H‰H’oÐ&Ó'Ü�H‰HÒ&Ð'Ó(ñ		
ð
 ò	
÷
ô �)‰)ØOó€Cô 
�‰”~¨SÔ	1ñ 
Ü)Ü�H‰H�s˜C ¨¨QÐ/Ð0Ó1Ü�H‰H�s˜C ¨¨UÐ3Ð4Ó5Ü�H‰HÒ&Ð'Ó(Ü�H‰H’oÐ&Ó'ñ		
ð
 ò	
÷
ð -€CÜ	�‰”~¨SÔ	1ñ 
Ü)Ü�H‰H�s˜C ¨¨UÐ3Ð4Ó5Ü�H‰H�s˜C ¨¨UÐ3Ð4Ó5Ü�H‰H’oÐ&Ó'Ü�H‰H’oÐ&Ó'ñ		
ð
 ò	
÷
ð 
÷i
ñ 
ú÷
ñ 
ú÷
ñ 
ú÷
ð 
ú÷
ð 
úsA   ÉA.UÌ A.U#Î&A.U0ÑA.U=ÓA.V	ÕU Õ#U-Õ0U:Õ=VÖ	Vrx   Fc                 óÒ  — d}d}t        ||¬«      }|dz  }d|z
  }d|z   }d|z
  }d|z   }t        j                  dd|d|g«      t        j                  |d	||g«      g}	t        j                  g d
¢«      t        j                  g d¢«      g}
t        |	|	|
|
fd| dœ|¤Ž t        t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  g d
¢«      g«      t        j                  t        j                  g d¢«      g«      fd| dœ|¤Ž t        t        j                  t        j                  ||d	||g«      g«      t        j                  t        j                  ||d	||g«      g«      t        j                  t        j                  g d¢«      g«      t        j                  t        j                  g d¢«      g«      fd| dœ|¤Ž t	        j
                  d«      }t        j                  t        |¬«      5  t        t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  g d
¢«      g«      t        j                  t        j                  g d¢«      g«      fd| dœ|¤Ž d d d «       t        t        j                  t        j                  dd|d||g«      g«      t        j                  t        j                  dd|dg«      g«      t        j                  t        j                  g d¢«      g«      t        j                  t        j                  g d¢«      g«      f|| dœ|¤Ž t	        j
                  d«      }t        j                  t        |¬«      5  t        t        j                  t        j                  g d¢«      g«      t        j                  t        j                  ddg«      g«      t        j                  t        j                  g d¢«      g«      t        j                  t        j                  d	dg«      g«      fd| dœ|¤Ž d d d «       t	        j
                  d«      }t        j                  t        |¬«      5  t        t        j                  t        j                  g d¢«      g«      t        j                  t        j                  g d¢«      g«      t        j                  t        j                  g d¢«      g«      t        j                  t        j                  g d¢«      g«      fd| dœ|¤Ž d d d «       t	        j
                  d«      }t        j                  t        |¬«      5  t        t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  dd|ddg«      g«      t        j                  t        j                  g d
¢«      g«      t        j                  t        j                  g d¢«      g«      fd| dœ|¤Ž d d d «       t        j                  t        |¬«      5  t        t        j                  t        j                  dd|ddg«      g«      t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  g d
¢«      g«      t        j                  t        j                  g d¢«      g«      fd| dœ|¤Ž d d d «       | rãd }t        j                  t        |¬«      5  t        t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  g d
¢«      g«      t        j                  t        j                  g d¢«      g«      f|d!dœ|¤Ž d d d «       y t        t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  dd|d|g«      g«      t        j                  t        j                  g d
¢«      g«      t        j                  t        j                  g d¢«      g«      f|d"dœ|¤Ž y # 1 sw Y   �ŒxY w# 1 sw Y   �Œ}xY w# 1 sw Y   �Œ›xY w# 1 sw Y   �Œ³xY w# 1 sw Y   �ŒàxY w# 1 sw Y   y xY w)#Nr|   r   r}   r   r€   r�   r‚   rƒ   rR   r„   )rˆ   r‰   rŠ   r‹   g      @)rw   rx   )rR   r   r…   r†   r   r‡   rŒ   r”   r•   r—   )rR   r   r   r…   r†   r‰   )rR   r   r   rˆ   z�Query vector with index 0 lead to mismatched result indices:
neighbors in b missing from a: []
neighbors in a missing from b: [3])r‚   rƒ   rˆ   )rR   r   r   r   z‚Query vector with index 0 lead to mismatched result indices:
neighbors in b missing from a: [4]
neighbors in a missing from b: [2])r‚   gÍÌÌÌÌÌ @rƒ   )r‚   r   rƒ   )rR   r…   r   zTLargest returned distance 6.100000033333333 not within requested radius 6.1 on row 0rš   r™   TF)	r%   r"   r›   r{   rœ   r�   rž   rŸ   r5   )rx   r/   r.   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   s               r*   Ú%test_assert_compatible_radius_resultsr«   ê  sÃ  € à€DØ€DÜ�T Ô%€Dà
�‰(€CØ
�‰)€CØ
�‰)€CØ�#‰I€EØ�#‰I€Eô 	�‰�#�s˜E 3¨Ð.Ó/Ü
�‰�#�q˜#˜sÐ#Ó$ð€Hô 	�‰’Ó!Ü
�‰’Óð€Kô %ØØØØð	ð
 Ø!ñð òô %Ü
�‰”"—(‘(˜C  e¨S°%Ð8Ó9Ð:Ó;Ü
�‰”"—(‘(˜C  e¨S°%Ð8Ó9Ð:Ó;Ü
�‰”"—(‘(š?Ó+Ð,Ó-Ü
�‰”"—(‘(š?Ó+Ð,Ó-ð	ð
 Ø!ñð òô %Ü
�‰”"—(‘(˜C  a¨¨cÐ2Ó3Ð4Ó5Ü
�‰”"—(‘(˜C  a¨¨cÐ2Ó3Ð4Ó5Ü
�‰”"—(‘(Ò+Ó,Ð-Ó.Ü
�‰”"—(‘(Ò+Ó,Ð-Ó.ð	ð
 Ø!ñð òô �)‰)ð	-ó€Cô 
�‰”~¨SÔ	1ñ 	
Ü(Ü�H‰H”b—h‘h  S¨%°°eÐ<Ó=Ð>Ó?Ü�H‰H”b—h‘h  S¨%°°eÐ<Ó=Ð>Ó?Ü�H‰H”b—h‘hšÓ/Ð0Ó1Ü�H‰H”b—h‘hšÓ/Ð0Ó1ð		
ð
 Ø%ñ	
ð ò	
÷	
ô %Ü
�‰”"—(‘(˜C  e¨S°%¸Ð?Ó@ÐAÓBÜ
�‰”"—(‘(˜C  e¨SÐ1Ó2Ð3Ó4Ü
�‰”"—(‘(Ò-Ó.Ð/Ó0Ü
�‰”"—(‘(š<Ó(Ð)Ó*ð	ð
 Ø!ñð òô �)‰)ð	Bó€Cô 
�‰”~¨SÔ	1ñ 	
Ü(Ü�H‰H”b—h‘hš}Ó-Ð.Ó/Ü�H‰H”b—h‘h  S˜zÓ*Ð+Ó,Ü�H‰H”b—h‘hšyÓ)Ð*Ó+Ü�H‰H”b—h‘h  1˜vÓ&Ð'Ó(ð		
ð
 Ø%ñ	
ð ò	
÷	
ô �)‰)ð	Có€Cô 
�‰”~¨SÔ	1ñ 	
Ü(Ü�H‰H”b—h‘hšÓ/Ð0Ó1Ü�H‰H”b—h‘hš}Ó-Ð.Ó/Ü�H‰H”b—h‘hšyÓ)Ð*Ó+Ü�H‰H”b—h‘hšyÓ)Ð*Ó+ð		
ð
 Ø%ñ	
ð ò	
÷	
ô �)‰)ð	ó€Cô 
�‰”~¨SÔ	1ñ 	
Ü(Ü�H‰H”b—h‘h  S¨%°°eÐ<Ó=Ð>Ó?Ü�H‰H”b—h‘h  S¨%°°cÐ:Ó;Ð<Ó=Ü�H‰H”b—h‘hšÓ/Ð0Ó1Ü�H‰H”b—h‘hšÓ/Ð0Ó1ð		
ð
 Ø%ñ	
ð ò	
÷	
ô 
�‰”~¨SÔ	1ñ 	
Ü(Ü�H‰H”b—h‘h  S¨%°°cÐ:Ó;Ð<Ó=Ü�H‰H”b—h‘h  S¨%°°eÐ<Ó=Ð>Ó?Ü�H‰H”b—h‘hšÓ/Ð0Ó1Ü�H‰H”b—h‘hšÓ/Ð0Ó1ð		
ð
 Ø%ñ	
ð ò	
÷	
ñ à0ˆÜ�]‰]œ>°Ô5ñ 		Ü,Ü—‘œ"Ÿ(™( C¨¨e°S¸%Ð#@ÓAÐBÓCÜ—‘œ"Ÿ(™( C¨¨e°S¸%Ð#@ÓAÐBÓCÜ—‘œ"Ÿ(™(¢?Ó3Ð4Ó5Ü—‘œ"Ÿ(™(¢?Ó3Ð4Ó5ð	ð
 Ø!ñð ò÷		ð 		ô 	)Ü�H‰H”b—h‘h  S¨%°°eÐ<Ó=Ð>Ó?Ü�H‰H”b—h‘h  S¨%°°eÐ<Ó=Ð>Ó?Ü�H‰H”b—h‘hšÓ/Ð0Ó1Ü�H‰H”b—h‘hšÓ/Ð0Ó1ð		
ð
 Øñ	
ð ó	
÷}	
ñ 	
ú÷:	
ñ 	
ú÷	
ñ 	
ú÷ 	
ñ 	
ú÷	
ñ 	
ú÷		ð 		úsN   ÉB=dÏ7B7d)Ó&B7d6×B=eÚ5B=eÞB=eäd&ä)d3ä6e åeåeåe&Úcsr_containerc                 ó‚  — t         j                  j                  d«      }|j                  dd«      }|j                  dd«      } | |«      } | |«      }d}t	        j
                  |||«      sJ ‚t	        j
                  |||«      sJ ‚t	        j
                  |||«      sJ ‚t	        j
                  |||«      sJ ‚t	        j
                  |j                  t         j                  «      |j                  t         j                  «      |«      sJ ‚t	        j
                  |j                  t         j                  «      |j                  t         j                  «      |«      sJ ‚t	        j
                  |j                  t         j                  «      |j                  t         j                  «      |«      rJ ‚t	        j
                  ||d¬«      rJ ‚t	        j
                  |j                  t         j                  «      ||«      rJ ‚t	        j
                  ||j                  t         j                  «      |«      rJ ‚t	        j
                  t        j                  |«      ||«      rJ ‚t	        j
                  ||d¬«      sJ ‚t	        j
                  ||d¬«      sJ ‚t	        j
                  ||d¬«      rJ ‚t	        j
                  ||d¬«      rJ ‚ | |dz  «      }t	        j
                  |||«      rJ ‚ | |«      }|j                  j                  t         j                  «      |_        t	        j
                  |||«      rJ ‚y )	Nr   éd   rf   Ú	manhattanÚpyfunc)r   r   Úsqeuclidean)r"   r#   r$   r'   r	   Úis_usable_forÚastypeÚfloat64Úfloat32Úint64Úint32ÚasfortranarrayÚindices)	r¬   r(   rg   rh   ÚX_csrÚY_csrr   ÚX_csr_0_nnzÚX_csr_int64s	            r*   Ú/test_pairwise_distances_reduction_is_usable_forr¾   �  sç  € ä
�)‰)×
Ñ
 Ó
"€CØ�‰��bÓ€AØ�‰��bÓ€AÙ˜!Ó€EÙ˜!Ó€EØ€Fô ,×9Ñ9¸!¸QÀÔGÐGÐGÜ+×9Ñ9¸%ÀÈÔOÐOÐOÜ+×9Ñ9¸%ÀÀFÔKÐKÐKÜ+×9Ñ9¸!¸UÀFÔKÐKÐKä+×9Ñ9Ø	�‰”—‘Ó˜aŸh™h¤r§z¡zÓ2°Fôð ð ô ,×9Ñ9Ø	�‰”—‘Ó˜aŸh™h¤r§z¡zÓ2°Fôð ð ô 0×=Ñ=Ø	�‰”—‘Ó˜AŸH™H¤R§X¡XÓ.°ôð ð ô 0×=Ñ=¸aÀÈ8ÕTÐTÐTÜ/×=Ñ=Ø	�‰”—‘Ó˜a ôð ð ô 0×=Ñ=Ø	ˆ1�8‰8”B—H‘HÓ˜vôð ð ô
 0×=Ñ=Ü
×Ñ˜!Ó˜a ôð ð ô ,×9Ñ9¸%ÀÈ;ÕWÐWÐWÜ+×9Ñ9Ø	ˆ5˜õð ð ô 0×=Ñ=Øˆu˜]õð ð ô 0×=Ñ=Øˆu˜[õð ð ñ    A¡Ó&€KÜ/×=Ñ=¸kÈ1ÈfÔUÐUÐUñ   Ó"€KØ%×-Ñ-×4Ñ4´R·X±XÓ>€KÔÜ/×=Ñ=¸kÈ1ÈfÔUÐUÐUÐUr,   c                  ó’  — t         j                  j                  d«      } | j                  dd«      }| j                  dd«      }d}d}d}t	        j
                  t        |¬«      5  t        j                  |j                  t         j                  «      |||¬«       d d d «       d	}t	        j
                  t        |¬«      5  t        j                  ||j                  t         j                  «      ||¬«       d d d «       t	        j
                  t        d
¬«      5  t        j                  ||d|¬«       d d d «       t	        j
                  t        d¬«      5  t        j                  ||d|¬«       d d d «       t	        j
                  t        d¬«      5  t        j                  |||d¬«       d d d «       t	        j
                  t        d¬«      5  t        j                  t        j                  ddg«      |||¬«       d d d «       t	        j
                  t        d¬«      5  t        j                  t        j                  |«      |||¬«       d d d «       ddi}d}t	        j                  t        |¬«      5  t        j                  |||||¬«       d d d «       dt!        |d¬«      dœ}d}t	        j                  t        |¬«      5  t        j                  |||||¬«       d d d «       dt!        |d¬«      i}t#        j$                  «       5  t#        j&                  dt        ¬«       t        j                  |||||¬«       d d d «       t!        |d¬«      t!        |d¬«      dœ}t#        j$                  «       5  t#        j&                  dt        ¬«       t        j                  |||||¬«       d d d «       y # 1 sw Y   �Œ"xY w# 1 sw Y   �ŒÓxY w# 1 sw Y   �Œ£xY w# 1 sw Y   �ŒsxY w# 1 sw Y   �ŒCxY w# 1 sw Y   �ŒþxY w# 1 sw Y   �Œ»xY w# 1 sw Y   �Œ„xY w# 1 sw Y   �ŒAxY w# 1 sw Y   ŒìxY w# 1 sw Y   y xY w) NrR   r®   rf   r†   r   úkOnly float64 or float32 datasets pairs are supported at this time, got: X.dtype=float32 and Y.dtype=float64r•   )rg   rh   Úkr   úiOnly float64 or float32 datasets pairs are supported at this time, got: X.dtype=float64 and Y.dtype=int32úk == -1, must be >= 1.rQ   úk == 0, must be >= 1.r   úUnrecognized metricúwrong metricú;Buffer has wrong number of dimensions \(expected 2, got 1\)r€   ç       @úndarray is not C-contiguousr   r   ú4Some metric_kwargs have been passed \({'p': 3}\) but)rg   rh   rÁ   r   rr   r   ©Únum_threads©r   ÚY_norm_squaredú?Some metric_kwargs have been passed \({'p': 3, 'Y_norm_squared'ÚX_norm_squaredÚerror©Úcategory©rÐ   rÎ   )r"   r#   r$   r'   rž   rŸ   Ú
ValueErrorr   Úcomputer³   rµ   r·   r›   r¸   ÚwarnsÚUserWarningr   ÚwarningsÚcatch_warningsÚsimplefilter)	r(   rg   rh   rÁ   r   r¨   Úunused_metric_kwargsÚmessagerr   s	            r*   Ú(test_argkmin_factory_method_wrong_usagesrÞ   Ò  s–  € Ü
�)‰)×
Ñ
 Ó
"€CØ�‰��bÓ€AØ�‰��bÓ€AØ	€AØ€Fð	3ð ô 
�‰”z¨Ô	-ñ IÜ�‰˜!Ÿ(™(¤2§:¡:Ó.°!°qÀÕH÷Ið	1ð ô 
�‰”z¨Ô	-ñ GÜ�‰˜!˜qŸx™x¬¯©Ó1°Q¸vÕF÷Gô 
�‰”zÐ)AÔ	Bñ 7Ü�‰˜!˜q B¨vÕ6÷7ô 
�‰”zÐ)@Ô	Añ 6Ü�‰˜!˜q A¨fÕ5÷6ô 
�‰”zÐ)>Ô	?ñ >Ü�‰˜!˜q A¨nÕ=÷>ô 
�‰ÜÐXô
ñ Iô 	�‰œ"Ÿ(™( C¨ :Ó.°!°qÀÕH÷Iô
 
�‰”zÐ)FÔ	Gñ IÜ�‰œ"×+Ñ+¨AÓ.°!°qÀÕH÷Ið   ˜8ÐàE€Gä	�‰”k¨Ô	1ñ 
Ü�‰Ø�1˜ &Ð8Lõ	
÷
ð Ü/°¸qÔAñ€Mð
 Q€Gä	�‰”k¨Ô	1ñ SÜ�‰˜!˜q A¨fÀMÕR÷Sð
 	Ô/°¸qÔAð€Mô 
×	 Ñ	 Ó	"ñ SÜ×Ñ˜g´Õ<Ü�‰˜!˜q A¨fÀMÕR÷Sô 0°¸qÔAÜ/°¸qÔAñ€Mô 
×	 Ñ	 Ó	"ñ SÜ×Ñ˜g´Õ<Ü�‰˜!˜q A¨fÀMÕR÷Sð S÷{Iñ Iú÷Gñ Gú÷7ñ 7ú÷6ñ 6ú÷>ñ >ú÷Iñ Iú÷
Iñ Iú÷
ñ 
ú÷Sñ Sú÷Sð Sú÷Sð Sús„   Á%7N<Ã7O	ÄOÅO#ÆO0Ç/O=È$-P
É:PË
P$Ì6P1Í=6P=Î<OÏ	OÏO Ï#O-Ï0O:Ï=PÐ
PÐP!Ð$P.Ð1P:Ð=Qc            
      óŽ  — t         j                  j                  d«      } | j                  dd«      }| j                  dd«      }d}d}d}| j	                  ddd¬«      }t        j
                  |«      }d	}t        j                  t        |¬
«      5  t        j                  |j                  t         j                  «      ||||||¬«       d d d «       d}t        j                  t        |¬
«      5  t        j                  ||j                  t         j                  «      |||||¬«       d d d «       t        j                  t        d¬
«      5  t        j                  ||d||||¬«       d d d «       t        j                  t        d¬
«      5  t        j                  ||d||||¬«       d d d «       t        j                  t        d¬
«      5  t        j                  |||d|||¬«       d d d «       t        j                  t        d¬
«      5  t        j                  t        j                  ddg«      ||||||¬«       d d d «       t        j                  t        d¬
«      5  t        j                  t        j                  |«      ||||||¬«       d d d «       d}	d|	› d�}
t        j                  t        |
¬
«      5  t        j                  |||||	||¬«       d d d «       y # 1 sw Y   �ŒxY w# 1 sw Y   �ŒÈxY w# 1 sw Y   �Œ•xY w# 1 sw Y   �ŒbxY w# 1 sw Y   �Œ/xY w# 1 sw Y   ŒæxY w# 1 sw Y   ŒŸxY w# 1 sw Y   y xY w)NrR   r®   rf   r†   r¯   Úuniformr   ©ÚlowÚhighÚsizerÀ   r•   )rg   rh   rÁ   r   ÚweightsÚY_labelsÚunique_Y_labelsrÂ   rÃ   rQ   rÄ   rÅ   rÆ   rÇ   r€   rÈ   rÉ   Únon_existent_weights_strategyú[Only the 'uniform' or 'distance' weights options are supported at this time. Got: weights='ú'.)r"   r#   r$   r'   ÚrandintÚuniquerž   rŸ   rÕ   r   rÖ   r³   rµ   r·   r›   r¸   )r(   rg   rh   rÁ   r   rå   ræ   rç   r¨   rè   rÝ   s              r*   Ú2test_argkmin_classmode_factory_method_wrong_usagesrí     s  € Ü
�)‰)×
Ñ
 Ó
"€CØ�‰��bÓ€AØ�‰��bÓ€AØ	€AØ€Fà€GØ�{‰{˜q r°ˆ{Ó4€HÜ—i‘i Ó)€Oð	3ð ô 
�‰”z¨Ô	-ñ 	
Ü× Ñ Ø�h‰h”r—z‘zÓ"ØØØØØØ+õ	
÷	
ð	1ð ô 
�‰”z¨Ô	-ñ 	
Ü× Ñ ØØ�h‰h”r—x‘xÓ ØØØØØ+õ	
÷	
ô 
�‰”zÐ)AÔ	Bñ 	
Ü× Ñ ØØØØØØØ+õ	
÷	
ô 
�‰”zÐ)@Ô	Añ 	
Ü× Ñ ØØØØØØØ+õ	
÷	
ô 
�‰”zÐ)>Ô	?ñ 	
Ü× Ñ ØØØØ!ØØØ+õ	
÷	
ô 
�‰ÜÐXô
ñ 
ô 	× Ñ Ü�h‰h˜˜S�zÓ"ØØØØØØ+õ	
÷
ô 
�‰”zÐ)FÔ	Gñ 	
Ü× Ñ Ü×Ñ Ó"ØØØØØØ+õ	
÷	
ð %DÐ!ð	Ø6Ð7°rð	;ð ô 
�‰”z¨Ô	1ñ 	
Ü× Ñ ØØØØØ1ØØ+õ	
÷	
ð 	
÷q	
ñ 	
ú÷	
ñ 	
ú÷	
ñ 	
ú÷	
ñ 	
ú÷	
ñ 	
ú÷
ð 
ú÷	
ð 	
ú÷ 	
ð 	
ús`   Â:K"Ã/:K/ÅK<ÆL	ÇLÈ2L#É!0L/Ê<L;Ë"K,Ë/K9Ë<LÌ	LÌL Ì#L,Ì/L8Ì;Mc                  óþ  — t         j                  j                  d«      } | j                  dd«      }| j                  dd«      }d}d}d}t	        j
                  t        |¬«      5  t        j                  |j                  t         j                  «      |||¬«       d d d «       d	}t	        j
                  t        |¬«      5  t        j                  ||j                  t         j                  «      ||¬«       d d d «       t	        j
                  t        d
¬«      5  t        j                  ||d|¬«       d d d «       t	        j
                  t        d¬«      5  t        j                  |||d¬«       d d d «       t	        j
                  t        d¬«      5  t        j                  t        j                  ddg«      |||¬«       d d d «       t	        j
                  t        d¬«      5  t        j                  t        j                  |«      |||¬«       d d d «       ddi}d}t	        j                  t        |¬«      5  t        j                  |||||¬«       d d d «       dt!        |d¬«      dœ}d}t	        j                  t        |¬«      5  t        j                  |||||¬«       d d d «       t!        |d¬«      t!        |d¬«      dœ}t#        j$                  «       5  t#        j&                  dt        ¬«       t        j                  |||||¬«       d d d «       dt!        |d¬«      i}t#        j$                  «       5  t#        j&                  dt        ¬«       t        j                  |||||¬«       d d d «       y # 1 sw Y   �ŒåxY w# 1 sw Y   �Œ–xY w# 1 sw Y   �ŒfxY w# 1 sw Y   �Œ6xY w# 1 sw Y   �ŒñxY w# 1 sw Y   �Œ®xY w# 1 sw Y   �ŒwxY w# 1 sw Y   �Œ4xY w# 1 sw Y   ŒÓxY w# 1 sw Y   y xY w)NrR   r®   rf   r†   r   rÀ   r•   )rg   rh   rw   r   rÂ   úradius == -1.0, must be >= 0.rQ   rÅ   rÆ   rÇ   r€   rÈ   rÉ   r   r   rÊ   )rg   rh   rw   r   rr   r   rË   rÍ   rÏ   rÔ   rÑ   rÒ   rÐ   )r"   r#   r$   r'   rž   rŸ   rÕ   r
   rÖ   r³   rµ   r·   r›   r¸   r×   rØ   r   rÙ   rÚ   rÛ   )	r(   rg   rh   rw   r   r¨   rÜ   rÝ   rr   s	            r*   Ú1test_radius_neighbors_factory_method_wrong_usagesrð   •  sƒ  € Ü
�)‰)×
Ñ
 Ó
"€CØ�‰��bÓ€AØ�‰��bÓ€AØ€FØ€Fð	3ð ô 
�‰ÜØô
ñ 
ô 	×ÑØ�h‰h”r—z‘zÓ" a°¸võ	
÷	
ð	1ð ô 
�‰ÜØô
ñ Yô 	×Ñ ! q§x¡x´·±Ó'9À&ÐQWÕX÷	Yô 
�‰”zÐ)HÔ	Iñ DÜ×Ñ ! q°¸FÕC÷Dô 
�‰”zÐ)>Ô	?ñ PÜ×Ñ ! q°ÀÕO÷Pô 
�‰ÜÐXô
ñ 
ô 	×ÑÜ�h‰h˜˜S�zÓ" a°¸võ	
÷
ô 
�‰”zÐ)FÔ	Gñ 
Ü×ÑÜ×Ñ Ó" a°¸võ	
÷
ð
   ˜8Ðð F€Gä	�‰”k¨Ô	1ñ 
Ü×ÑØ�1˜V¨FÐBVõ	
÷
ð Ü/°¸qÔAñ€Mð
 Q€Gä	�‰”k¨Ô	1ñ 
Ü×ÑØ�1˜V¨FÀ-õ	
÷
ô 0°¸qÔAÜ/°¸qÔAñ€Mô 
×	 Ñ	 Ó	"ñ 
Ü×Ñ˜g´Õ<Ü×ÑØ�1˜V¨FÀ-õ	
÷
ð 	Ô/°¸qÔAð€Mô 
×	 Ñ	 Ó	"ñ 
Ü×Ñ˜g´Õ<Ü×ÑØ�1˜V¨FÀ-õ	
÷
ð 
÷U
ñ 
ú÷Yñ Yú÷Dñ Dú÷Pñ Pú÷
ñ 
ú÷
ñ 
ú÷
ñ 
ú÷
ñ 
ú÷
ð 
ú÷
ð 
úsx   Á%7M?Ã7NÄNÅN&Æ/N3Ç'-O È=OÊOË6O'Í 6O3Í?N	ÎNÎN#Î&N0Î3N=Ï O
ÏOÏO$Ï'O0Ï3O<c                  ó  — t         j                  j                  d«      } | j                  dd«      }| j                  dd«      }d}d}d}| j	                  ddd¬«      }t        j
                  |«      }d	}t        j                  t        |¬
«      5  t        j                  |j                  t         j                  «      ||||||d ¬«       d d d «       d}t        j                  t        |¬
«      5  t        j                  ||j                  t         j                  «      |||||d ¬«       d d d «       t        j                  t        d¬
«      5  t        j                  ||d||||d ¬«       d d d «       t        j                  t        d¬
«      5  t        j                  ||dd|||d ¬«       d d d «       t        j                  t        d¬
«      5  t        j                  t        j                  ddg«      ||||||d ¬«       d d d «       t        j                  t        d¬
«      5  t        j                  t        j                  |«      ||||||d ¬«       d d d «       d}	d|	› d�}t        j                  t        |¬
«      5  t        j                  |||d|	||d ¬«       d d d «       y # 1 sw Y   �ŒàxY w# 1 sw Y   �Œ�xY w# 1 sw Y   �ŒYxY w# 1 sw Y   �Œ%xY w# 1 sw Y   ŒÛxY w# 1 sw Y   Œ“xY w# 1 sw Y   y xY w)NrR   r®   rf   r†   r¯   rà   r   rá   rÀ   r•   )rg   rh   rw   r   rå   ræ   rç   Úoutlier_labelrÂ   rï   rQ   rÅ   Úwrong_metricrÇ   r€   rÈ   rÉ   rè   ré   rê   )r"   r#   r$   r'   rë   rì   rž   rŸ   rÕ   r   rÖ   r³   rµ   r·   r›   r¸   )
r(   rg   rh   rw   r   rå   ræ   rç   r¨   rè   s
             r*   Ú;test_radius_neighbors_classmode_factory_method_wrong_usagesrô   ñ  sé  € Ü
�)‰)×
Ñ
 Ó
"€CØ�‰��bÓ€AØ�‰��bÓ€AØ€FØ€FØ€GØ�{‰{˜q r°ˆ{Ó4€HÜ—i‘i Ó)€Oð	3ð ô 
�‰”z¨Ô	-ñ 

Ü ×(Ñ(Ø�h‰h”r—z‘zÓ"ØØØØØØ+Øõ		
÷

ð	1ð ô 
�‰”z¨Ô	-ñ 

Ü ×(Ñ(ØØ�h‰h”r—x‘xÓ ØØØØØ+Øõ		
÷

ô 
�‰”zÐ)HÔ	Iñ 

Ü ×(Ñ(ØØØØØØØ+Øõ		
÷

ô 
�‰”zÐ)>Ô	?ñ 

Ü ×(Ñ(ØØØØ!ØØØ+Øõ		
÷

ô 
�‰ÜÐXô
ñ 
ô 	!×(Ñ(Ü�h‰h˜˜S�zÓ"ØØØØØØ+Øõ		
÷
ô 
�‰”zÐ)FÔ	Gñ 

Ü ×(Ñ(Ü×Ñ Ó"ØØØØØØ+Øõ		
÷

ð %DÐ!ð	Ø6Ð7°rð	;ð ô 
�‰”z¨Ô	-ñ 

Ü ×(Ñ(ØØØØ!Ø1ØØ+Øõ		
÷

ð 

÷g

ñ 

ú÷ 

ñ 

ú÷

ñ 

ú÷

ñ 

ú÷
ð 
ú÷

ð 

ú÷"

ð 

úsT   Â;J)Ã0;J6ÅKÆKÇ3KÈ&1K)ÊK5Ê)J3Ê6K ËKËKËK&Ë)K2Ë5K>Ú
DispatcherÚdtypec                 óî  — t         j                  j                  | «      }d}|j                  g d¢dd¬«      \  }}|j	                  ||«      j                  |«      |z  }|j	                  ||«      j                  |«      |z  }	|t        u rd}
i }i }nt        ||	d¬«      }|}
d	|i}d
di} |j                  ||	|
fddddœ|¤Ž\  }} |j                  ||	|
fddddœ|¤Ž\  }}t        ||f   ||||fi |¤Ž y)z3Check that results do not depend on the chunk size.r®   ©éa   r®   ée   éô  r   F©rä   Úreplacerf   r   ©rg   rh   r   rw   Úsort_resultsTé   r¯   )Ú
chunk_sizer   Úreturn_distanceé)   N)
r"   r#   r$   Úchoicer'   r³   r   rt   rÖ   ÚASSERT_RESULT)Úglobal_random_seedrõ   rö   r   r(   ÚspreadÚn_samples_XÚn_samples_Yrg   rh   Ú	parameterÚcheck_parametersÚcompute_parametersrw   r¦   r§   Údistr¹   s                     r*   Útest_chunk_size_agnosticismr  _  sT  € ô �)‰)×
Ñ
Ð 2Ó
3€CØ€FØ"Ÿz™zÒ*=ÀAÈu˜zÓUÑ€K�Ø�‰�˜jÓ)×0Ñ0°Ó7¸&Ñ@€AØ�‰�˜jÓ)×0Ñ0°Ó7¸&Ñ@€Aà”WÑØˆ	ØÐØÑä$ q¨A°kÔBˆØˆ	Ø$ fÐ-ÐØ,¨dÐ3Ðà.˜J×.Ñ.Ø	Ø	Øðð ØØñð ñÑ€Hˆkð '�J×&Ñ&Ø	Ø	Øðð ØØñð ñ�M€Dˆ'ô �:˜uÐ%Ñ&Ø�$˜ WñØ0@ór,   c                 óJ  — t         j                  j                  | «      }|j                  g d¢dd¬«      \  }}d}|j	                  ||«      j                  |«      |z  }|j	                  ||«      j                  |«      |z  }	|t        u rd}
i }i }nt        ||	d¬«      }|}
d	|i}d
di} |j                  ||	|
fdddœ|¤Ž\  }}t        «       j                  dd¬«      5   |j                  ||	|
fdddœ|¤Ž\  }}ddd«       t        ||f   ||fi |¤Ž y# 1 sw Y   ŒxY w)z:Check that results do not depend on the number of threads.rø   r   Frü   r®   rf   r   rþ   rw   rÿ   Té   ©r  r  rR   Úopenmp)ÚlimitsÚuser_apiN)r"   r#   r$   r  r'   r³   r   rt   rÖ   r   Úlimitr  )r  rõ   rö   r   r(   r  r	  r  rg   rh   r
  r  r  rw   r¦   r§   r  r¹   s                     r*   Útest_n_threads_agnosticismr  ‘  sy  € ô �)‰)×
Ñ
Ð 2Ó
3€CØ"Ÿz™zÒ*=ÀAÈu˜zÓUÑ€K�Ø€FØ�‰�˜jÓ)×0Ñ0°Ó7¸&Ñ@€AØ�‰�˜jÓ)×0Ñ0°Ó7¸&Ñ@€Aà”WÑØˆ	ØÐØÑä$ q¨A°kÔBˆØˆ	Ø$ fÐ-ÐØ,¨dÐ3Ðà.˜J×.Ñ.Ø	Ø	Øðð Øñð ñÑ€Hˆkô 
$Ó	%×	+Ñ	+°1¸xÐ	+Ó	Hñ 
Ø*˜
×*Ñ*ØØØð
ð Ø ñ
ð !ñ
‰ˆˆg÷
ô �:˜uÐ%Ñ&Ø�$˜ WñØ0@ó÷
ð 
ús   Ã DÄD"zDispatcher, dtypec                 ó8  — t         j                  j                  | «      }d}d\  }}|j                  ||«      j	                  |«      |z  }|j                  ||«      j	                  |«      |z  }	 ||«      }
 ||	«      }|t
        u rd}i }i }nt        ||	d¬«      }|}d|i}ddi} |j                  ||	|fd	dd
œ|¤Ž\  }}t        j                  ||
f|	|f«      D ]=  \  }}||u r||	u rŒ |j                  |||fd	dd
œ|¤Ž\  }}t        ||f   ||||fi |¤Ž Œ? y)zLCheck that results do not depend on the format (dense, sparse) of the input.r®   )r®   r®   rf   r   rþ   rw   rÿ   Té2   r  N)r"   r#   r$   r'   r³   r   rt   rÖ   Ú	itertoolsÚproductr  )r  rõ   rö   r¬   r(   r  Ú	n_samplesr   rg   rh   rº   r»   r
  r  r  rw   Ú
dist_denseÚindices_denseÚ_XÚ_Yr  r¹   s                         r*   Útest_format_agnosticismr   Â  s‘  € ô" �)‰)×
Ñ
Ð 2Ó
3€CØ€FØ$Ñ€Iˆzà�‰�˜JÓ'×.Ñ.¨uÓ5¸Ñ>€AØ�‰�˜JÓ'×.Ñ.¨uÓ5¸Ñ>€Aá˜!Ó€EÙ˜!Ó€Eà”WÑØˆ	ØÐØÑô % q¨A°kÔBˆØˆ	Ø$ fÐ-ÐØ,¨dÐ3Ðà 2 
× 2Ñ 2Ø	Ø	Øð!ð Øñ!ð ñ!Ñ€J�ô ×#Ñ# Q¨ J°°E°
Ó;ò 
‰ˆˆBØ�‰7�r˜Q‘wØØ*˜
×*Ñ*ØØØð
ð Ø ñ
ð !ñ
‰ˆˆgô 	�z 5Ð)Ñ*ØØØØñ		
ð
 ó	
ñ
r,   c           	      ó  — t         j                  j                  | «      }|j                  t        j                  g d¢t
        ¬«      «      }|j                  g d¢dd¬«      \  }}d}|j                  ||«      j                  |«      |z  }	|j                  ||«      j                  |«      |z  }
|dk(  r<t        j                  |	d	d	…d	d…f   «      }	t        j                  |
d	d	…d	d…f   «      }
|t        u rd
}i }i }nt        |	|
|¬«      }|}d|i}ddi} |j                  |	|
|f|t        ||| ¬«      d   |dz  dddœ|¤Ž\  }} |j                  |	|
|f|t        ||| ¬«      d   |dz  dddœ|¤Ž\  }}t        ||f   ||||fi |¤Ž y	)z:Check that the results do not depend on the strategy used.)r   r   r¯   Ú	haversine©rö   rø   r   Frü   r®   r"  Nrf   rþ   rw   rÿ   T©r   r   r…   Úparallel_on_X)r   rr   r  Ústrategyr  Úparallel_on_Y)r"   r#   r$   r  r›   Úobjectr'   r³   Úascontiguousarrayr   rt   rÖ   r+   r  )r  Úglobal_dtyperõ   r   r(   r   r  r	  r  rg   rh   r
  r  r  rw   Ú
dist_par_XÚindices_par_XÚ
dist_par_YÚindices_par_Ys                      r*   Útest_strategies_consistencyr/    s  € ô �)‰)×
Ñ
Ð 2Ó
3€CØ�Z‰ZÜ
�‰òô ô	
ó
€Fð  #Ÿz™zÒ*=ÀAÈu˜zÓUÑ€K�Ø€FØ�‰�˜jÓ)×0Ñ0°Ó>ÀÑG€AØ�‰�˜jÓ)×0Ñ0°Ó>ÀÑG€Að �ÒÜ× Ñ  ¢1 b q b 5¡Ó*ˆÜ× Ñ  ¢1 b q b 5¡Ó*ˆà”WÑØˆ	ØÐØÑä$ q¨A°fÔ=ˆØˆ	Ø$ fÐ-ÐØ,¨dÐ3Ðà 2 
× 2Ñ 2Ø	Ø	Øð!ð ä-Ø�JÐ%7ô
à
ñð  !Ñ#Ø Øñ!ð ñ!Ñ€J�ð  !3 
× 2Ñ 2Ø	Ø	Øð!ð ä-Ø�JÐ%7ô
à
ñð  !Ñ#Ø Øñ!ð ñ!Ñ€J�ô  �:˜|Ð,Ñ-Ø�J ¨}ñØ@Pór,   r&  )r%  r'  c                 óÚ  — t         j                  j                  | «      }|j                  ddg«      }	|j                  ddg«      }
d}|
|j	                  ||	«      j                  |«      |z  z   }|
|j	                  ||	«      j                  |«      |z  z   } ||«      } ||«      }|dk(  r<t        j                  |d d …d d…f   «      }t        j                  |d d …d d…f   «      }t        ||	«      d   }|dk(  rt        ||«      }nt        ||fd	|i|¤Ž}t        j                  |d
¬«      d d …d |…f   }t        j                  |j                  t         j                  ¬«      }t        |j                  d   «      D ]  }||||   f   ||<   Œ t        j                   ||f||f«      D ]?  \  }}t#        j$                  |||||d|dz  |¬«      \  }}t'        t"        |f   ||||«       ŒA y )Nr  rû   r   ç    €„.Aéè  r"  r   r   r   rR   rm   r#  Tr…   )r   rr   r  r  r&  )r"   r#   r$   r  r'   r³   r)  r+   r   r   ÚargsortÚzerosrZ   r´   r[   r  r  r   rÖ   r  )r  r   r&  rö   r¬   rc   r  rÁ   r(   r   Útranslationr  rg   rh   rº   r»   rr   Údist_matrixÚargkmin_indices_refÚargkmin_distances_refÚrow_idxr  r  Úargkmin_distancesÚargkmin_indicess                            r*   Útest_pairwise_distances_argkminr<  V  s  € ô �)‰)×
Ñ
Ð 2Ó
3€CØ—‘˜R ˜IÓ&€JØ—*‘*˜a ˜XÓ&€KØ€FØ�c—h‘h˜y¨*Ó5×<Ñ<¸UÓCÀfÑLÑL€AØ�c—h‘h˜y¨*Ó5×<Ñ<¸UÓCÀfÑLÑL€Aá˜!Ó€EÙ˜!Ó€Eð �ÒÜ× Ñ  ¢1 b q b 5¡Ó*ˆÜ× Ñ  ¢1 b q b 5¡Ó*ˆä+¨F°JÓ?ÀÑB€Mð �Òä)¨!¨QÓ/‰ä˜A˜qÑA¨ÐA°=ÑAˆäŸ*™* [°qÔ9º!¸R¸a¸R¸%Ñ@ÐäŸH™HÐ%8×%>Ñ%>ÄbÇjÁjÔQÐÜÐ,×2Ñ2°1Ñ5Ó6ò 
ˆØ)4ØÐ(¨Ñ1Ð1ñ*
Ð˜gÒ&ð
ô
 ×#Ñ# Q¨ J°°E°
Ó;ò 
‰ˆˆBÜ-4¯_©_ØØØØØ'Ø à  A‘~Øô
.
Ñ*Ð˜?ô 	”w Ð&Ñ'ØØ!ØØõ		
ñ
r,   c                 ó  — t         j                  j                  | «      }|j                  ddg«      }|j                  ddg«      }d}	||j	                  ||«      j                  |«      |	z  z   }
||j	                  ||«      j                  |«      |	z  z   }t        ||| ¬«      d   }|dk(  rt        |
|«      }nt        |
|fd|i|¤Ž}t        |¬	«      }g }g }|D ]p  }t        j                  |j                  d   «      ||k     }||   }t        j                  |«      }||   ||   }}|j                  |«       |j                  |«       Œr t        j                  |
||||d
|dz  |d
¬«	      \  }}t!        t        |f   |||||«       y )Nr  rû   r   r1  r2  r$  r   r   )ri   Tr…   )r   rr   r  r  r&  rÿ   )r"   r#   r$   r  r'   r³   r+   r   r   rt   ÚarangerZ   r3  Úappendr
   rÖ   r  )r  r   r&  rö   rc   r  r(   r   r5  r  rg   rh   rr   r6  rw   Úneigh_indices_refÚneigh_distances_refÚrowÚindr  rp   Úneigh_distancesÚneigh_indicess                          r*   Ú(test_pairwise_distances_radius_neighborsrF  ™  s´  € ô �)‰)×
Ñ
Ð 2Ó
3€CØ—‘˜R ˜IÓ&€JØ—*‘*˜a ˜XÓ&€KØ€FØ�c—h‘h˜y¨*Ó5×<Ñ<¸UÓCÀfÑLÑL€AØ�c—h‘h˜y¨*Ó5×<Ñ<¸UÓCÀfÑLÑL€Aä+Ø�
Ð!3ôàñ	€Mð
 �Òä)¨!¨QÓ/‰ä˜A˜qÑA¨ÐA°=ÑAˆä °;Ô?€Fð ÐØÐàò )ˆÜ�i‰i˜Ÿ	™	 !™Ó% c¨V¡mÑ4ˆØ�3‰xˆä�z‰z˜$ÓˆØ˜‘I˜t D™zˆTˆà× Ñ  Ô%Ø×"Ñ" 4Õ(ð)ô &5×%<Ñ%<Ø	Ø	ØØØ#Øà ‘>ØØô&Ñ"€O�]ô ”? EÐ*Ñ+ØÐ,¨mÐ=NÐPVõr,   r¯   r   c                 óö  — t         j                  j                  d«      }d}d\  }}|j                  ||«      j	                  |«      |z  }|j                  ||«      j	                  |«      |z  }t        ||g«      \  }	}
|t        u rd}i }i }n"dt        j                  |«      z  }|}d|i}ddi} |j                  |||f| ddœ|¤Ž\  }} |j                  |	|
|f| ddœ|¤Ž\  }}t        ||f   ||||fi |¤Ž y	)
zACheck that the results do not depend on the datasets writability.r   r®   )é€   rf   rf   rw   rÿ   T)r   r  N)
r"   r#   r$   r'   r³   r   r   ÚlogrÖ   r  )r   rõ   rö   r(   r  r  r   rg   rh   ÚX_mmÚY_mmr
  r  r  rw   r¦   r§   Údist_mmÚ
indices_mms                      r*   Útest_memmap_backed_datarN  Ø  sY  € ô �)‰)×
Ñ
 Ó
"€CØ€FØ#Ñ€IˆzØ�‰�˜JÓ'×.Ñ.¨uÓ5¸Ñ>€AØ�‰�˜JÓ'×.Ñ.¨uÓ5¸Ñ>€Aô +¨A¨q¨6Ó2�J€Dˆ$à”WÑØˆ	ØÐØÑð ”r—v‘v˜jÓ)Ñ)ˆØˆ	Ø$ fÐ-ÐØ,¨dÐ3Ðà.˜J×.Ñ.Ø	Ø	Øðð Øñð ñÑ€Hˆkð -˜*×,Ñ,ØØØðð Øñð ñÑ€GˆZô �:˜uÐ%Ñ&Ø�'˜;¨
ñØ6Fór,   c                 ó\  — t         j                  j                  | «      }d}|j                  g d¢«      }|j                  g d¢«      }|j                  g d¢«      }|j	                  ||«      j                  |«      |z  } ||«      }	t         j                  j                  |d¬«      dz  }
t        ||¬«      }t        |	|¬«      }t        |
|«       t        |
|«       t        j                  t        «      5  t        j                  |«      }t        ||¬«       d d d «       y # 1 sw Y   y xY w)	Nr®   )rù   r®   rú   r2  )r†   rf   r®   )rR   r   rŠ   rR   rm   r   rË   )r"   r#   r$   r  r'   r³   ÚlinalgÚnormr   r   rž   rŸ   rÕ   r¸   )r  rö   r¬   r(   r  r  r   rÌ   rg   rº   Úsq_row_norm_referenceÚsq_row_normÚsq_row_norm_csrs                r*   Útest_sqeuclidean_row_normsrU    sø   € ô �)‰)×
Ñ
Ð 2Ó
3€CØ€FØ—
‘
Ò/Ó0€IØ—‘šLÓ)€JØ—*‘*šYÓ'€KØ�‰�˜JÓ'×.Ñ.¨uÓ5¸Ñ>€Aá˜!Ó€EäŸI™IŸN™N¨1°1˜NÓ5¸Ñ:ÐÜ'¨°{ÔC€Kä+¨E¸{ÔK€OäÐ)¨;Ô7ÜÐ)¨?Ô;ä	�‰”zÓ	"ñ :Ü×Ñ˜aÓ ˆÜ˜a¨[Õ9÷:÷ :ñ :ús   Ã6#D"Ä"D+c            
      ót  — t         j                  j                  d«      } | j                  dd«      }| j                  dd«      }d}d}d}| j	                  ddd¬«      }t        j
                  |«      }t        j                  |||||||d	¬
«      }t        j                  |||||||d¬
«      }	t        ||	«       y )NrR   r®   rf   r†   r¯   rà   r   rá   r%  )rg   rh   rÁ   r   rå   ræ   rç   r&  r'  )	r"   r#   r$   r'   rë   rì   r   rÖ   r   )
r(   rg   rh   rÁ   r   rå   ræ   rç   Ú	results_XÚ	results_Ys
             r*   Ú*test_argkmin_classmode_strategy_consistentrY  )  sÅ   € Ü
�)‰)×
Ñ
 Ó
"€CØ�‰��bÓ€AØ�‰��bÓ€AØ	€AØ€Fà€GØ�{‰{˜q r°ˆ{Ó4€HÜ—i‘i Ó)€OÜ ×(Ñ(Ø
Ø
Ø
ØØØØ'Ø ô	€Iô !×(Ñ(Ø
Ø
Ø
ØØØØ'Ø ô	€Iô �y )Õ,r,   rò   )Nr   r   rˆ   r‹   c                 óx  — t         j                  j                  d«      }|j                  dd«      }|j                  dd«      }d}d}d}|j	                  ddd¬«      }t        j
                  |«      }t        j                  |||||||| d	¬
«	      }	t        j                  |||||||| d¬
«	      }
t        |	|
«       y )NrR   r®   rf   r†   r¯   rà   r   rá   r%  )	rg   rh   rw   r   rå   ræ   rç   rò   r&  r'  )	r"   r#   r$   r'   rë   rì   r   rÖ   r   )rò   r(   rg   rh   rw   r   rå   ræ   rç   rW  rX  s              r*   Ú3test_radius_neighbors_classmode_strategy_consistentr[  J  sË   € ä
�)‰)×
Ñ
 Ó
"€CØ�‰��bÓ€AØ�‰��bÓ€AØ€FØ€Fà€GØ�{‰{˜q r°ˆ{Ó4€HÜ—i‘i Ó)€OÜ(×0Ñ0Ø
Ø
ØØØØØ'Ø#Ø ô
€Iô )×0Ñ0Ø
Ø
ØØØØØ'Ø#Ø ô
€Iô �I˜yÕ)r,   )rR   )rM   ç�íµ ÷Æ°>)TrM   r\  )r®   )rf   )r†   r®   rf   )r†   r®   )=r  rœ   rÙ   Ú	functoolsr   Únumpyr"   rž   Úscipy.spatial.distancer   Úsklearn.metricsr   r   Ú-sklearn.metrics._pairwise_distances_reductionr   r   r	   r
   r   r   Úsklearn.utils._testingr   r   r   Úsklearn.utils.fixesr   Úsklearn.utils.parallelr   Ú1CDIST_PAIRWISE_DISTANCES_REDUCTION_COMMON_METRICSÚstrÚintr+   rB   rL   re   rt   r{   ÚFLOAT32_TOLSÚFLOAT64_TOLSr´   rµ   r  r©   ÚmarkÚparametrizer«   r¾   rÞ   rí   rð   rô   r  r  r   r/  r<  rF  rN  rU  rY  r[  © r,   r*   ú<module>rm     sð  ðÛ Û 	Û Ý ã Û Ý (ç C÷÷ ÷ñ õ
 /Ý =ò5Ð 1ñ Cð °Sð Àó ò2#òL!
ðR 
Ø	óG
ðX Ø
ØØØØô9ðF Ø	Ø	óQ
ðj Øñ€ð
 Øñ€ð
 ˆb�j‰jÐ™7Ð#DÑUÈÑUØˆb�j‰jÐ™7Ð#DÑUÈÑUàØ
�
‰
ðñ Ð/Ñ@°<Ñ@àØ
�
‰
ðñ Ð/Ñ@°<Ñ@ð€òH
ðV ‡�×Ñ˜¨$°¨Ó7ñ_
ó 8ð_
ðD ‡�×Ñ˜¨.Ó9ñAVó :ðAVòHJSòZp
òlY
òxk
ð\ ‡�×Ñ˜¨°Ð'AÓBØ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ð
 ò	-ó <ó Cð-ð` ‡�×Ñ˜¨°Ð'AÓBØ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ð
 ò	,ó <ó Cð,ð^ ‡�×ÑØà	�"—*‘*ÐØ	˜"Ÿ*™*Ð%Ø	�"—*‘*ÐØ	˜"Ÿ*™*Ð%ð	óð ‡�×Ñ˜¨.Ó9ñ7
ó :óð7
ðt ‡�×Ñ˜¨°Ð'AÓBð
 ò	Ió CðIð^ ‡�×Ñ˜Ð#TÓUØ‡�×Ñ˜Ð%GÓHØ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;Ø‡�×Ñ˜¨.Ó9ð ØØò<
ó :ó <ó Ió Vð<
ð~ ‡�×Ñ˜Ð#TÓUØ‡�×Ñ˜Ð%GÓHØ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ð Øò9ó <ó Ió Vð9ðx ‡�×Ñ˜¨°Ð'AÓBØ‡�×Ñ˜ K°Ð#=Ó>Ø‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ñ.ó <ó ?ó Cð.ðb ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;Ø‡�×Ñ˜¨.Ó9ñ:ó :ó <ð:ò6-ðB ‡�×Ñ˜Ò*<Ó=ñ *ó >ñ *r,   