o
    tBhJU                     @   s  d dl Zd dlZd dl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 d d	lmZ d d
lmZ d dl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 d0ggd1d2 Z+d3d4 Z,d5d6 Z-d7d8 Z.d9d: Z/d;d< Z0d=d> Z1d?d@ Z2dAdB Z3dCdD Z4dEdF Z5ej&'dGg dHej&'dIg dJdKdL Z6dMdN Z7ej&'dOe8de%j9d  d dPdQdR Z:ej&'dOg dSdTdU Z;dVdW Z<dXdY Z=dZd[ Z>d\d] Z?d^d_ Z@d`da ZAdS )b    N)
make_blobs)OPTICS)_extend_region_extract_xi_labels)DataConversionWarning)contingency_matrix)pairwise_distances)DBSCAN)shuffle)assert_array_equal)assert_allclose)generate_clustered_data
   皙?      皙?   皙?   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   ratiosteep_downwardupwarde r)   x/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/cluster/tests/test_optics.pytest_extend_downward!      

r+   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%   steep_upwarddownwardr(   r)   r)   r*   test_extend_upward4   r,   r1   )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   )r2   r3   r4   labelsr)   r)   r*   test_the_extract_xi_labelsG   s   

r7   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_xiV   sd   $<

(6
"r_   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sHJ t |t ddgddgg }|t| dk sbJ d S )Nr   r8   r   Fr9   2   r;   r=   r   )r@   r>   )r   r   c      皙?)r#   rJ   rK   rL   rN   rM   r
   r   rP   cluster_hierarchy_shapesumr$   len)rS   rT   rU   rV   rW   r\   r3   diffr)   r)   r*   test_cluster_hierarchy_   s   

 ri   c                  C   s  d} t | d}tdddd}|| tt|jtd|jv  }|| ks'J |jjt|fks2J |jjj	dks;J |j
jt|fksFJ |j
jj	d	ksOJ |jjt|fksZJ |jjj	d	kscJ |jjt|fksnJ |jjj	dkswJ t|jttt|ksJ d S )
Nr   )
n_clustersg      >@r   r   )rB   r@   r>   r   if)r   r   rP   rg   setrQ   intre   dtypekindreachability_core_distances_	ordering_range)rj   r\   r^   n_clusters_1r)   r)   r*   test_correct_number_of_clusters   s   

"rv   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   )rB   r@   rA   match)r   pytestraises
ValueErrorrP   )msgr\   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   	n_samplescenterscluster_stdr<   g333333?dbscanr   r   rB   rC   epsr@   rw   )r   r   ry   rz   r{   rP   r|   r   r\   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   rw   gQ?r   )rB   r@   r   )r   ry   warnsUserWarningr   rP   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   sizero   errormetric)
r#   rJ   randintboolwarningscatch_warningssimplefilterr   r   rP   )pairwise_metricr\   r)   r)   r*   $test_nowarn_if_metric_bool_data_bool   s   
"r   c                  C   sv   d} t jjddt jd}d|  }tjt|d}t| d| t	|dks)J W d    d S 1 s4w   Y  d S )	Nr   r   r   r   z-Data will be converted to boolean for metric rw   r   r   )
r#   rJ   r   int32ry   r   r   r   rP   rg   )r   r\   r|   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 )N	minkowskir   r   r   r   r   )r#   rJ   r   r   r   r   r   r   r   r   rP   )r   X_bool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   g      ?r   r   r   r   r   )r   r   rP   maxrQ   )r   r\   r   r^   r)   r)   r*   test_close_extract  s   
r   r   )r   r         ?r@   )r   r   r=   c                 C   s   ddgddgddgg}t d|ddd\}}|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seJ d S )Nr   r   r~   r?   r   r   Fr9   r   )r@   rC   r   )r   r@   )axisr   rc   )r   rN   r   rP   r	   r   rQ   minr#   rf   r   re   round)r   r@   rS   r   r\   r   opdbcontingencyagreedisagree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   rD   r   rE   rF   r8   `   j   Fr9   r   r   r   r!   r>   rI   )r@   rB   rC   r>   r   zAll reachability valuesrw   r   )r#   rM   rN   rO   r   rP   r   rQ   ry   r   r   )rS   rV   rW   rX   r\   r]   r^   r)   r)   r*   test_min_samples_edge_case=  s   """r   rA      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   Fr9   rE   )r@   rA   r   r   )r\   rN   r   rP   r#   bincountrQ   r   r   re   r   )rA   rS   redXr^   cluster_sizes
clust_fracr)   r)   r*   test_min_cluster_sizeR  s   
r   )r   r   g?r-   c                 C   sH   t | d}tjtdd |t W d    d S 1 sw   Y  d S )NrA   z must be a positive integer or a rw   r   ry   rz   r{   rP   r\   )rA   r^   r)   r)   r*   test_min_cluster_size_invalida  s   
"r   c                  C   sP   t ttd d} tjtdd | t W d    d S 1 s!w   Y  d S )Nr   r   zmust be no greater than the rw   )r   rg   r\   ry   rz   r{   rP   r^   r)   r)   r*   test_min_cluster_size_invalid2h  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@   rB   r5   )r   rP   r   rq   r#   rR   rr   rs   )Yr^   r)   r)   r*   test_processing_ordern  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   rE   r   r             "   !   &   '   #   %   $   ,      r         r               r=   (   -   .   r   r   rF                        /   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   rF   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.   rE   r   r   rF   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   rF   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#   rR   r   rP   r\   r   rs   r$   predecessor_r   rq   rr   where)
r1o1p1clust1rk   r2o2p2clust2indexr)   r)   r*   test_compare_to_ELKIx  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   sH   t dd} tjtdd | t W d    d S 1 sw   Y  d S )N
superfancy)rC   z cluster_method should be one of rw   r   r   r)   r)   r*   test_wrong_cluster_method
  s   
"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g d d S )Nr   r=   r   r   r   r   r   r   r   r   Fr9   r   r   )rC   r   r5   )r#   rJ   rK   rL   rM   rN   r   rP   r   sortuniquerQ   )	rS   rT   rU   rV   rW   rX   rY   r\   r^   r)   r)   r*   test_extract_dbscan  s    r   c                 C   sl   t d d d j| dd}t|dd}tdddd	|}tdddd	|}t|j|j t|j|j d S )
Nr   Fr9   	euclideanr   r   bruteprecomputed)r@   	algorithmr   )	r\   rN   r   r   rP   r   rq   r   rQ   )rS   r   distsr   r   r)   r)   r*   test_precomputed_dists  s   r  )Bnumpyr#   ry   r   sklearn.datasetsr   sklearn.clusterr   sklearn.cluster._opticsr   r   sklearn.exceptionsr   sklearn.metrics.clusterr   sklearn.metrics.pairwiser   r	   sklearn.utilsr
   sklearn.utils._testingr   r   sklearn.cluster.tests.commonr   rJ   rK   rT   rU   rL   rV   rW   rX   rY   rZ   r[   rM   r\   markparametrizerR   r+   r1   r7   r_   ri   rv   r}   r   r   r   r   r   r   r   r   rt   re   r   r   r   r   r   r   r   r  r)   r)   r)   r*   <module>   s   


	

	
""
	9


   