§
    qŠtjž!  ã                   ó  — d 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 ddlmZmZ ddlmZmZ dd	lmZ d
„ Zd„ Zd„ Zd„ Zej                             de¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%dS )z+
Tests for the birch clustering algorithm.
é    N)ÚAgglomerativeClusteringÚBirch)Úgenerate_clustered_data)Ú
make_blobs)ÚConvergenceWarning)Úpairwise_distances_argminÚv_measure_score)Úassert_allcloseÚassert_array_equal)ÚCSR_CONTAINERSc                 óŠ  — t          d| ¬¦  «        \  }}|                     |d¬¦  «        }t          ¦   «         }|                     |¦  «         t	          d„ |j        j        D ¦   «         ¦  «        }t	          d„ |                     ¦   «         D ¦   «         ¦  «        }||j        d         k    sJ ‚||j        d         k    sJ ‚d S )Né
   ©Ú	n_samplesÚrandom_stateF©Úcopyc                 ó   — g | ]	}|j         ‘Œ
S © )Ú
n_samples_)Ú.0Úscs     ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_birch.pyú
<listcomp>z/test_n_samples_leaves_roots.<locals>.<listcomp>   s   € ÐIÐIÐI¨B˜"œ-ÐIÐIÐIó    c                 ó0   — g | ]}|j         D ]	}|j        ‘Œ
ŒS r   )Úsubclusters_r   )r   Úleafr   s      r   r   z/test_n_samples_leaves_roots.<locals>.<listcomp>   s*   € ÐQÐQÐQ˜4¸tÔ?PÐQÐQ¸ˆŒÐQÐQÐQÐQr   r   )	r   Úastyper   ÚfitÚsumÚroot_r   Ú_get_leavesÚshape)Úglobal_random_seedÚglobal_dtypeÚXÚyÚbrcÚn_samples_rootÚn_samples_leavess          r   Útest_n_samples_leaves_rootsr,      sÈ   € å Ð1CÐDÑDÔD�D€A€qØ	�Š� EˆÑ*Ô*€AÝ
‰'Œ'€CØ‡G‚GˆA�J„J€JÝÐIÐI°#´)Ô2HÐIÑIÔIÑJÔJ€NÝØQÐQ 3§?¢?Ñ#4Ô#4ÐQÑQÔQñô Ðð ˜qœw qœzÒ)Ð)Ð)Ð)Ø˜QœW QœZÒ'Ð'Ð'Ð'Ð'Ð'r   c                 óø  — t          d| ¬¦  «        \  }}|                     |d¬¦  «        }t          d¬¦  «        }|                     |¦  «         t          d ¬¦  «        }|                     |d d…         ¦  «         |                     |dd …         ¦  «         t          |j        |j        ¦  «         |                     d¬¦  «         |                     d ¦  «         t          |j	        |j	        ¦  «         d S )Néd   r   Fr   é   ©Ú
n_clustersé2   )
r   r   r   r    Úpartial_fitr
   Úsubcluster_centers_Ú
set_paramsr   Úsubcluster_labels_)r%   r&   r'   r(   r)   Úbrc_partials         r   Útest_partial_fitr8      sô   € å Ð2DÐEÑEÔE�D€A€qØ	�Š� EˆÑ*Ô*€AÝ
˜1Ð
Ñ
Ô
€CØ‡G‚GˆA�J„J€JÝ 4Ð(Ñ(Ô(€KØ×Ò˜A˜c˜r˜cœFÑ#Ô#Ð#Ø×Ò˜A˜b˜c˜cœFÑ#Ô#Ð#Ý�KÔ3°SÔ5LÑMÔMÐMð ×Ò aÐÑ(Ô(Ð(Ø×Ò˜DÑ!Ô!Ð!Ý�{Ô5°sÔ7MÑNÔNÐNÐNÐNr   c                 óJ  — t           j                             | ¦  «        }t          ddd¬¦  «        }|                     |d¬¦  «        }t          j        d¦  «        }|                     |¦  «         ||d d …f         }t          dd¬	¦  «        }|                     |¦  «         |j	        j
        |k    sJ ‚t          |j        |                     |¦  «        ¦  «         |j	        }|j        t          ||¦  «                 }t!          t#          ||j        ¦  «        d¦  «         d S )
Nr/   r   )r1   Ú
n_featuresÚn_samples_per_clusterFr   é   é   g      ð?©r1   Ú	threshold)ÚnpÚrandomÚRandomStater   r   ÚarangeÚshuffler   r    r4   Údtyper   Úlabels_Úpredictr6   r   r
   r	   )	r%   r&   Úrngr'   Úshuffle_indicesÚ	X_shuffler)   Ú	centroidsÚnearest_centroids	            r   Útest_birch_predictrM   1   s  € å
Œ)×
Ò
Ð 2Ñ
3Ô
3€CÝ¨1¸ÐRTÐUÑUÔU€AØ	�Š� EˆÑ*Ô*€Aõ ”i ‘m”m€OØ‡K‚K�Ñ Ô Ð Ø�/ 1 1 1Ð$Ô%€IÝ
˜1¨Ð
,Ñ
,Ô
,€CØ‡G‚GˆIÑÔÐð Ô"Ô(¨LÒ8Ð8Ð8Ð8å�s”{ C§K¢K°	Ñ$:Ô$:Ñ;Ô;Ð;ØÔ'€IØÔ-Ý! )¨YÑ7Ô7ôÐõ •OÐ$4°c´kÑBÔBÀCÑHÔHÐHÐHÐHr   c                 ó´  — t          dd| ¬¦  «        \  }}|                     |d¬¦  «        }t          d¬¦  «        }|                     |¦  «         t	          |j        ¦  «        dk    sJ ‚t	          t          j        |j        ¦  «        ¦  «        dk    sJ ‚t          d¬¦  «        }t          |¬¦  «        }|                     |¦  «         t          |j        |j        ¦  «         t          |j        |j        ¦  «         t          d¬¦  «        }t          j        t          ¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nr.   r   ©r   Úcentersr   Fr   r0   g     ˆÃ@)r?   )r   r   r   r    Úlenr4   r@   ÚuniquerF   r   r   r6   ÚpytestÚwarnsr   )r%   r&   r'   r(   Úbrc1ÚgcÚbrc2Úbrc4s           r   Útest_n_clustersrY   I   s�  € å ¨RÐ>PÐQÑQÔQ�D€A€qØ	�Š� EˆÑ*Ô*€AÝ˜BÐÑÔ€DØ‡H‚HˆQ�K„K€KÝˆtÔ'Ñ(Ô(¨2Ò-Ð-Ð-Ð-Ý�rŒy˜œÑ&Ô&Ñ'Ô'¨2Ò-Ð-Ð-Ð-õ 
!¨BÐ	/Ñ	/Ô	/€BÝ˜BÐÑÔ€DØ‡H‚HˆQ�K„K€KÝ�tÔ.°Ô0GÑHÔHÐHÝ�t”| T¤\Ñ2Ô2Ð2õ ˜7Ð#Ñ#Ô#€DÝ	ŒÕ(Ñ	)Ô	)ð ð Ø�Š�‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Ä*EÅEÅEÚcsr_containerc                 ó”  — t          dd| ¬¦  «        \  }}|                     |d¬¦  «        }t          d¬¦  «        }|                     |¦  «          ||¦  «        }t          d¬¦  «        }|                     |¦  «         |j        j        |k    sJ ‚t          |j        |j        ¦  «         t          |j        |j        ¦  «         d S )Nr.   r   rO   Fr   r0   )	r   r   r   r    r4   rE   r   rF   r
   )r%   r&   rZ   r'   r(   r)   ÚcsrÚ
brc_sparses           r   Útest_sparse_Xr^   `   sÌ   € õ  ¨RÐ>PÐQÑQÔQ�D€A€qØ	�Š� EˆÑ*Ô*€AÝ
˜2Ð
Ñ
Ô
€CØ‡G‚GˆA�J„J€Jà
ˆ-˜Ñ
Ô
€CÝ "Ð%Ñ%Ô%€JØ‡N‚N�3ÑÔÐð Ô)Ô/°<Ò?Ð?Ð?Ð?å�s”{ JÔ$6Ñ7Ô7Ð7Ý�CÔ+¨ZÔ-KÑLÔLÐLÐLÐLr   c                  ó&  — t          d¬¦  «        \  } }t          d¬¦  «        }|                     | |¦  «         d}t          j        t
          |¬¦  «        5  |                     | d d …dgf         |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr.   )r   r/   r0   z3X has 1 features, but Birch is expecting 2 features)Úmatchr   )r   r   r3   rS   ÚraisesÚ
ValueError)r'   r(   r)   Úmsgs       r   Ú)test_partial_fit_second_call_error_checksrd   s   sÜ   € õ  Ð$Ñ$Ô$�D€A€qÝ
˜1Ð
Ñ
Ô
€CØ‡O‚O�A�qÑÔÐà
?€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð &ð &Ø�Š˜˜!˜!˜!˜a˜S˜&œ	 1Ñ%Ô%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &s   Á"BÂB
ÂB
c                 ó€   — | j         }|t          |¦  «        k    sJ ‚|D ]}|j        rt          |j        |¦  «         Œd S )N)r   rQ   Úchild_Úcheck_branching_factor)ÚnodeÚbranching_factorÚsubclustersÚclusters       r   rg   rg      s_   € ØÔ#€KØ�s ;Ñ/Ô/Ò/Ð/Ð/Ð/Øð Eð EˆØŒ>ð 	EÝ" 7¤>Ð3CÑDÔDÐDøðEð Er   c                 óN  — t          | ¬¦  «        \  }}|                     |d¬¦  «        }d}t          d |d¬¦  «        }|                     |¦  «         t	          |j        |¦  «         t          d|d¬¦  «        }|                     |¦  «         t	          |j        |¦  «         d S )N©r   Fr   é	   g{®Gáz„?)r1   ri   r?   r/   )r   r   r   r    rg   r"   )r%   r&   r'   r(   ri   r)   s         r   Útest_branching_factorro   ‡   s¨   € åÐ#5Ð6Ñ6Ô6�D€A€qØ	�Š� EˆÑ*Ô*€AØÐõ ˜4Ð2BÈdÐ
SÑ
SÔ
S€CØ‡G‚GˆA�J„J€JÝ˜3œ9Ð&6Ñ7Ô7Ð7Ý
˜1Ð/?È4Ð
PÑ
PÔ
P€CØ‡G‚GˆA�J„J€JÝ˜3œ9Ð&6Ñ7Ô7Ð7Ð7Ð7r   c                 ój   — | j         j        }|r$|j        }|D ]}||j        k    sJ ‚Œ|j        }|°"dS dS )z&Use the leaf linked list for traversalN)Údummy_leaf_Ú
next_leaf_r   Úradius)Úbirch_instancer?   Úcurrent_leafrj   r   s        r   Úcheck_thresholdrv   –   sh   € à!Ô-Ô8€LØ
ð /Ø"Ô/ˆØð 	*ð 	*ˆBØ ¤	Ò)Ð)Ð)Ð)Ð)Ø#Ô.ˆð	 ð /ð /ð /ð /ð /r   c                 ó6  — t          dd| ¬¦  «        \  }}|                     |d¬¦  «        }t          dd ¬¦  «        }|                     |¦  «         t	          |d¦  «         t          dd ¬¦  «        }|                     |¦  «         t	          |d¦  «         d S )	NéP   r=   rO   Fr   g      à?)r?   r1   g      @)r   r   r   r    rv   )r%   r&   r'   r(   r)   s        r   Útest_thresholdry       s˜   € å ¨AÐ<NÐOÑOÔO�D€A€qØ	�Š� EˆÑ*Ô*€AÝ
˜#¨$Ð
/Ñ
/Ô
/€CØ‡G‚GˆA�J„J€JÝ�C˜ÑÔÐå
˜#¨$Ð
/Ñ
/Ô
/€CØ‡G‚GˆA�J„J€JÝ�C˜ÑÔÐÐÐr   c                  óš   — t          d¬¦  «        \  } }t          j        d¦  «        }t          |¬¦  «                             | ¦  «         d S )Nr   rm   é   r0   )r   r@   Úint64r   r    )r'   Ú_r1   s      r   Útest_birch_n_clusters_long_intr~   ­   sJ   € õ  1Ð%Ñ%Ô%�D€A€qÝ”˜!‘”€JÝ	�ZÐ Ñ Ô ×$Ò$ QÑ'Ô'Ð'Ð'Ð'r   c                  ó  — t          ddd¬¦  «        \  } }t          d¬¦  «        }|                     | ¦  «         |j        j        d         }|                     ¦   «         }t          d„ t          |¦  «        D ¦   «         |¦  «         dS )z*Check `get_feature_names_out` for `Birch`.rx   r=   r   ©r   r:   r   r0   c                 ó   — g | ]}d |› �‘ŒS )Úbirchr   )r   Úis     r   r   z*test_feature_names_out.<locals>.<listcomp>½   s   € Ð?Ð?Ð?¨˜ ˜˜Ð?Ð?Ð?r   N)r   r   r    r4   r$   Úget_feature_names_outr   Úrange)r'   r}   r)   r1   Ú	names_outs        r   Útest_feature_names_outr‡   µ   s‡   € å ¨q¸qÐAÑAÔA�D€A€qÝ
˜1Ð
Ñ
Ô
€CØ‡G‚GˆA�J„J€JØÔ(Ô.¨qÔ1€Jà×)Ò)Ñ+Ô+€IÝÐ?Ð?­U°:Ñ->Ô->Ð?Ñ?Ô?ÀÑKÔKÐKÐKÐKr   c                 ó  — t          dd| ¬¦  «        \  }}t          dd¬¦  «        }|                     |¦  «        }|                     |                     t          j        ¦  «        ¦  «        }t          ||d¬¦  «         d S )Nrx   r=   r€   gš™™™™™ñ?r>   g�íµ ÷Æ°>)Úatol)r   r   Úfit_transformr   r@   Úfloat32r
   )r%   r'   r}   r)   ÚY_64ÚY_32s         r   Ú"test_transform_match_across_dtypesrŽ   À   s|   € Ý ¨qÐ?QÐRÑRÔR�D€A€qÝ
˜1¨Ð
,Ñ
,Ô
,€CØ×Ò˜QÑÔ€DØ×Ò˜QŸXšX¥b¤jÑ1Ô1Ñ2Ô2€Då�D˜$ TÐ*Ñ*Ô*Ð*Ð*Ð*r   c                 óÊ   — t          ddd¬¦  «        d                              | d¬¦  «        }t          d¬¦  «        }|                     |¦  «        j        j        | k    sJ ‚d S )Nrx   r=   r   r€   Fr   r0   )r   r   r   r    r4   rE   )r&   r'   r)   s      r   Útest_subcluster_dtyper�   É   so   € Ý˜R¨A¸AÐ>Ñ>Ô>¸qÔA×HÒHØ˜5ð 	Iñ 	ô 	€Aõ ˜1Ð
Ñ
Ô
€CØ�7Š7�1‰:Œ:Ô)Ô/°<Ò?Ð?Ð?Ð?Ð?Ð?r   c                  ó  — t          j        ddgddgddgddgd	d
gddgddgddgddgddgddgddgddgd	d
gddgd	d
gddgddgddgddgddggt           j        ¬¦  «        } t          ddd¬¦  «                             | ¦  «         dS )z‘Check that both subclusters are updated when a node a split, even when there are
    duplicated data points. Non-regression test for #23269.
    g@ÅÌ™HôÀg\sGÿËø¿gð%žý’þÀgóº44Tûú¿g}ThÅÜúÀg•ã\F€õ¿gzoÀ±Àg/ÊÇI¼wõ¿gY+ctEÀgBlúý¬Cõ¿gé˜óŒ}é
Àg´®Ñr 'þ¿g_î“£ ñÀg—uXø¿gšaþeR^Àg‹µ	AX7õ¿g²Ú.^Àg|ùS™A÷¿gkŸŽÇÀg^ñÔ#Îô¿g@€±cÈÆÀgãižÈ8Kû¿)rE   r{   gñhãˆµøä>N)ri   r?   r1   )r@   Úarrayr‹   r   r    )r'   s    r   Útest_both_subclusters_updatedr“   Ñ   sù   € õ
 	Œà˜Ð$Ø˜Ð$Ø˜Ð$Ø˜
Ð#Ø˜Ð$Ø˜Ð$Ø˜
Ð#Ø˜Ð$Ø˜
Ð#Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø�zÐ"Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø˜
Ð#Ø˜Ð$ð+	
õ. Œjð1	ñ 	ô 	€Aõ8 
˜1¨¸Ð>Ñ>Ô>×BÒBÀ1ÑEÔEÐEÐEÐEr   )&Ú__doc__Únumpyr@   rS   Úsklearn.clusterr   r   Úsklearn.cluster.tests.commonr   Úsklearn.datasetsr   Úsklearn.exceptionsr   Úsklearn.metricsr   r	   Úsklearn.utils._testingr
   r   Úsklearn.utils.fixesr   r,   r8   rM   rY   ÚmarkÚparametrizer^   rd   rg   ro   rv   ry   r~   r‡   rŽ   r�   r“   r   r   r   ú<module>rŸ      s×  ððð ð Ð Ð Ð Ø €€€à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø @Ð @Ð @Ð @Ð @Ð @Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ .Ð .Ð .Ð .Ð .Ð .ð(ð (ð (ðOð Oð Oð$Ið Ið Ið0ð ð ð. „×Ò˜¨.Ñ9Ô9ðMð Mñ :Ô9ðMð$	&ð 	&ð 	&ðEð Eð Eð8ð 8ð 8ð/ð /ð /ð
ð 
ð 
ð(ð (ð (ðLð Lð Lð+ð +ð +ð@ð @ð @ð!Fð !Fð !Fð !Fð !Fr   