o
    i`                     @   s  d dl Z d dlZd dlZd dlmZm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 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 ejd ZdZddgde ed  Z!ddgde ed  Z"ddgde ed  Z#ddgde ed  Z$ddgde ed  Z%ddgde ed  Z&e'e!e"e#e$e%e&fZ(ej)*dg ddgg dd gdddd d!dej+gdgdddd d!dej+gdggd"d# Z,ej)*dddd$d%dd&d&ej+gdgddd$d%d'dd&d&ej+g	d gddd$dej+gd gddd$ej+gdggd(d) Z-ej)*d*g d+d dgddggg d,gg d+d dgddggg d-gg d+d dgddgd dggg d-gg d.d dgddgd dggg d/ggd0d1 Z.d2d3 Z/d4d5 Z0ej)*d6d7gd8d9 eD  d:d; Z1d<d= Z2d>d? Z3d@dA Z4dBdC Z5dDdE Z6dFdG Z7dHdI Z8ej)*dJg dKej)*dLg dMej)*d6d7dNgdOd9 eD  dPdQ Z9dRdS Z:ej)*dTe;de(j<d  d dUdVdW Z=ej)*dXedYdZ Z>d[d\ Z?d]d^ Z@d_d` ZAej)*dXdge dadb ZBej)*dXedcdd ZCdedf ZDdS )g    N)DBSCANOPTICS)_extend_region_extract_xi_labels)generate_clustered_data)
make_blobs)DataConversionWarningEfficiencyWarning)contingency_matrix)pairwise_distances)shuffle)assert_allcloseassert_array_equal)CSR_CONTAINERS
   皙?      皙?   皙?   333333?g?      )r_plotend)r   !@皙!@ffffff!@   r   )r   r    r!   r"   g333333!@r#   r   r    r!   r"   r#   c                 C   sP   t | } | d d | dd   }|dk}|dk }t||dd}||ks&J d S )Nr   r   grq?r   r   nparrayr   )r   r   ratioZsteep_downwardZupwarde r)   p/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/cluster/tests/test_optics.pytest_extend_downward      

r+   g @g@   gffffff@c                 C   sP   t | } | d d | dd   }|dk}|dk}t||dd}||ks&J d S )Nr   r   g?r   r   r$   )r   r   r'   Zsteep_upwardZdownwardr(   r)   r)   r*   test_extend_upward2   r,   r.   )orderingclustersexpectedr   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                 C   s   t | |}t|| d S N)r   r   )r/   r0   r1   labelsr)   r)   r*   test_the_extract_xi_labelsE   s   

r5   c                 C   s  t jd}d}ddgd||d  }ddgd	||d  }d
dgd||d  }ddgd||d  }ddgd||d  }ddgd||d  }t |||||t ddgg|fj| dd}	t jdgd dgd d
gd dgd d
gd ddgd f }
t|	|
|d\}	}
t	dddddd
|	}t|j|
 t	d	ddddd
|	}t|j|
 t |||||t ddggd |fj| dd}	t jd
gd dgd dgd dgd dgd dddgd f }
t|	|
|d\}	}
t	dddddd
|	}t|j|
 ddgdd	gddgd	dgg}ddgddgddgddgg}ddgddgddgddgg}t |||fj| dd}	t jdgd d
gd dgd f }
t|	|
|d\}	}
t	ddt jddd
|	}t|j|
 d S ) Nr   r   r   r   r   r   r   r   r   r   r   r   r   g333333?r   d   Fcopyrandom_state   xi皙?)min_samplesmin_cluster_sizemax_epscluster_methodr<   g{Gz?皙r   	      Z   n   {Gz?)r%   randomRandomStaterandnvstackr&   astyper_r   r   fitr   labels_inf)global_dtyperngn_points_per_clusterC1C2C3C4C5C6Xexpected_labelsclustr)   r)   r*   test_extract_xiT   sd   $<

(6
"r]   c                 C   s   t j|}d}ddgd||dj| dd  }ddgd||dj| dd  }t ||f}t||d}tdd	d
|j	}|j
dksHJ dt |d d   krZdks]J  J t |d d dksjJ d S )Nr6   r   r   Fr7   2   r9   r;   r   )r>   r<   )r   r   r   s   r      )r%   rH   rI   rJ   rL   rK   r   r   rN   Zcluster_hierarchy_shapediff)rQ   global_random_seedrR   rS   rT   rU   rZ   r0   r)   r)   r*   test_cluster_hierarchy   s   

*rd   zcsr_container, metric)N	minkowskic                 C      g | ]}|d fqS 	euclideanr)   .0	containerr)   r)   r*   
<listcomp>       rl   c                 C   s"  d}t |d}tddd| d}||d ur||n| tt|jtd|jv  }||ks0J |jjt|fks;J |jjj	dksDJ |j
jt|fksOJ |j
jj	d	ksXJ |jjt|fkscJ |jjj	d	kslJ |jjt|fkswJ |jjj	dksJ t|jttt|ksJ d S )
Nr   )
n_clustersg      >@r   r   )r@   r>   r<   metricr   if)r   r   rN   lensetrO   intra   dtypekindreachability_core_distances_	ordering_range)ro   csr_containerrn   rZ   r\   Zn_clusters_1r)   r)   r*   test_correct_number_of_clusters   s   
"r|   c                  C   sZ   d} ddgg}t dddd}tjt| d || W d    d S 1 s&w   Y  d S )Nz#min_samples must be no greater thanr   g      ?r         ?)r@   r>   r?   match)r   pytestraises
ValueErrorrN   )msgrZ   r\   r)   r)   r*   #test_minimum_number_of_sample_check   s   
"r   c                  C   s|   d} ddgddgddgg}t d|ddd\}}tdd	d
dd}tjt| d || W d    d S 1 s7w   Y  d S )Nz.Specify an epsilon smaller than 0.15. Got 0.3.r   r     r=   r   Z	n_samplescentersZcluster_stdr:   g333333?dbscanr   r   r@   rA   epsr>   r~   )r   r   r   r   r   rN   r   r   rZ   labels_truer\   r)   r)   r*   test_bad_extract   s   
"r   c                  C   sz   d} ddgddgddgg}t d|ddd\}}tjt| d td	d
d	d}|| W d    d S 1 s6w   Y  d S )Nz6All reachability values are inf. Set a larger max_eps.r   r   r   r=   r   r   r~   gQ?r   )r@   r>   r   )r   r   warnsUserWarningr   rN   r   r)   r)   r*   test_bad_reachability   s   
"r   c                  C   s`   d} t jjddtd}t  tdt t| d	| W d    d S 1 s)w   Y  d S )Nrogerstanimotor   r   r   sizeru   errorro   )
r%   rH   randintboolwarningscatch_warningssimplefilterr   r   rN   )pairwise_metricrZ   r)   r)   r*   $test_nowarn_if_metric_bool_data_bool   s   
"r   c                  C   s   d} t jjddt jd}d|  }tjt|d!}tjddt	d	 t
| d
| t|dks1J W d    d S 1 s<w   Y  d S )Nr   r   r   r   z-Data will be converted to boolean for metric r~   ignorez+'asyncio.iscoroutinefunction' is deprecated)messagecategoryr   r   )r%   rH   r   int32r   r   r   r   filterwarningsDeprecationWarningr   rN   rr   )r   rZ   r   Zwarn_recordr)   r)   r*   %test_warn_if_metric_bool_data_no_bool   s   
"r   c                  C   s   d} t jjddtd}t jjddt jd}t  tdt t	| d
| t	| d
| W d    d S 1 s;w   Y  d S )Nre   r   r   r   r   r   )r%   rH   r   r   r   r   r   r   r   r   rN   )r   ZX_boolZX_numr)   r)   r*   test_nowarn_if_metric_no_bool  s   
"r   c                  C   sV   ddgddgddgg} t d| ddd\}}tddd	d
d|}t|jdks)J d S )Nr   r   r   r=   r   r   r}   r   r   r   r   r   )r   r   rN   maxrO   )r   rZ   r   r\   r)   r)   r*   test_close_extract  s   
r   r   )r   r         ?r>   )r   r   r;   )Nrh   c                 C   rf   rg   r)   ri   r)   r)   r*   rl   2  rm   c                 C   s   ddgddgddgg}t d|ddd\}}|d ur||n|}|j|dd}t|d	| |d
|}t| |d|}	t|	j|j}
tt	tj
|
ddt	tj
|
dd}|jd | }t|d |jd  d}|dkspJ d S )Nr   r      r=   r   r   Fr7   r   )r>   rA   r   ro   )r   r>   )Zaxisr   g?)r   rL   r   rN   r   r
   rO   minr%   sumr   ra   round)r   r>   ro   rQ   r{   r   rZ   r   opdbZcontingencyZagreeZdisagreeZpercent_mismatchr)   r)   r*   test_dbscan_optics_parity-  s&   

$r   c                 C   sJ  ddgddgddgg}ddgddgddgg}ddgddgdd	gg}t |||fj| d
d}t jdgd dgd dgd f }tddddd|}t|j| t jdgd dgd dgd f }tddddd|}t|j| t jdgd  }tj	t
dd tddddd|}t|j| W d    d S 1 sw   Y  d S )Nr   r   rB   r   rC   rD   r6   `   j   Fr7   r   r   r   r#   r<   rG   )r>   r@   rA   r<   r   zAll reachability valuesr~   r   )r%   rK   rL   rM   r   rN   r   rO   r   r   r   )rQ   rT   rU   rV   rZ   r[   r\   r)   r)   r*   test_min_samples_edge_caseS  s   """r   r?      c                 C   s   t d d d j|dd}td| d|}t|j|jdk }|jr+t|| ks+J td| |j	d  d}|| t
|j|j d S )Nr   Fr7   rC   )r>   r?   r   r   )rZ   rL   r   rN   r%   ZbincountrO   r   r   ra   r   )r?   rQ   redXr\   Zcluster_sizesZ
clust_fracr)   r)   r*   test_min_cluster_sizeh  s   
r   r{   c                 C   s   t ttd d}tjtdd |t W d    n1 s w   Y  t ttd dd}tjtdd || t W d    d S 1 sIw   Y  d S )Nr   )r?   zmust be no greater than the r~   rh   )r?   ro   )r   rr   rZ   r   r   r   rN   )r{   r\   r)   r)   r*   test_min_cluster_size_invalid2x  s   "r   c                  C   sh   dgdgdgdgg} t ddd| }t|jtjdddg t|jddtjtjg t|jg d d S )	Nr   r   i   r      r>   r@   r2   )r   rN   r   rw   r%   rP   rx   ry   )Yr\   r)   r)   r*   test_processing_order  s
   r   c            
      C   sN  g t jdddddddddddd	d	d
d
d
d	d	dddddddddddddddddddddddddddd dd!d"d#d$d%d%d%d%d&d&d&d'} g d(}g d)}td*d+t}t|jt | t|j|j t | t	|j
|j t |  |jd,d  D ]}|j
| |j|j|  ksJ qg t jt jt jt jt jt jt jt jt jt jt jddddddddddd-t jd.ddddd/dddt jd	d	d
d
d
d	d	dd0t jt jt jt jt jt jt jt jt jt jt jt jt jt jt jt jt jt j}g d1}g d2}td*d3d4t}t|jt | t|j|j t | t	|j
|j t | t |jd3kd5 }	t	|j|	 |j|	  d S )6Ng@z?gN	H?gއ~NT?gu?g浔E?g#r?gܞ2
@g`z?gP{
V?g:ד?g}~ a?g$@gа{n?g ?guL?g*?g$&?g{P?gx?g\x*x?g~)N{?geE,?goF?g>Ek?gPR?gBQ?gW?g@*?gr2\k?ghG?g[؜]N?g!L?g@gwc?@g;éfh@gK!Q@g,@M@gZv@gr/%A@)<r   r   r   r   r#   r-   r   rC   r   r             "   !   &   '   #   %   $   ,      r         r               r;   (   -   .   r   r   rD                        /   1   +   0   *   )   5   9   3   4   8   ;   6   7   :   r^   )<r   r   r   r   r   r   r-   r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r>   r   g9'%?gΖF?gx?g*?)<r   r   r   r   r   r   r   r#   r-   rC   r   r   rD   r   r   r   r   r   r   r   r   r   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r^   r   r   r   r   r   r   r   r   r   )<r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r   r   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r%   rP   r   rN   rZ   r   ry   r&   Zpredecessor_r   rw   rx   where)
r1Zo1p1clust1rp   r2o2p2clust2indexr)   r)   r*   test_compare_to_ELKI  s  	
 !"#$%&'()*+,-./0123456789:;<>>B 	
 !"#$%&'()*+,-./0123456789:;<>>>r   c           
      C   s   t j|}d}ddgd||d  }ddgd||d  }ddgd||d  }dd	gd||d  }t ||||fj| d
d}tddd|}	tt 	t 
|	j|	jdk g d d S )Nr;   r   r   r   r   r   r   r   r   Fr7   r   r   )rA   r   r2   )r%   rH   rI   rJ   rK   rL   r   rN   r   sortuniquerO   )
rQ   rc   rR   rS   rT   rU   rV   rW   rZ   r\   r)   r)   r*   test_extract_dbscan   s    r   c                 C   s   t d d d j| dd}t|dd}|d ur||n|}t  tdt tddd	d
|}W d    n1 s;w   Y  tdddd
|}t	|j
|j
 t|j|j d S )Nr   Fr7   rh   r   r   r   Zbruteprecomputed)r>   	algorithmro   )rZ   rL   r   r   r   r   r	   r   rN   r   rw   r   rO   )rQ   r{   r   distsr   r   r)   r)   r*   test_precomputed_dists1  s   
r   c                 C   s   t j|dd}t |d | |}tdd t|  D s#J | }t	dd
| |j|jks7J t| |  dS )zCheck that we don't modify in-place the pre-computed sparse matrix.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27508
    r   r   c                 s   s    | ]	\}}||kV  qd S r3   r)   )rj   rowcolr)   r)   r*   	<genexpr>O  s    zKtest_optics_input_not_modified_precomputed_sparse_nodiag.<locals>.<genexpr>r   r   N)r%   rH   rI   ZrandZfill_diagonalallzipZnonzeror8   r   rN   Znnzr   Ztoarray)r{   rc   rZ   ZX_copyr)   r)   r*   8test_optics_input_not_modified_precomputed_sparse_nodiagA  s   r   c                  C   s`   t g ddd} g d}| | }tddd| }tddd|}t|j| |j dS )	a  Check that cluster correction using predecessor is working as expected.

    In the following example, the predecessor correction was not working properly
    since it was not using the right indices.

    This non-regression test check that reordering the data does not change the results.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/26324
    )r   r   r   r   r-   r-   r#   r6   r   r   )r   r   r   r   r   r   r#   r   r   rh   )r>   ro   N)r%   r&   Zreshaper   rN   r   rO   )ZX_1ZreorderZX_2Zoptics_1Zoptics_2r)   r)   r*   +test_optics_predecessor_correction_orderingX  s   r   )Er   numpyr%   r   Zsklearn.clusterr   r   Zsklearn.cluster._opticsr   r   Zsklearn.cluster.tests.commonr   Zsklearn.datasetsr   Zsklearn.exceptionsr   r	   Zsklearn.metrics.clusterr
   Zsklearn.metrics.pairwiser   Zsklearn.utilsr   Zsklearn.utils._testingr   r   Zsklearn.utils.fixesr   rH   rI   rR   rS   rJ   rT   rU   rV   rW   rX   rY   rK   rZ   markZparametrizerP   r+   r.   r5   r]   rd   r|   r   r   r   r   r   r   r   r   r   rz   ra   r   r   r   r   r   r   r   r   r)   r)   r)   r*   <module>   s   


	

	
""
	;



   

