§
    rŠtj2L  ã            	       óZ  — 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                     ej        j         ¦  «        Z!ej"        e!         Z#ej        e!         Z$de#j%        _&        de$j%        _&         ej'        e(¦  «        j)        Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1ej2         3                    dg d¢¦  «        ej2         3                    dg d¢¦  «        ej2         3                    dg d¢¦  «        ej2         3                    dg d¢¦  «        d„ ¦   «         ¦   «         ¦   «         ¦   «         Z4d„ Z5d„ Z6ej2         3                    dg d¢¦  «        d „ ¦   «         Z7d!„ Z8d"„ Z9d#„ Z:d$„ Z;d%„ Z<d&„ Z=ej2         3                    d'd ej>        d(¦  «        fd) ej>        d*¦  «        fd+ ej?        d,¦  «        fg¦  «        d-„ ¦   «         Z@ej2         3                    ddd.g¦  «        d/„ ¦   «         ZAdS )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          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/html/CA-Chatbot/venv/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                 ób  — t           j        | _        t          ¦   «         | _        t           j        | j        _        t          | 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_r   r   r   Úfit_transformÚnewaxisÚsame_class_mask©Úselfr   r   s      r"   Ú__init__z=test_toy_example_collapse_points.<locals>.LossStorer.__init__H   sŠ   € ÝœˆDŒIå:Ñ<Ô<ˆDŒMÝ$&¤FˆDŒMÔ!Ý% d¤m°Q¸ÈaÐPÑ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.callbackQ   s1   € àœ=×9Ò9Ø ¤¨Ô(<¸dñô ‰LˆDŒI�q�q�qr$   N©Ú__name__Ú
__module__Ú__qualname__r6   r<   © r$   r"   Ú
LossStorerr)   G   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   6   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>.funn   ó    ø€ Ø×#Ò# A q¨$Ñ/Ô/°Ô2Ð2r$   c                 ó>   •— ‰                      | ‰‰¦  «        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Ô
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{   y   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±   K  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Æ   k  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ØKØˆ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¦   Úcopyr§   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                 ó@  — t          ¦   «         | _        t          j        | j        _        t          | j        ||d¬¦  «        \  | _        }t          ¦   «                              |¦  «        }|d d …t          j	        f         |t          j	        d d …f         k    | _
        d S r+   )r   r/   r   r-   r0   r   r   r   r1   r2   r3   r4   s      r"   r6   zItest_expected_transformation_shape.<locals>.TransformationStorer.__init__é  sƒ   € õ ;Ñ<Ô<ˆDŒMÝ$&¤FˆDŒMÔ!Ý% d¤m°Q¸ÈaÐPÑ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$   )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Ð GÐ GÐ GÐ GÐ GØ %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø .Ð .Ð .Ð .Ð .Ð .Ø <Ð <Ð <Ð <Ð <Ð <Ø .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2àÐ˜ÑÔ€à€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$   