U
    -eV                     @   s  d dl Z d dlZd dl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 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 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ddddddgdgddddd ddg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)d dddgd dgddggd d ddggd dddgd dgddggd d ddggd dddgd dgddgd dggd d ddggdddd gd dgddgd dggdd dd gggd*d+ Z.d,d- Z/d.d/ Z0ej)*d0d1d2gd3d4ggd5d6 Z1d7d8 Z2d9d: Z3d;d< Z4d=d> Z5d?d@ Z6dAdB Z7dCdD Z8ej)*dEdddFgej)*dGdddHgej)*d0d1d2gd3d2gd3d4ggdIdJ Z9dKdL Z:ej)*dMe;de(j<d  d dNdOdP Z=dQdR Z>dSdT Z?dUdV Z@dWdX ZAej)*dYd2d4gdZd[ ZBdS )\    N)sparse)DBSCANOPTICS)_extend_region_extract_xi_labels)generate_clustered_data)
make_blobs)DataConversionWarningEfficiencyWarning)contingency_matrix)pairwise_distances)shuffle)assert_allcloseassert_array_equal
   皙?      皙?   皙?   333333?g?      )r_plotendg!@g!@gffffff!@   g333333!@c                 C   sP   t | } | d d | dd   }|dk}|dk }t||dd}||ksLtd S )Nr   r   grq?r   r   nparrayr   AssertionError)r   r   ratioZsteep_downwardZupwarde r'   b/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/cluster/tests/test_optics.pytest_extend_downward   s    

r)   g @g@   gffffff@c                 C   sP   t | } | d d | dd   }|dk}|dk}t||dd}||ksLtd S )Nr   r   g?r   r   r!   )r   r   r%   Zsteep_upwardZdownwardr&   r'   r'   r(   test_extend_upward2   s    

r+   )orderingclustersexpectedc                 C   s   t | |}t|| d S )N)r   r   )r,   r-   r.   labelsr'   r'   r(   test_the_extract_xi_labelsE   s    

r0   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_methodr7   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   s    $ <        ( 6    "    rX   c                 C   s   t jd}d}ddgd||dj| dd  }ddgd||dj| dd  }t ||f}t|dd}tdd	d
|j	}|j
dkstt |t ddgddgg }|t| dk std S )Nr   r1   r   Fr2   2   r4   r6   r   )r9   r7   )r   r   c      皙?)r"   rC   rD   rE   rG   rF   r   r   rI   Zcluster_hierarchy_shaper$   sumr#   len)rL   rM   rN   rO   rP   rU   r-   diffr'   r'   r(   test_cluster_hierarchy_   s      
 
 ra   zmetric, is_sparse	minkowskiF	euclideanTc                 C   s"  d}t |d}tddd| d}||r0t|n| tt|jtd|jk }||ks^t	|jj
t|fkstt	|jjjdkst	|jj
t|fkst	|jjjd	kst	|jj
t|fkst	|jjjd	kst	|jj
t|fkst	|jjjdkst	t|jttt|kst	d S )
Nr   )
n_clustersg      >@r   r   )r;   r9   r7   metricr   if)r   r   rI   r   
csr_matrixr_   setrJ   intr$   r]   dtypekindreachability_core_distances_	ordering_range)re   	is_sparserd   rU   rW   Zn_clusters_1r'   r'   r(   test_correct_number_of_clusters   s    
rr   c               	   C   sD   d} ddgg}t dddd}tjt| d || W 5 Q R X d S )Nz#min_samples must be no greater thanr   g      ?r         ?)r;   r9   r:   match)r   pytestraises
ValueErrorrI   )msgrU   rW   r'   r'   r(   #test_minimum_number_of_sample_check   s
    
rz   c               	   C   sf   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 5 Q R X d S )Nz.Specify an epsilon smaller than 0.15. Got 0.3.r   r     r8   r   Z	n_samplescentersZcluster_stdr5   g333333?dbscanr   r   r;   r<   epsr9   rt   )r   r   rv   rw   rx   rI   ry   r}   rU   labels_truerW   r'   r'   r(   test_bad_extract   s       
r   c               	   C   sd   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 5 Q R X d S )Nz6All reachability values are inf. Set a larger max_eps.r   r   r{   r8   r   r|   rt   gQ?r   )r;   r9   r   )r   rv   warnsUserWarningr   rI   r   r'   r'   r(   test_bad_reachability   s       
r   c               	   C   sJ   d} t jjddtd}t " tdt t| d	| W 5 Q R X d S )Nrogerstanimotor   r   r   sizerk   errorre   )
r"   rC   randintboolwarningscatch_warningssimplefilterr	   r   rI   )pairwise_metricrU   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| d| t	|dksRt
W 5 Q R X d S )	Nr   r   r   r   z-Data will be converted to boolean for metric rt   r   r   )r"   rC   r   int32rv   r   r	   r   rI   r_   r$   )r   rU   ry   Zwarn_recordr'   r'   r(   %test_warn_if_metric_bool_data_no_bool   s    
r   c               	   C   sn   d} t jjddtd}t jjddt jd}t 2 tdt t	| d
| t	| d
| W 5 Q R X d S )Nrb   r   r   r   r   r   )r"   rC   r   r   r   r   r   r   r	   r   rI   )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sRtd S )Nr   r   r{   r8   r   r|   rs   r~   r   r   r   r   )r   r   rI   maxrJ   r$   )r}   rU   r   rW   r'   r'   r(   test_close_extract  s       
r   r         ?r9   r6   c                 C   s   ddgddgddgg}t d|ddd\}}|r8t|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std S )Nr   r      r8   r   r|   Fr2   r~   )r9   r<   r   re   )r   r9   )Zaxisr   r\   )r   r   rh   rG   r   rI   r   r   rJ   minr"   r^   r   r]   roundr$   )r   r9   re   rq   rL   r}   rU   r   opdbZcontingencyZagreeZdisagreeZpercent_mismatchr'   r'   r(   test_dbscan_optics_parity!  s4    	   
    r   c              	   C   s4  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 5 Q R X d S )Nr   r   r=   r   r>   r?   r1   `   j   Fr2   r   r   r   r    r7   rB   )r9   r;   r<   r7   r   zAll reachability valuesrt   r   )r"   rF   rG   rH   r   rI   r   rJ   rv   r   r   )rL   rO   rP   rQ   rU   rV   rW   r'   r'   r(   test_min_samples_edge_caseF  s    ""r   r:      c                 C   s   t d d d j|dd}td| d|}t|j|jdk }|jrVt|| ksVt	td| |j
d  d}|| t|j|j d S )Nr   Fr2   r>   )r9   r:   r   r   )rU   rG   r   rI   r"   ZbincountrJ   r   r   r$   r]   r   )r:   rL   redXrW   Zcluster_sizesZ
clust_fracr'   r'   r(   test_min_cluster_size[  s    
r   c               	   C   sx   t ttd d} tjtdd | t W 5 Q R X t ttd dd} tjtdd | tt W 5 Q R X d S )Nr   )r:   zmust be no greater than the rt   rc   )r:   re   )	r   r_   rU   rv   rw   rx   rI   r   rh   )rW   r'   r'   r(   test_min_cluster_size_invalid2k  s    r   c                  C   sl   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ddd	dg d S )
Nr   r   i   r      r9   r;   r   r   )r   rI   r   rm   r"   rK   rn   ro   )YrW   r'   r'   r(   test_processing_orderu  s
    r   c            
   <   C   s2  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(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcg<}ddd(d)d*d*d*d-d)d,d0d1d2d3d3d5d5d5d4d4d:d;d<d=d>d?d@dAdAd@d@d@d=dGdHdIdJdKdKdMdMdKdLdOdKdJdTdQdHdSdVdXdZd[d[d[d[d_d_d_dbg<}td0det}t|jt | t|j|j t | t	|j
|j t |  |jd1d  D ]&}|j
| |j|j|  kstqt 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dft jdgdddddhdddt jd	d	d
d
d
d	d	ddit 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<}d(d1d.d)d+d0d*d,d-d/dJdKdLdMdNdOdPdQdRdSdTdIdFd@dAd>dBdCd?dDdEd=d3d4d5d6d7d8d9d:d;d2dGdYdXdVd<dHdWdUdcd\d]dZd`dad^d[dbd_g<}dddddddddddddddddddddddJdKdKdMdMdKdLdOdKdJdTdddFd@dAdAdAdAd@d@d>ddd3d3d5d5d5d4d4d:d7ddddddddddddddddddddddddddddddddddddg<}td0djdkt}t|jt | t|j|j t | t	|j
|j t | t |jdjkd( }	t	|j|	 |j|	  d S )lNg@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   r>   r   r             "   !   &   '   #   %   $   ,      r         r               r6   (   -   .   r   r   r?                        /   1   +   0   *   )   5   9   3   4   8   ;   6   7   :   rY   r   )r9   g9'%?gΖF?gx?g*?r   r   )r"   rK   r   rI   rU   r   ro   r#   Zpredecessor_r   rm   rn   r$   where)
r1Zo1p1clust1rf   r2o2p2clust2indexr'   r'   r(   test_compare_to_ELKI  s   ??B$??>r   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  }t ||||fj| dd}tddd|}tt 	t 
|jdd	dd
g d S )Nr   r6   r   r   r   r   r   r   r   r   Fr2   r~   r   )r<   r   )r"   rC   rD   rE   rF   rG   r   rI   r   sortuniquerJ   )	rL   rM   rN   rO   rP   rQ   rR   rU   rW   r'   r'   r(   test_extract_dbscan  s    r   rq   c              	   C   s   t d d d j|dd}t|dd}| r2t|n|}t & tdt t	ddd	d

|}W 5 Q R X t	dddd

|}t|j|j t|j|j d S )Nr   Fr2   rc   r   ignorer   ZbruteZprecomputed)r9   	algorithmre   )rU   rG   r   r   rh   r   r   r   r
   r   rI   r   rm   r   rJ   )rq   rL   r   distsr   r   r'   r'   r(   test_precomputed_dists!  s    
r   )Cr   numpyr"   rv   Zscipyr   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   rC   rD   rM   rN   rE   rO   rP   rQ   rR   rS   rT   rF   rU   markZparametrizerK   r)   r+   r0   rX   ra   rr   rz   r   r   r   r   r   r   r   r   rp   r]   r   r   r   r   r   r   r'   r'   r'   r(   <module>   s   	

	

$$**	
9


   