§
    ¨éUg£K  ã            	       ó  — 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  ed¦  «        Z e¦   «         Ze                     ej        j        ¦  «        Zej         e         Z!ej        e         Z" ej#        e$¦  «        j%        Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-ej.         /                    dg d¢¦  «        ej.         /                    dg d¢¦  «        ej.         /                    dg d¢¦  «        ej.         /                    dg d¢¦  «        d„ ¦   «         ¦   «         ¦   «         ¦   «         Z0d„ Z1d„ Z2ej.         /                    dg d¢¦  «        d„ ¦   «         Z3d„ Z4d „ Z5d!„ Z6d"„ Z7d#„ Z8d$„ Z9ej.         /                    d%d ej:        d&¦  «        fd' ej:        d(¦  «        fd) ej;        d*¦  «        fg¦  «        d+„ ¦   «         Z<ej.         /                    ddd,g¦  «        d-„ ¦   «         Z=dS ).zL
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_statec                  ó†  — t          j        ddgddgddgddgg¦  «        } t          j        g d¢¦  «        }t          ddd¬¦  «        }|                     | |¦  «         |                     | ¦  «        }t          t          |¦  «                             ¦   «         dd…df         t          j        g d	¢¦  «        ¦  «         dS )
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/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/neighbors/tests/test_nca.pyÚtest_simple_exampler"   !   sÄ   € õ 	Œ�1�a�&˜1˜a˜& 1 a &¨1¨a¨&Ð1Ñ2Ô2€AÝ
Œ���ÑÔ€AÝ
(Ø˜Z°bðñ ô €Cð ‡G‚GˆAˆq�M„M€MØ
�-Š-˜Ñ
Ô
€CÝÕ)¨#Ñ.Ô.×6Ò6Ñ8Ô8¸¸¸¸A¸Ô>ÅÄÈÈÈÑ@VÔ@VÑWÔWÐWÐWÐWó    c                  ó  — t           j                             d¦  «        } d}|                      d|¦  «        }t          j        ||                     d¬¦  «        t           j        dd…f         g¦  «        }g d¢} G d„ d	¦  «        } |||¦  «        }t          d|j        ¬
¦  «        }| 	                    ||¦  «        }t          |¦  «         t          ||d         z
  d¦  «         t          |j        dz   ¦  «        dk     sJ ‚dS )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dS )ú4test_toy_example_collapse_points.<locals>.LossStorerc                 ól  — t           j        | _        t          ¦   «         | _        t           j        | j        _        | j                             ||d¬¦  «        \  | _        }t          ¦   «          	                    |¦  «        }|d d …t           j
        f         |t           j
        d d …f         k    | _        d S ©Nr   )Úensure_min_samples)r   ÚinfÚlossr   Úfake_ncaÚn_iter_Ú_validate_datar   r   Úfit_transformÚnewaxisÚsame_class_mask©Úselfr   r   s      r!   Ú__init__z=test_toy_example_collapse_points.<locals>.LossStorer.__init__E   sŽ   € ÝœˆDŒIå:Ñ<Ô<ˆDŒMÝ$&¤FˆDŒMÔ!Øœ×4Ò4°Q¸ÈaÐ4ÑPÔP‰IˆDŒF�AÝ‘”×,Ò,¨QÑ/Ô/ˆAØ#$ Q Q Q­¬
 ]Ô#3°q½¼ÀQÀQÀQ¸Ô7GÒ#GˆDÔ Ð Ð r#   c                 ód   — | j                              || j        | j        d¦  «        \  | _        }dS )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.callbackN   s1   € àœ=×9Ò9Ø ¤¨Ô(<¸dñô ‰LˆDŒI�q�q�qr#   N©Ú__name__Ú
__module__Ú__qualname__r6   r<   © r#   r!   Ú
LossStorerr(   D   s5   € € € € € ð	Hð 	Hð 	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   3   s  € õ Œ)×
Ò
 Ñ
#Ô
#€CØ€IØ—’˜1˜iÑ(Ô(€JÝ
Œ	�:˜zŸš°A˜Ñ6Ô6µr´zÀ1À1À1°}ÔEÐFÑGÔG€AØˆ	ˆ	€Aðð ð ð ð ñ ô ð ð  �*˜Q Ñ"Ô"€KÝ
(°bÀ;ÔCWÐ
XÑ
XÔ
X€CØ
×
Ò
˜A˜qÑ
!Ô
!€CÝ	ˆ#�J„J€Jå˜c C¨¤F™l¨CÑ0Ô0Ð0Ýˆ{Ô !Ñ#Ñ$Ô$ uÒ,Ð,Ð,Ð,Ð,Ð,r#   c                 ó  ‡‡‡	— t           j                             | ¦  «        }t          | ¬¦  «        \  Š}|                     |                     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          |||                     ¦   «         ¦  «        }|t          j        dd¬	¦  «        k    sJ ‚dS )
z~Test gradient of loss function

    Assert that the gradient is almost equal to its finite differences
    approximation.
    )r   r   r   Nc                 ó>   •— ‰                      | ‰‰¦  «        d         S )Nr   ©r8   ©ÚMr   Úmaskr   s    €€€r!   Úfunz$test_finite_differences.<locals>.funk   ó    ø€ Ø×#Ò# A q¨$Ñ/Ô/°Ô2Ð2r#   c                 ó>   •— ‰                      | ‰‰¦  «        d         S )Nr   rR   rS   s    €€€r!   Úgradz%test_finite_differences.<locals>.gradn   rW   r#   rC   ç-Cëâ6?)rJ   )r   rD   rE   r	   rF   ÚrandintÚshaper   r/   r2   r   ÚravelÚpytestÚapprox)
Úglobal_random_seedrK   r   rT   rV   rY   Údiffr   rU   r   s
          @@@r!   Útest_finite_differencesrb   ]   s$  øøø€ õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CÝÐ,>Ð?Ñ?Ô?�D€A€qØ�	Š	�#—+’+˜a ¤¨¤¨a¡Ñ0Ô0°!´'¸!´*Ñ=Ô=€AÝ
(Ñ
*Ô
*€CØ€C„KØˆQˆQˆQ•”
ˆ]Ô˜q¥¤¨Q¨Q¨Q Ô/Ò/€Dð3ð 3ð 3ð 3ð 3ð 3ð 3ð3ð 3ð 3ð 3ð 3ð 3ð 3õ �c˜4 §¢¡¤Ñ+Ô+€DØ•6”= ¨$Ð/Ñ/Ô/Ò/Ð/Ð/Ð/Ð/Ð/r#   c                  óÖ  — t          j        d¦  «                             dd¦  «        } g d¢}t          }t           j                             d¦  «        }|                     dd¦  «        }d|j        d         › d	|j        d
         › d�}t          j	        t          t          j        |¦  «        ¬¦  «        5   ||¬¦  «                             | |¦  «         d d d ¦  «         n# 1 swxY w Y   d}d|› d| j        d
         › d�}t          j	        t          t          j        |¦  «        ¬¦  «        5   ||¬¦  «                             | |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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{   v   sû  € å
Œ	�"‰Œ×Ò˜a Ñ#Ô#€AØˆˆ€AÝ
(€CÝ
Œ)×
Ò
 Ñ
#Ô
#€Cà�8Š8�A�q‰>Œ>€Dð	D d¤j°¤mð 	Dð 	Dà26´*¸Q´-ð	Dð 	Dð 	Dð õ
 
Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð !ð !Øˆ�ˆ‰Œ×Ò˜1˜aÑ Ô Ð ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !à€Lð	>Ø'ð	>ð 	>à/0¬w°q¬zð	>ð 	>ð 	>ð õ
 
Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð 1ð 1Øˆ˜Ð&Ñ&Ô&×*Ò*¨1¨aÑ0Ô0Ð0ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1s$   Â5!C"Ã"C&Ã)C&Ä0!EÅE"Å%E"c                  ó¸  — t          j        d¦  «                             dd¦  «        } g d¢}t          j        ddgddgg¦  «        }t	          j        t          ¦  «        5  t          |¬¦  «                             | |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        ddgddgdd	gg¦  «        }t	          j        t          ¦  «        5  t          |¬¦  «                             | |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        d
¦  «                             dd¦  «        }t          |¬¦  «                             | |¦  «         d S )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  1˜v¨¨1 vÐ.Ñ/Ô/€NÝ	Œ•zÑ	"Ô	"ð Fð FÝ&¨NÐ;Ñ;Ô;×?Ò?ÀÀ1ÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fõ
 ”X  1˜v¨¨1 v°°1¨vÐ6Ñ7Ô7€Nå	Œ•zÑ	"Ô	"ð Fð FÝ&¨NÐ;Ñ;Ô;×?Ò?ÀÀ1ÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fõ ”Y˜q‘\”\×)Ò)¨!¨QÑ/Ô/€NÝ"¨Ð7Ñ7Ô7×;Ò;¸A¸qÑAÔAÐAÐAÐAs$   Á %BÂBÂBÃ%DÄDÄ
Dc                  ól  — t           j                             d¦  «        } t          j        d¦  «                             dd¦  «        }g d¢}|                      |j        d         dz
  d¦  «        }|j        d         }t          ||¬¦  «        }d|› d	|j        d
         › d�}t          j	        t          t          j        |¦  «        ¬¦  «        5  |                     ||¦  «         d d d ¦  «         n# 1 swxY w Y   |j        d         dz   }t          ||¬¦  «        }d|› d|j        d         › d�}t          j	        t          t          j        |¦  «        ¬¦  «        5  |                     ||¦  «         d d d ¦  «         n# 1 swxY w Y   t          dd¬¦  «        }|                     ||¦  «         d S )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ƒ   ¤   s/  € Ý
Œ)×
Ò
 Ñ
#Ô
#€CÝ
Œ	�"‰Œ×Ò˜a Ñ#Ô#€AØˆˆ€Aà�8Š8�A”G˜A”J ‘N AÑ&Ô&€Dð ”7˜1”:€LÝ
(¨dÀÐ
NÑ
NÔ
N€Cð	%Ø'ð	%ð 	%ð ”:˜a”=ð	%ð 	%ð 	%ð õ 
Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð ð Ø�Š��1‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ”7˜1”: ‘>€LÝ
(¨dÀÐ
NÑ
NÔ
N€Cð	9Ø'ð	9ð 	9à*+¬'°!¬*ð	9ð 	9ð 	9ð õ
 
Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð ð Ø�Š��1‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ )°a¸jÐ
IÑ
IÔ
I€CØ‡G‚GˆAˆq�M„M€M€M€Ms$   ÃC2Ã2C6Ã9C6ÅFÆFÆ	Fc                  óî  — t           j                             d¦  «        } t          dddd¬¦  «        \  }}t	          d¬¦  «        }|                     ||¦  «         t	          d	¬¦  «        }|                     ||¦  «         t	          d
¬¦  «        }|                     ||¦  «         t	          d¬¦  «        }|                     ||¦  «         t	          d¬¦  «        }|                     ||¦  «         |                      |j        d         |j        d         ¦  «        }t	          |¬¦  «        }|                     ||¦  «         |                      |j        d         |j        d         dz   ¦  «        }t	          |¬¦  «        }d|j        d         › d|j        d         › d�}	t          j	        t          t          j        |	¦  «        ¬¦  «        5  |                     ||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |j        d         dz   |j        d         ¦  «        }t	          |¬¦  «        }d|j        d         › d|j        d         › d�}	t          j	        t          t          j        |	¦  «        ¬¦  «        5  |                     ||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |j        d         |j        d         ¦  «        }|j        d         dz
  }
t	          ||
¬¦  «        }d|
› d|j        d         › d�}	t          j	        t          t          j        |	¦  «        ¬¦  «        5  |                     ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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ÑLÔL�D€A€qõ )¨jÐ
9Ñ
9Ô
9€CØ‡G‚GˆAˆq�M„M€Mõ 0°XÐ>Ñ>Ô>€JØ‡N‚N�1�aÑÔÐõ .°6Ð:Ñ:Ô:€HØ‡L‚L��AÑÔÐõ -°%Ð8Ñ8Ô8€GØ‡K‚K��1ÑÔÐõ -°%Ð8Ñ8Ô8€GØ‡K‚K��1ÑÔÐà�8Š8�A”G˜A”J ¤¨¤
Ñ+Ô+€DÝ
(¨dÐ
3Ñ
3Ô
3€CØ‡G‚GˆAˆq�M„M€Mð �8Š8�A”G˜A”J ¤¨¤
¨Q¡Ñ/Ô/€DÝ
(¨dÐ
3Ñ
3Ô
3€Cð	B T¤Z°¤]ð 	Bð 	Bà34´7¸1´:ð	Bð 	Bð 	Bð õ
 
Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð ð Ø�Š��1‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð �8Š8�A”G˜A”J ‘N A¤G¨A¤JÑ/Ô/€DÝ
(¨dÐ
3Ñ
3Ô
3€Cð	D d¤j°¤mð 	Dð 	Dà26´*¸Q´-ð	Dð 	Dð 	Dð õ
 
Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð ð Ø�Š��1‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð �8Š8�A”G˜A”J ¤¨¤
Ñ+Ô+€DØ”7˜1”: ‘>€LÝ
(¨dÀÐ
NÑ
NÔ
N€Cð	;Ø+7ð	;ð 	;ð *.¬°A¬ð	;ð 	;ð 	;ð õ 
Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð ð Ø�Š��1‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s6   ÇG4Ç4G8Ç;G8Ê
J-Ê-J1Ê4J1ÍM*Í*M.Í1M.r‡   )r   r%   é   é   r‰   Ú	n_classes)r%   r’   r“   r   c                 óì  — t           j                             d¦  «        }t          d|d|¬¦  «        }|| k    rd S |                     | |¦  «        }t          j        t          |¦  «        | |z  dz   ¦  «        d | …         }||k    rd S t          |¦  «        }|                     ||¦  «         |t          |dz
  |¦  «        k    r$t          |¦  «         
                    d¬¦  «        }	n[|t          || ¦  «        k     r$t          |¦  «         
                    d¬¦  «        }	n#t          |¦  «         
                    d¬¦  «        }	|	                     ||¦  «         t          |j        |	j        ¦  «         d S )	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ž     sl  € õ Œ)×
Ò
 Ñ
#Ô
#€CÝ-Ø ,¸Èðñ ô €Hð �IÒÐØˆð �IŠI�i Ñ,Ô,ˆÝŒG•E˜)Ñ$Ô$ i°9Ñ&<¸qÑ&@ÑAÔAÀ*À9À*ÔMˆØ˜*Ò$Ð$ð ˆDå˜‘/”/ˆCØ�GŠG�A�q‰MŒMˆMØ�s 9¨q¡=°*Ñ=Ô=Ò=Ð=Ý! (™OœO×6Ò6¸EÐ6ÑBÔB�	�	Ø¥ J°	Ñ :Ô :Ò:Ð:Ý! (™OœO×6Ò6¸EÐ6ÑBÔB�	�	å! (™OœO×6Ò6¸JÐ6ÑGÔG�	Ø�MŠM˜!˜QÑÔÐÝ% c¤o°yÔ7LÑMÔMÐMÐMÐMr#   c                  ó´  — t          dddddd¬¦  «        \  } }t          dd¬¦  «        }|                     | |¦  «         t          dddddd¬¦  «        \  }}d|j        d	         › d
|j        j        d	         › d�}t          j        t          t          j	        |¦  «        ¬¦  «        5  |                     ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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¤   *  sM  € ÝØØØØØØðñ ô �D€A€qõ )°DÀ1Ð
EÑ
EÔ
E€CØ‡G‚GˆAˆq�M„M€Må,ØØØØØØðñ ô Ñ€O�Qð	8¨/Ô*?ÀÔ*Bð 	8ð 	8àœ?Ô0°Ô3ð	8ð 	8ð 	8ð õ
 
Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð $ð $Ø�Š� Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   Â)CÃCÃCc                  ó‚  — t          dd¬¦  «        } |                      t          t          ¦  «         | j        }d| _        |                      t          t          ¦  «         | j        }t          dd¬¦  «        }|                     t          t          ¦  «         |j        }d|_        |                     t          t          ¦  «         |j        }t          j        t          j        ||z
  ¦  «        ¦  «        }t          j        t          j        ||z
  ¦  «        ¦  «        }|dk     s
J d¦   «         ‚||k    s
J d¦   «         ‚d S )	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±   H  s+  € õ .¸ÈAÐNÑNÔN€HØ‡L‚L•�KÑ(Ô(Ð(Ø"Ô.ÐØ€HÔØ‡L‚L•�KÑ(Ô(Ð(Ø#+Ô#7Ð å-¸ÈQÐOÑOÔO€HØ‡L‚L•�KÑ(Ô(Ð(Ø"Ô.ÐØ€HÔØ‡L‚L•�KÑ(Ô(Ð(Ø#+Ô#7Ð å”•r”vÐ:Ð=PÑPÑQÔQÑRÔR€IÝ”•r”vÐ:Ð=PÑPÑQÔQÑRÔR€IØ�sŠ?ˆ?ˆ?ð	5ñ Œ?ˆ?ð
 �yÒ Ð Ð ð	+ñ !Ô Ð Ð Ð r#   Ú	init_name)r‹   rŒ   r   rD   Úprecomputedc                 óˆ  — t           j                             d¦  «        }t          dddd¬¦  «        \  }}d}d|z   d	|z   d
œ}| dk    r-|                     |j        d         |j        d         ¦  «        }n| }t          d|¬¦  «        }|                     ||¦  «         |                     ¦   «         \  }	}
t          j
        d|	¦  «        }| d
v r-t          j        ||          |d         ¦  «        sJ ‚|dd …         }|d         dk    sJ ‚d                     ddd¦  «        }|d         d                     |¦  «        k    sJ ‚|d         d                     dt          |¦  «        z  ¦  «        k    sJ ‚|dd…         D ]}t          j        d|¦  «        sJ ‚Œt          j        d|d         ¦  «        sJ ‚|d         dk    sJ ‚d S )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Æ   h  s  € õ Œ)×
Ò
 Ñ
#Ô
#€CÝ ¨A¸!È!ÐLÑLÔL�D€A€qØ/€Kà-°Ñ;Ø7¸+ÑEðð €Dð �MÒ!Ð!Ø�yŠy˜œ œ Q¤W¨Q¤ZÑ0Ô0ˆˆàˆÝ
(°¸Ð
>Ñ
>Ô
>€CØ‡G‚GˆAˆq�M„M€MØ×ÒÑ Ô �F€Cˆõ ŒH�U˜CÑ Ô €Eð �NÐ"Ð"ÝŒx˜˜Yœ¨¨q¬Ñ2Ô2Ð2Ð2Ð2Ø�a�b�b”	ˆØ�Œ8Ð9Ò9Ð9Ð9Ð9Ø#×*Ò*¨;Ð8IÈ9ÑUÔU€FØ�Œ8Ð<×CÒCÀFÑKÔKÒKÐKÐKÐKØ�Œ8Ð<×CÒCÀCÍ#ÈfÉ+Ì+ÑDUÑVÔVÒVÐVÐVÐVØ�a˜�d”ð 
ð 
ˆõ Œxð%àñ
ô 
ð 	
ð 	
ð 	
ð 	
õ
 Œ8ØOØˆbŒ	ñô ð ð ð ð �Œ9˜Š?ˆ?ˆ?ˆ?ˆ?ˆ?r#   c                 ó    — t          ¦   «         }|                     t          t          ¦  «         |                      ¦   «         \  }}|dk    sJ ‚d S )Nrº   )r   r   r¦   r§   r»   )r¿   r   rÂ   r;   s       r!   Útest_no_verboserÈ   —  sG   € å
(Ñ
*Ô
*€CØ‡G‚G�I•{Ñ#Ô#Ð#Ø×ÒÑ Ô �F€Cˆà�"Š9ˆ9ˆ9ˆ9ˆ9ˆ9r#   c                  ó^  — t           } t          }d}t          j        ||k    ¦  «        \  }d||<   |||d         <   t	          d¬¦  «        }|                     | |¦  «         t          j        |dk    ¦  «        \  }t          j        |dk    ¦  «        \  }d||<   d||d         <   d||<   d||d         <   t	          d¬¦  «        }|                     | |¦  «         t          j        |dk    ¦  «        \  }t          j        |dk    ¦  «        \  }t          j        |dk    ¦  «        \  }| |d         |d         |d         g         } ||d         |d         |d         g         }t	          dd¬¦  «        }|                     | |¦  «         t          | |                     | ¦  «        ¦  «         d S )Nr   r   r   r…   )r–   r   )r   r–   )r¦   r§   r   Úwherer   r   r   r   )r   r   Úsingleton_classÚind_singletonr   Úind_1Úind_2Úind_0s           r!   Útest_singleton_classrÐ      s�  € Ý€AÝ€Að €OÝ”x  _Ò 4Ñ5Ô5Ñ€]Ø€A€mÑØ)€A€m�AÔÑå
(°"Ð
5Ñ
5Ô
5€CØ‡G‚GˆAˆq�M„M€Mõ Œx˜˜QšÑÔ�H€UÝŒx˜˜QšÑÔ�H€UØ€A€e�HØ€A€eˆA„h�KØ€A€e�HØ€A€eˆA„h�Kå
(°"Ð
5Ñ
5Ô
5€CØ‡G‚GˆAˆq�M„M€Mõ Œx˜˜QšÑÔ�H€UÝŒx˜˜QšÑÔ�H€UÝŒ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Ñ
FÔ
F€CØ‡G‚GˆAˆq�M„M€MÝ�q˜#Ÿ-š-¨Ñ*Ô*Ñ+Ô+Ð+Ð+Ð+r#   c                  ó
  — t           t          dk             } t          t          dk             }t          d| j        d         d¬¦  «        }|                     | |¦  «         t          | |                     | ¦  «        ¦  «         d S )Nr   r…   r   r   )r–   r   r   )r¦   r§   r   r\   r   r   r   )r   r   r   s      r!   Útest_one_classrÒ   Ä  sv   € Ý•+ Ò"Ô#€AÝ•K 1Ò$Ô%€Aå
(Ø !¤'¨!¤*°:ðñ ô €Cð ‡G‚GˆAˆq�M„M€MÝ�q˜#Ÿ-š-¨Ñ*Ô*Ñ+Ô+Ð+Ð+Ð+r#   c                 óà   ‡— dŠˆfd„}t          ‰|d¬¦  «        }|                     t          t          ¦  «         |                      ¦   «         \  }}d                     ‰dz
  ¦  «        |v sJ ‚d S )Nrm   c                 ó˜   •— | j         t          j         d         dz  fk    sJ ‚‰|z
  }t          d                     |¦  «        ¦  «         d S )Nr   r   ú{} iterations remaining...)r\   r¦   rI   r½   )r9   r:   Úrem_iterr–   s      €r!   Úmy_cbztest_callback.<locals>.my_cbÒ  sS   ø€ ØÔ#­	¬¸Ô(:¸aÑ(?Ð'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Ñ
VÔ
V€CØ‡G‚G�I•{Ñ#Ô#Ð#Ø×ÒÑ Ô �F€Cˆð (×.Ò.¨x¸!©|Ñ<Ô<ÀÐCÐCÐCÐCÐCÐCr#   c                  óð   — t           } t          } G d„ d¦  «        } || |¦  «        }|j        }t          d|¬¦  «        }|                     | |¦  «         |j        j        | j        d         dz  k    sJ ‚dS )z4Test that the transformation has the expected shape.c                   ó   — e Zd Zd„ Zd„ ZdS )ú@test_expected_transformation_shape.<locals>.TransformationStorerc                 óJ  — t          ¦   «         | _        t          j        | j        _        | j                             ||d¬¦  «        \  | _        }t          ¦   «                              |¦  «        }|d d …t          j	        f         |t          j	        d d …f         k    | _
        d S r*   )r   r.   r   r,   r/   r0   r   r   r1   r2   r3   r4   s      r!   r6   zItest_expected_transformation_shape.<locals>.TransformationStorer.__init__æ  s‡   € õ ;Ñ<Ô<ˆDŒMÝ$&¤FˆDŒMÔ!Øœ×4Ò4°Q¸ÈaÐ4ÑPÔP‰IˆDŒF�AÝ‘”×,Ò,¨QÑ/Ô/ˆAØ#$ Q Q Q­¬
 ]Ô#3°q½¼ÀQÀQÀQ¸Ô7GÒ#GˆDÔ Ð Ð r#   c                 ó   — || _         dS )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Û   å  s5   € € € € € ð	Hð 	Hð 	Hð	1ð 	1ð 	1ð 	1ð 	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â   à  s›   € å€AÝ€Að1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð 1Ð0°°AÑ6Ô6ÐØ	Ô	'€BÝ
(°!¸bÐ
AÑ
AÔ
A€CØ‡G‚GˆAˆq�M„M€MØ Ô/Ô4¸¼À¼
Àa¹ÒGÐGÐGÐGÐGÐGr#   c                  ó6  — t          dd¬¦  «        } | j        j        }d                     |¦  «        }t	          j        t          t          j        |¦  «        ¬¦  «        5  |  	                    t          t          ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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ç   û  sÇ   € Ý
(°!¸QÐ
?Ñ
?Ô
?€CØŒ}Ô%€HØ
%×
,Ò
,¨XÑ
6Ô
6€CÝ	ŒÕ(µ´	¸#±´Ð	?Ñ	?Ô	?ð (ð (Ø�Š•	�;Ñ'Ô'Ð'ð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð (ð (s   Á !BÂBÂBzparam, valuer   r–   éd   ÚtolrZ   c                 ój   — t          di | |i¤Ž}t          }t          }|                     ||¦  «         d S )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�M„M€M€M€Mr#   r   c                 ó|  ‡— t           }t          }t          | ¬¦  «                             ||¦  «        }|                     ¦   «         }|j        j                             ¦   «         Š| �| }n|j        d         }t          j
        ˆfd„t          |¦  «        D ¦   «         t          ¬¦  «        }t          ||¦  «         dS )z¤Check `get_feature_names_out` for `NeighborhoodComponentsAnalysis`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28293
    rq   Nr   c                 ó   •— g | ]}‰› |› �‘Œ	S rA   rA   )Ú.0ÚiÚclass_name_lowers     €r!   ú
<listcomp>z.test_nca_feature_names_out.<locals>.<listcomp>,  s%   ø€ ÐFÐFÐF aÐÐ	!˜aÐ	!Ð	!ÐFÐFÐFr#   )Údtype)r¦   r§   r   r   Úget_feature_names_outrä   r>   Úlowerr\   r   r   r˜   Úobjectr   )r   r   r   ÚestÚ	names_outÚexpected_n_featuresÚexpected_names_outrò   s          @r!   Útest_nca_feature_names_outrü     sÅ   ø€ õ 	€AÝ€Aå
(°lÐ
CÑ
CÔ
C×
GÒ
GÈÈ1Ñ
MÔ
M€CØ×)Ò)Ñ+Ô+€Ià”}Ô-×3Ò3Ñ5Ô5ÐàÐØ*ÐÐàœg aœjÐåœØFÐFÐFÐF­5Ð1DÑ+EÔ+EÐFÑFÔFÝðñ ô Ðõ
 �yÐ"4Ñ5Ô5Ð5Ð5Ð5r#   )>Ú__doc__rw   Únumpyr   r^   Únumpy.testingr   r   Úscipy.optimizer   Úsklearnr   Úsklearn.datasetsr   r   r	   Úsklearn.exceptionsr
   Úsklearn.metricsr   Úsklearn.neighborsr   Úsklearn.preprocessingr   Úsklearn.utilsr   rK   ÚirisÚpermutationÚtargetrß   ÚpermÚdatar¦   r§   Ú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Ð GÐ GÐ GÐ GÐ GØ %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø .Ð .Ð .Ð .Ð .Ð .Ø <Ð <Ð <Ð <Ð <Ð <Ø .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,àÐ˜ÑÔ€à€y�{„{€Ø
‡‚�t”{Ô'Ñ(Ô(€ØŒI�dŒO€	ØŒk˜$Ô€Ø€b„hˆu�o„oÔ€ðXð Xð Xð$'-ð '-ð '-ðT0ð 0ð 0ð21ð 1ð 1ð2Bð Bð Bð* ð  ð  ðF=ð =ð =ð@ „×Ò˜ m m mÑ4Ô4Ø„×Ò˜ } } }Ñ5Ô5Ø„×Ò˜ j j jÑ1Ô1Ø„×Ò˜¨¨¨Ñ7Ô7ðNð Nñ 8Ô7ñ 2Ô1ñ 6Ô5ñ 5Ô4ðNð>$ð $ð $ð<ð ð ð@ „×ÒØÐDÐDÐDñô ð)ð )ñô ð)ðXð ð ð!,ð !,ð !,ðH,ð ,ð ,ðDð Dð Dð"Hð Hð Hð6(ð (ð (ð „×ÒØà	˜˜œ !™œÐ%Ø	�X�R”X˜c‘]”]Ð#Ø	�
�”
˜6Ñ"Ô"Ð#ðñô ðð ñô ðð „×Ò˜¨$°¨Ñ3Ô3ð6ð 6ñ 4Ô3ð6ð 6ð 6r#   