Ë
    ÷Q(h6L  ã            	       ór  — d Z ddlZddlZddlZddlmZm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 dd	lmZ dd
lmZ ddlmZ ddlmZ  ed«      Z e«       Zej=                  ej>                  j@                  «      Z!ejD                  e!   Z#ej>                  e!   Z$de#jJ                  _&        de$jJ                  _&         ejN                  e(«      jR                  Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1ejd                  jg                  dg d¢«      ejd                  jg                  dg d¢«      ejd                  jg                  dg d¢«      ejd                  jg                  dg d¢«      d„ «       «       «       «       Z4d„ Z5d„ Z6ejd                  jg                  dg d¢«      d „ «       Z7d!„ Z8d"„ Z9d#„ Z:d$„ Z;d%„ Z<d&„ Z=ejd                  jg                  d'd ej|                  d(«      fd) ej|                  d*«      fd+ ej~                  d,«      fg«      d-„ «       Z@ejd                  jg                  ddd.g«      d/„ «       ZAy)0zL
Testing for Neighborhood Component Analysis module (sklearn.neighbors.nca)
é    N)Úassert_array_almost_equalÚassert_array_equal)Ú
check_grad)Úclone)Ú	load_irisÚ
make_blobsÚmake_classification)ÚConvergenceWarning)Úpairwise_distances)ÚNeighborhoodComponentsAnalysis)ÚLabelEncoder)Úcheck_random_state)Úvalidate_dataFc                  óT  — t        j                  ddgddgddgddgg«      } t        j                  g d¢«      }t        ddd¬«      }|j                  | |«       |j	                  | «      }t        t        |«      j                  «       dd…df   t        j                  g d	¢«      «       y)
z×Test on a simple example.

    Puts four points in the input space where the opposite labels points are
    next to each other. After transform the samples from the same class
    should be next to each other.

    r   é   é   )r   r   r   r   Úidentityé*   )Ún_componentsÚinitÚrandom_stateN)r   é   r   r   )ÚnpÚarrayr   ÚfitÚ	transformr   r   Úargsort)ÚXÚyÚncaÚX_ts       ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/neighbors/tests/test_nca.pyÚtest_simple_exampler#   $   s’   € ô 	�‰�1�a�&˜1˜a˜& 1 a &¨1¨a¨&Ð1Ó2€AÜ
�‰’Ó€AÜ
(Ø˜Z°bô€Cð ‡G�GˆAˆq„MØ
�-‰-˜Ó
€CÜÔ)¨#Ó.×6Ñ6Ó8º¸A¸Ñ>ÄÇÁÊÓ@VÕWó    c                  óÖ  — t         j                  j                  d«      } d}| j                  d|«      }t        j                  ||j                  d¬«      t         j                  dd…f   g«      }g d¢} G d„ d	«      } |||«      }t        d|j                  ¬
«      }|j                  ||«      }t        |«       t        ||d   z
  d«       t        |j                  dz   «      dk  sJ ‚y)aö  Test on a toy example of three points that should collapse

    We build a simple example: two points from the same class and a point from
    a different class in the middle of them. On this simple example, the new
    (transformed) points should all collapse into one single point. Indeed, the
    objective is 2/(1 + exp(d/2)), with d the euclidean distance between the
    two samples from the same class. This is maximized for d=0 (because d>=0),
    with an objective equal to 1 (loss=-1.).

    r   é   r   r   )ÚaxisN)r   r   r   c                   ó   — e Zd Zd„ Zd„ Zy)ú4test_toy_example_collapse_points.<locals>.LossStorerc                 óf  — t         j                  | _        t        «       | _        t         j                  | j                  _        t        | j                  ||d¬«      \  | _        }t        «       j                  |«      }|d d …t         j                  f   |t         j                  d d …f   k(  | _        y ©Nr   )Úensure_min_samples)r   ÚinfÚlossr   Úfake_ncaÚn_iter_r   r   r   Úfit_transformÚnewaxisÚsame_class_mask©Úselfr   r   s      r"   Ú__init__z=test_toy_example_collapse_points.<locals>.LossStorer.__init__H   sz   € ÜŸ™ˆDŒIä:Ó<ˆDŒMÜ$&§F¡FˆD�M‰MÔ!Ü% d§m¡m°Q¸ÈaÔP‰IˆDŒF�AÜ“×,Ñ,¨QÓ/ˆAØ#$¢Q¬¯
©
 ]Ñ#3°q¼¿¹ÂQ¸Ñ7GÑ#GˆDÕ r$   c                 óx   — | j                   j                  || j                  | j                  d«      \  | _        }y)z*Stores the last value of the loss functiong      ð¿N)r/   Ú_loss_grad_lbfgsr   r3   r.   )r5   ÚtransformationÚn_iterÚ_s       r"   Úcallbackz=test_toy_example_collapse_points.<locals>.LossStorer.callbackQ   s/   € àŸ=™=×9Ñ9Ø §¡¨×(<Ñ(<¸dó‰LˆDŒI‘qr$   N©Ú__name__Ú
__module__Ú__qualname__r6   r<   © r$   r"   Ú
LossStorerr)   G   s   „ ò	Hó	r$   rB   )r   r<   ç        r   g»½×Ùß|Û=)r   ÚrandomÚRandomStateÚrandnÚvstackÚmeanr2   r   r<   r1   Úprintr   Úabsr.   )	ÚrngÚ	input_dimÚ
two_pointsr   r   rB   Úloss_storerr    r!   s	            r"   Ú test_toy_example_collapse_pointsrO   6   sÐ   € ô �)‰)×
Ñ
 Ó
#€CØ€IØ—‘˜1˜iÓ(€JÜ
�	‰	�:˜zŸ™°A˜Ó6´r·z±zÂ1°}ÑEÐFÓG€AÚ€A÷ñ ñ  ˜Q Ó"€KÜ
(°bÀ;×CWÑCWÔ
X€CØ
×
Ñ
˜A˜qÓ
!€CÜ	ˆ#„Jä˜c C¨¡F™l¨CÔ0Üˆ{×Ñ !Ñ#Ó$ uÒ,Ð,Ñ,r$   c                 óî  ‡‡‡	— t         j                  j                  | «      }t        | ¬«      \  Š}|j	                  |j                  d‰j                  d   dz   «      ‰j                  d   «      }t        «       Š	d‰	_        |dd…t         j                  f   |t         j                  dd…f   k(  Šˆˆˆ	fd„}ˆˆˆ	fd„}t        |||j                  «       «      }|t        j                  dd¬	«      k(  sJ ‚y)
z~Test gradient of loss function

    Assert that the gradient is almost equal to its finite differences
    approximation.
    )r   r   r   Nc                 ó0   •— ‰j                  | ‰‰«      d   S )Nr   ©r8   ©ÚMr   Úmaskr    s    €€€r"   Úfunz$test_finite_differences.<locals>.funn   ó   ø€ Ø×#Ñ# A q¨$Ó/°Ñ2Ð2r$   c                 ó0   •— ‰j                  | ‰‰«      d   S )Nr   rR   rS   s    €€€r"   Úgradz%test_finite_differences.<locals>.gradq   rW   r$   rC   ç-Cëâ6?)rJ   )r   rD   rE   r	   rF   ÚrandintÚshaper   r0   r2   r   ÚravelÚpytestÚapprox)
Úglobal_random_seedrK   r   rT   rV   rY   Údiffr   rU   r    s
          @@@r"   Útest_finite_differencesrb   `   sÄ   ú€ ô �)‰)×
Ñ
Ð 2Ó
3€CÜÐ,>Ô?�D€A€qØ�	‰	�#—+‘+˜a §¡¨¡¨a¡Ó0°!·'±'¸!±*Ó=€AÜ
(Ó
*€CØ€C„KØŠQ”—
‘
ˆ]Ñ˜q¤§¡ªQ Ñ/Ñ/€Dö3ö3ô �c˜4 §¡£Ó+€DØ”6—=‘= ¨$Ô/Ò/Ð/Ñ/r$   c                  óª  — t        j                  d«      j                  dd«      } g d¢}t        }t         j                  j                  d«      }|j                  dd«      }d|j                  d   › d	|j                  d
   › d�}t        j                  t        t        j                  |«      ¬«      5   ||¬«      j                  | |«       d d d «       d}d|› d| j                  d
   › d�}t        j                  t        t        j                  |«      ¬«      5   ||¬«      j                  | |«       d d d «       y # 1 sw Y   ŒrxY w# 1 sw Y   y xY w)Né   é   r   ©r   r   r   r   r   r&   úThe output dimensionality (r   ú]) of the given linear transformation `init` cannot be greater than its input dimensionality (r   ú).©Úmatch©r   é
   úDThe preferred dimensionality of the projected space `n_components` (ú8) cannot be greater than the given data dimensionality (ú)!©r   )r   ÚarangeÚreshaper   rD   rE   Úrandr\   r^   ÚraisesÚ
ValueErrorÚreÚescaper   )r   r   ÚNCArK   r   Úmsgr   s          r"   Útest_params_validationr{   y   s,  € ä
�	‰	�"‹×Ñ˜a Ó#€AÚ€AÜ
(€CÜ
�)‰)×
Ñ
 Ó
#€Cà�8‰8�A�q‹>€Dà
% d§j¡j°¡m _ð 52à26·*±*¸Q±-°Àð	Dð ô
 
�‰”z¬¯©°3«Ô	8ñ !Ù�Œ×Ñ˜1˜aÔ ÷!à€Lð	Ø'˜.ð )/Ø/0¯w©w°q©z¨l¸"ð	>ð ô
 
�‰”z¬¯©°3«Ô	8ñ 1Ù˜Ô&×*Ñ*¨1¨aÔ0÷1ð 1÷!ð !ú÷1ð 1ús   Â2D=ÄE	Ä=EÅ	Ec                  ór  — t        j                  d«      j                  dd«      } g d¢}t        j                  ddgddgg«      }t	        j
                  t        «      5  t        |¬«      j                  | |«       d d d «       t        j                  ddgddgdd	gg«      }t	        j
                  t        «      5  t        |¬«      j                  | |«       d d d «       t        j                  d
«      j                  dd«      }t        |¬«      j                  | |«       y # 1 sw Y   Œ§xY w# 1 sw Y   ŒWxY w)Nrd   re   r   rf   r   r   rl   r&   é   é	   )	r   rr   rs   r   r^   ru   rv   r   r   )r   r   r9   s      r"   Útest_transformation_dimensionsr   ’   s  € Ü
�	‰	�"‹×Ñ˜a Ó#€AÚ€Aô —X‘X  1˜v¨¨1 vÐ.Ó/€NÜ	�‰”zÓ	"ñ FÜ&¨NÔ;×?Ñ?ÀÀ1ÔE÷Fô
 —X‘X  1˜v¨¨1 v°°1¨vÐ6Ó7€Nä	�‰”zÓ	"ñ FÜ&¨NÔ;×?Ñ?ÀÀ1ÔE÷Fô —Y‘Y˜q“\×)Ñ)¨!¨QÓ/€NÜ"¨Ô7×;Ñ;¸A¸qÕA÷Fð Fú÷Fð Fús   ÁD!Â:D-Ä!D*Ä-D6c                  ó8  — t         j                  j                  d«      } t        j                  d«      j	                  dd«      }g d¢}| j                  |j                  d   dz
  d«      }|j                  d   }t        ||¬«      }d|› d	|j                  d
   › d�}t        j                  t        t        j                  |«      ¬«      5  |j                  ||«       d d d «       |j                  d   dz   }t        ||¬«      }d|› d|j                  d   › d�}t        j                  t        t        j                  |«      ¬«      5  |j                  ||«       d d d «       t        dd¬«      }|j                  ||«       y # 1 sw Y   Œ§xY w# 1 sw Y   Œ5xY w)Nr   rd   re   r   rf   r   ©r   r   rn   úV) does not match the output dimensionality of the given linear transformation `init` (r   rp   rj   r   ro   r   )r   r   )r   rD   rE   rr   rs   rt   r\   r   r^   ru   rv   rw   rx   r   )rK   r   r   r   r   r    rz   s          r"   Útest_n_componentsrƒ   §   sj  € Ü
�)‰)×
Ñ
 Ó
#€CÜ
�	‰	�"‹×Ñ˜a Ó#€AÚ€Aà�8‰8�A—G‘G˜A‘J ‘N AÓ&€Dð —7‘7˜1‘:€LÜ
(¨dÀÔ
N€Cð	Ø'˜.ð )à—:‘:˜a‘=�/ ð	%ð ô 
�‰”z¬¯©°3«Ô	8ñ Ø�‰��1Œ÷ð —7‘7˜1‘: ‘>€LÜ
(¨dÀÔ
N€Cð	Ø'˜.ð )*Ø*+¯'©'°!©*¨°Rð	9ð ô
 
�‰”z¬¯©°3«Ô	8ñ Ø�‰��1Œ÷ô )°a¸jÔ
I€CØ‡G�GˆAˆq…M÷!ð ú÷ð ús   ÃFÅ	FÆFÆFc                  ó`  — t         j                  j                  d«      } t        dddd¬«      \  }}t	        d¬«      }|j                  ||«       t	        d	¬«      }|j                  ||«       t	        d
¬«      }|j                  ||«       t	        d¬«      }|j                  ||«       t	        d¬«      }|j                  ||«       | j                  |j                  d   |j                  d   «      }t	        |¬«      }|j                  ||«       | j                  |j                  d   |j                  d   dz   «      }t	        |¬«      }d|j                  d   › d|j                  d   › d�}	t        j                  t        t        j                  |	«      ¬«      5  |j                  ||«       d d d «       | j                  |j                  d   dz   |j                  d   «      }t	        |¬«      }d|j                  d   › d|j                  d   › d�}	t        j                  t        t        j                  |	«      ¬«      5  |j                  ||«       d d d «       | j                  |j                  d   |j                  d   «      }|j                  d   dz
  }
t	        ||
¬«      }d|
› d|j                  d   › d�}	t        j                  t        t        j                  |	«      ¬«      5  |j                  ||«       d d d «       y # 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   ©Ú	n_samplesÚcentersÚ
n_featuresr   r   rl   rD   ÚautoÚpcaÚldar   zThe input dimensionality (zc) of the given linear transformation `init` must match the dimensionality of the given inputs `X` (ri   rj   rg   rh   r   r�   rn   r‚   rp   )r   rD   rE   r   r   r   rt   r\   r^   ru   rv   rw   rx   )rK   r   r   r    Ú
nca_randomÚnca_autoÚnca_pcaÚnca_ldar   rz   r   s              r"   Útest_init_transformationr‘   Ê   s¸  € Ü
�)‰)×
Ñ
 Ó
#€CÜ ¨A¸!È!ÔL�D€A€qô )¨jÔ
9€CØ‡G�GˆAˆq„Mô 0°XÔ>€JØ‡N�N�1�aÔô .°6Ô:€HØ‡L�L��AÔô -°%Ô8€GØ‡K�K��1Ôô -°%Ô8€GØ‡K�K��1Ôà�8‰8�A—G‘G˜A‘J §¡¨¡
Ó+€DÜ
(¨dÔ
3€CØ‡G�GˆAˆq„Mð �8‰8�A—G‘G˜A‘J §¡¨¡
¨Q¡Ó/€DÜ
(¨dÔ
3€Cà
$ T§Z¡Z°¡] Oð 43à34·7±7¸1±:°,¸bð	Bð ô
 
�‰”z¬¯©°3«Ô	8ñ Ø�‰��1Œ÷ð �8‰8�A—G‘G˜A‘J ‘N A§G¡G¨A¡JÓ/€DÜ
(¨dÔ
3€Cà
% d§j¡j°¡m _ð 52à26·*±*¸Q±-°Àð	Dð ô
 
�‰”z¬¯©°3«Ô	8ñ Ø�‰��1Œ÷ð �8‰8�A—G‘G˜A‘J §¡¨¡
Ó+€DØ—7‘7˜1‘: ‘>€LÜ
(¨dÀÔ
N€Cð	+Ø+7¨.ð 9)à)-¯©°A©¨°rð	;ð ô 
�‰”z¬¯©°3«Ô	8ñ Ø�‰��1Œ÷ð ÷1ñ ú÷ð ú÷ð ús$   ÆLÉLË/L$ÌLÌL!Ì$L-r‡   )r   r&   é   é   r‰   Ú	n_classes)r&   r’   r“   r   c                 ór  — t         j                  j                  d«      }t        d|d|¬«      }|| k\  ry |j	                  | |«      }t        j
                  t        |«      | |z  dz   «      d |  }||kD  ry t        |«      }|j                  ||«       |t        |dz
  |«      k  rt        |«      j                  d¬«      }	nF|t        || «      k  rt        |«      j                  d¬«      }	nt        |«      j                  d¬«      }	|	j                  ||«       t        |j                  |	j                  «       y )	Nr   rŠ   r   )r   r   Úmax_iterr   rŒ   rl   r‹   r   )r   rD   rE   r   rF   ÚtileÚranger   r   ÚminÚ
set_paramsr   Úcomponents_)
r‡   r‰   r”   r   rK   Únca_baser   r   r    Ú	nca_others
             r"   Útest_auto_initrž   
  s  € ô �)‰)×
Ñ
 Ó
#€CÜ-Ø ,¸Èô€Hð �IÒØð �I‰I�i Ó,ˆÜ�G‰G”E˜)Ó$ i°9Ñ&<¸qÑ&@ÓAÀ*À9ÐMˆØ˜*Ò$ð ä˜“/ˆCØ�G‰G�A�qŒMØœs 9¨q¡=°*Ó=Ò=Ü! (›O×6Ñ6¸EÐ6ÓB‘	Ø¤ J°	Ó :Ò:Ü! (›O×6Ñ6¸EÐ6ÓB‘	ä! (›O×6Ñ6¸JÐ6ÓG�	Ø�M‰M˜!˜QÔÜ% c§o¡o°y×7LÑ7LÕMr$   c                  ó–  — t        dddddd¬«      \  } }t        dd¬«      }|j                  | |«       t        dddddd¬«      \  }}d|j                  d	   › d
|j                  j                  d	   › d�}t        j                  t        t        j                  |«      ¬«      5  |j                  ||«       d d d «       y # 1 sw Y   y xY w)Nr…   r&   re   r   )r‡   r‰   r”   Ún_redundantÚn_informativer   T)Ú
warm_startr–   zThe new inputs dimensionality (r   zT) does not match the input dimensionality of the previously learned transformation (ri   rj   )
r	   r   r   r\   r›   r^   ru   rv   rw   rx   )r   r   r    ÚX_less_featuresrz   s        r"   Útest_warm_start_validationr¤   -  sÕ   € ÜØØØØØØô�D€A€qô )°DÀ1Ô
E€CØ‡G�GˆAˆq„Mä,ØØØØØØôÑ€O�Qð *¨/×*?Ñ*?ÀÑ*BÐ)Cð DàŸ?™?×0Ñ0°Ñ3Ð4°Bð	8ð ô
 
�‰”z¬¯©°3«Ô	8ñ $Ø�‰� Ô#÷$÷ $ñ $ús   Â#B?Â?Cc                  ó`  — t        dd¬«      } | j                  t        t        «       | j                  }d| _        | j                  t        t        «       | j                  }t        dd¬«      }|j                  t        t        «       |j                  }d|_        |j                  t        t        «       |j                  }t        j                  t        j                  ||z
  «      «      }t        j                  t        j                  ||z
  «      «      }|dk  sJ d«       ‚||kD  sJ d«       ‚y )	NTr   )r¢   r   r   Fg      @zVTransformer changed significantly after one iteration even though it was warm-started.zfCold-started transformer changed less significantly than warm-started transformer after one iteration.)	r   r   Ú	iris_dataÚiris_targetr›   r–   r   ÚsumrJ   )Únca_warmÚtransformation_warmÚtransformation_warm_plus_oneÚnca_coldÚtransformation_coldÚtransformation_cold_plus_oneÚ	diff_warmÚ	diff_colds           r"   Útest_warm_start_effectivenessr±   K  s  € ô .¸ÈAÔN€HØ‡L�L”œKÔ(Ø"×.Ñ.ÐØ€HÔØ‡L�L”œKÔ(Ø#+×#7Ñ#7Ð ä-¸ÈQÔO€HØ‡L�L”œKÔ(Ø"×.Ñ.ÐØ€HÔØ‡L�L”œKÔ(Ø#+×#7Ñ#7Ð ä—‘”r—v‘vÐ:Ð=PÑPÓQÓR€IÜ—‘”r—v‘vÐ:Ð=PÑPÓQÓR€IØ�sŠ?ð ð	5óˆ?ð
 �yÒ ð ð	+óÑ r$   Ú	init_name)r‹   rŒ   r   rD   Úprecomputedc                 ó
  — t         j                  j                  d«      }t        dddd¬«      \  }}d}d|z   d	|z   d
œ}| dk(  r-|j	                  |j
                  d   |j
                  d   «      }n| }t        d|¬«      }|j                  ||«       |j                  «       \  }	}
t        j                  d|	«      }| d
v r#t        j                  ||    |d   «      sJ ‚|dd  }|d   dk(  sJ ‚dj                  ddd«      }|d   dj                  |«      k(  sJ ‚|d   dj                  dt        |«      z  «      k(  sJ ‚|dd D ]  }t        j                  d|«      rŒJ ‚ t        j                  d|d   «      sJ ‚|d   dk(  sJ ‚y )Nr   r…   r}   r&   r   r†   z... done in \ *\d+\.\d{2}szFinding principal componentsz&Finding most discriminative components)r‹   rŒ   r³   r   )Úverboser   z
+z [NeighborhoodComponentsAnalysis]z{:>10} {:>20} {:>10}Ú	IterationzObjective ValuezTime(s)z#[NeighborhoodComponentsAnalysis] {}r   ú-r   éþÿÿÿzH\[NeighborhoodComponentsAnalysis\] *\d+ *\d\.\d{6}e[+|-]\d+\ *\d+\.\d{2}z@\[NeighborhoodComponentsAnalysis\] Training took\ *\d+\.\d{2}s\.éÿÿÿÿÚ )r   rD   rE   r   rF   r\   r   r   Ú
readouterrrw   Úsplitrk   ÚformatÚlen)r²   ÚcapsysrK   r   r   Úregexp_initÚmsgsr   r    Úoutr;   ÚlinesÚheaderÚlines                 r"   Útest_verboserÆ   k  s»  € ô �)‰)×
Ñ
 Ó
#€CÜ ¨A¸!È!ÔL�D€A€qØ/€Kà-°Ñ;Ø7¸+ÑEñ€Dð �MÒ!Ø�y‰y˜Ÿ™ ™ Q§W¡W¨Q¡ZÓ0‰àˆÜ
(°¸Ô
>€CØ‡G�GˆAˆq„MØ×ÑÓ �F€Cˆô �H‰H�U˜CÓ €Eð �NÑ"Ü�x‰x˜˜Y™¨¨q©Ô2Ð2Ð2Ø�a�b�	ˆØ�‰8Ð9Ò9Ð9Ð9Ø#×*Ñ*¨;Ð8IÈ9ÓU€FØ�‰8Ð<×CÑCÀFÓKÒKÐKÐKØ�‰8Ð<×CÑCÀCÌ#ÈfË+ÑDUÓVÒVÐVÐVØ�a˜�ò 
ˆô �x‰xð%àõ
ð 	
ð 
ð
ô �8‰8ØOØˆb‰	ôð ð ð �‰9˜Š?Ð‰?r$   c                 ó€   — t        «       }|j                  t        t        «       | j	                  «       \  }}|dk(  sJ ‚y )Nrº   )r   r   r¦   r§   r»   )r¿   r    rÂ   r;   s       r"   Útest_no_verboserÈ   š  s6   € ä
(Ó
*€CØ‡G�GŒI”{Ô#Ø×ÑÓ �F€Cˆà�"Š9Ð‰9r$   c                  ó  — t         j                  «       } t        j                  «       }d}t        j                  ||k(  «      \  }d||<   |||d   <   t        d¬«      }|j                  | |«       t        j                  |dk(  «      \  }t        j                  |dk(  «      \  }d||<   d||d   <   d||<   d||d   <   t        d¬«      }|j                  | |«       t        j                  |dk(  «      \  }t        j                  |dk(  «      \  }t        j                  |dk(  «      \  }| |d   |d   |d   g   } ||d   |d   |d   g   }t        dd¬«      }|j                  | |«       t        | |j                  | «      «       y )Nr   r   r   r…   )r–   r   )r   r–   )	r¦   Úcopyr§   r   Úwherer   r   r   r   )r   r   Úsingleton_classÚind_singletonr    Úind_1Úind_2Úind_0s           r"   Útest_singleton_classrÑ   £  sz  € Ü�‰Ó€AÜ×ÑÓ€Að €OÜ—x‘x  _Ñ 4Ó5Ñ€]Ø€A€mÑØ)€A€m�AÑÑä
(°"Ô
5€CØ‡G�GˆAˆq„Mô �x‰x˜˜Q™Ó�H€UÜ�x‰x˜˜Q™Ó�H€UØ€A€e�HØ€A€eˆA�h�KØ€A€e�HØ€A€eˆA�h�Kä
(°"Ô
5€CØ‡G�GˆAˆq„Mô �x‰x˜˜Q™Ó�H€UÜ�x‰x˜˜Q™Ó�H€UÜ�x‰x˜˜Q™Ó�H€UØ	ˆ5�‰8�U˜1‘X˜u Q™xÐ
(Ñ)€AØ	ˆ5�‰8�U˜1‘X˜u Q™xÐ
(Ñ)€Aä
(¨jÀ2Ô
F€CØ‡G�GˆAˆq„MÜ�q˜#Ÿ-™-¨Ó*Õ+r$   c                  óÔ   — t         t        dk(     } t        t        dk(     }t        d| j                  d   d¬«      }|j	                  | |«       t        | |j                  | «      «       y )Nr   r…   r   r   )r–   r   r   )r¦   r§   r   r\   r   r   r   )r   r   r    s      r"   Útest_one_classrÓ   Ç  s[   € Ü”+ Ñ"Ñ#€AÜ”K 1Ñ$Ñ%€Aä
(Ø !§'¡'¨!¡*°:ô€Cð ‡G�GˆAˆq„MÜ�q˜#Ÿ-™-¨Ó*Õ+r$   c                 óº   ‡— dŠˆfd„}t        ‰|d¬«      }|j                  t        t        «       | j	                  «       \  }}dj                  ‰dz
  «      |v sJ ‚y )Nrm   c                 ó�   •— | j                   t        j                   d   dz  fk(  sJ ‚‰|z
  }t        dj                  |«      «       y )Nr   r   ú{} iterations remaining...)r\   r¦   rI   r½   )r9   r:   Úrem_iterr–   s      €r"   Úmy_cbztest_callback.<locals>.my_cbÕ  sF   ø€ Ø×#Ñ#¬	¯©¸Ñ(:¸aÑ(?Ð'AÒAÐAÐAØ˜fÑ$ˆÜÐ*×1Ñ1°(Ó;Õ<r$   r   )r–   r<   rµ   rÖ   )r   r   r¦   r§   r»   r½   )r¿   rØ   r    rÂ   r;   r–   s        @r"   Útest_callbackrÙ   Ò  s]   ø€ Ø€Hô=ô )°(ÀUÐTUÔ
V€CØ‡G�GŒI”{Ô#Ø×ÑÓ �F€Cˆð (×.Ñ.¨x¸!©|Ó<ÀÑCÐCÑCr$   c                  óî   — t         } t        } G d„ d«      } || |«      }|j                  }t        d|¬«      }|j	                  | |«       |j
                  j                  | j                  d   dz  k(  sJ ‚y)z4Test that the transformation has the expected shape.c                   ó   — e Zd Zd„ Zd„ Zy)ú@test_expected_transformation_shape.<locals>.TransformationStorerc                 ó<  — t        «       | _        t        j                  | j                  _        t        | j                  ||d¬«      \  | _        }t        «       j                  |«      }|d d …t        j                  f   |t        j                  d d …f   k(  | _
        y r+   )r   r/   r   r-   r0   r   r   r   r1   r2   r3   r4   s      r"   r6   zItest_expected_transformation_shape.<locals>.TransformationStorer.__init__é  sq   € ô ;Ó<ˆDŒMÜ$&§F¡FˆD�M‰MÔ!Ü% d§m¡m°Q¸ÈaÔP‰IˆDŒF�AÜ“×,Ñ,¨QÓ/ˆAØ#$¢Q¬¯
©
 ]Ñ#3°q¼¿¹ÂQ¸Ñ7GÑ#GˆDÕ r$   c                 ó   — || _         y)zWStores the last value of the transformation taken as input by
            the optimizerN)r9   )r5   r9   r:   s      r"   r<   zItest_expected_transformation_shape.<locals>.TransformationStorer.callbackò  s   € ð #1ˆDÕr$   Nr=   rA   r$   r"   ÚTransformationStorerrÜ   è  s   „ ò	Hó	1r$   rß   r&   )r–   r<   r   r   N)r¦   r§   r<   r   r   r9   Úsizer\   )r   r   rß   Útransformation_storerÚcbr    s         r"   Ú"test_expected_transformation_shaperã   ã  so   € ä€AÜ€A÷1ñ 1ñ 1°°AÓ6ÐØ	×	'Ñ	'€BÜ
(°!¸bÔ
A€CØ‡G�GˆAˆq„MØ ×/Ñ/×4Ñ4¸¿¹À¹
Àa¹ÒGÐGÑGr$   c                  ó&  — t        dd¬«      } | j                  j                  }dj                  |«      }t	        j
                  t        t        j                  |«      ¬«      5  | j                  t        t        «       d d d «       y # 1 sw Y   y xY w)Nr   r   )r–   rµ   z[{}] NCA did not convergerj   )r   Ú	__class__r>   r½   r^   Úwarnsr
   rw   rx   r   r¦   r§   )r    Úcls_namerz   s      r"   Útest_convergence_warningrè   þ  sg   € Ü
(°!¸QÔ
?€CØ�}‰}×%Ñ%€HØ
%×
,Ñ
,¨XÓ
6€CÜ	�‰Ô(´·	±	¸#³Ô	?ñ (Ø�‰”	œ;Ô'÷(÷ (ñ (ús   Á#BÂBzparam, valuer   r–   éd   ÚtolrZ   c                 óZ   — t        di | |i¤Ž}t        }t        }|j                  ||«       y )NrA   )r   r¦   r§   r   )ÚparamÚvaluer    r   r   s        r"   Útest_parameters_valid_typesrî     s,   € ô )Ñ
:¨E°5¨>Ñ
:€Cä€AÜ€Aà‡G�GˆAˆq…Mr$   r   c                 ór  — t         }t        }t        | ¬«      j                  ||«      }|j	                  «       }|j
                  j                  j                  «       }| �| }n|j                  d   }t        j                  t        |«      D �cg c]  }|› |› �‘Œ
 c}t        ¬«      }t        ||«       yc c}w )z¤Check `get_feature_names_out` for `NeighborhoodComponentsAnalysis`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28293
    rq   Nr   )Údtype)r¦   r§   r   r   Úget_feature_names_outrå   r>   Úlowerr\   r   r   r˜   Úobjectr   )	r   r   r   ÚestÚ	names_outÚclass_name_lowerÚexpected_n_featuresÚiÚexpected_names_outs	            r"   Útest_nca_feature_names_outrú     sª   € ô 	€AÜ€Aä
(°lÔ
C×
GÑ
GÈÈ1Ó
M€CØ×)Ñ)Ó+€Ià—}‘}×-Ñ-×3Ñ3Ó5ÐàÐØ*ÑàŸg™g a™jÐäŸ™Ü+0Ð1DÓ+EÖF aÐÐ˜a˜SÒ	!ÒFÜôÐô
 �yÐ"4Õ5ùò	 	Gs   ÂB4)BÚ__doc__rw   Únumpyr   r^   Únumpy.testingr   r   Úscipy.optimizer   Úsklearnr   Úsklearn.datasetsr   r   r	   Úsklearn.exceptionsr
   Úsklearn.metricsr   Úsklearn.neighborsr   Úsklearn.preprocessingr   Úsklearn.utilsr   Úsklearn.utils.validationr   rK   ÚirisÚpermutationÚtargetrà   ÚpermÚdatar¦   r§   ÚflagsÚ	writeableÚfinfoÚfloatÚepsÚEPSr#   rO   rb   r{   r   rƒ   r‘   ÚmarkÚparametrizerž   r¤   r±   rÆ   rÈ   rÑ   rÓ   rÙ   rã   rè   Úint32Úfloat32rî   rú   rA   r$   r"   ú<module>r     s$  ðñó 
ã Û ß GÝ %å ß GÑ GÝ 1Ý .Ý <Ý .Ý ,Ý 2á˜Ó€áƒ{€Ø
‡��t—{‘{×'Ñ'Ó(€Ø�I‰I�d‰O€	Ø�k‰k˜$Ñ€à!€	‡�Ô Ø#€× Ñ Ô Ø€b‡h�hˆuƒo×Ñ€òXò$'-òT0ò21ò2Bò* òF=ð@ ‡�×Ñ˜¢mÓ4Ø‡�×Ñ˜¢}Ó5Ø‡�×Ñ˜¢jÓ1Ø‡�×Ñ˜ªÓ7ñNó 8ó 2ó 6ó 5ðNò>$ò<ð@ ‡�×ÑØÒDóñ)óð)òXò!,òH,òDò"Hò6(ð ‡�×ÑØà	˜˜Ÿ™ !›Ð%Ø	�X�R—X‘X˜c“]Ð#Ø	�
�—
‘
˜6Ó"Ð#ðóñóðð ‡�×Ñ˜¨$°¨Ó3ñ6ó 4ñ6r$   