o
    &&i_                     @   s6  d dl Z d dl mZ d dlZd dlmZ d dlZdd Zdd Z	dd	 Z
d
d Ze jdddgdd Ze jdddgdd Zdd Ze jdddge jdddgdd Ze jdddgdd Ze jdddge jdddgdd  Ze jd!d"dgd#d$ Ze jdddgd%d& ZdS )'    N)raises)DisjointSetc                  c   s    t tj} ttj| td}|ttj| td7 }|ttj7 }|dd t| D 7 }tj	|t
d}tjjdd}	 |dd}|||}|dkrQ|d V  nt|V  q;)N)Zdtypec                 S   s   g | ]}d qS N .0ir   r   PC:\wamp64\www\opt\env\Lib\site-packages\scipy/cluster/tests/test_disjoint_set.py
<listcomp>   s    z)generate_random_token.<locals>.<listcomp>r   seed      )lenstringascii_letterslistnparangeintfloatrangearrayobjectrandomRandomStaterandintchoicetuple)ktokensrngsizeelementr   r   r	   generate_random_token   s   

r$   c                 C   s@   i }t  D ]}||vrt|||< t|| kr nqt| S r   )r$   r   r   keys)nelementsr#   r   r   r	   get_elements   s   
r(   c                  C   s6   d} t | }t|}|j| ksJ t||ksJ d S )N
   )r(   r   	n_subsetsr   r&   r'   disr   r   r	   	test_init%   s
   r-   c                  C   sF   d} t | }t|}t|| ksJ |d t|| d ks!J d S )Nr)   dummyr   )r(   r   r   addr+   r   r   r	   test_len-   s   
r0   r&   r)   d   c                 C   s6   t | }t|}|D ]}||v sJ q
d|vsJ d S )Nr.   )r(   r   )r&   r'   r,   xr   r   r	   test_contains7   s
   r3   c                 C   s|   t | }t|}t }t|D ]"\}}|| t||d ks"J || t||d ks1J qt|t|ks<J d S )Nr   )r(   r   	enumerater/   r   r   )r&   r'   Zdis1Zdis2r   r2   r   r   r	   test_addA   s   

r5   c                  C   s   t dd} t| }tt |d  W d    n1 sw   Y  tt || d d W d    n1 s8w   Y  tt || d d W d    d S 1 sUw   Y  d S )Nr)   )r&   r.   r   )r(   r   assert_raisesKeyErrormerge	connected)r'   r,   r   r   r	   test_element_not_presentR   s   




"r:   	directionforwards	backwardsc                    s.  t | t t ksJ tt| d }|dkr#|d d d }t|D ]9\}} | |d  r9J  | |d  sGJ  | |d  sUJ  j| d | ks`J q' fddD }|dkr|tfdd|D s{J ntfd	d|D sJ  d
 d rJ d S )Nr   r=   c                       g | ]} | qS r   r   r   r,   r   r	   r
   q       z.test_linear_union_sequence.<locals>.<listcomp>r<   c                 3       | ]	} d  |kV  qdS )r   Nr   r   rr'   r   r	   	<genexpr>s       z-test_linear_union_sequence.<locals>.<genexpr>c                 3   rB   )Nr   rC   rE   r   r	   rF   u   rG   r   )	r(   r   r   r   r4   r9   r8   r*   all)r&   r;   indicesitr   rootsr   r,   r'   r	   test_linear_union_sequence`   s    rN   c                    s   t | }t| |D ]} ||sJ  ||rJ  ||s$J q
 jt|ks.J |t ks6J  fdd|D }||ksEJ d S )Nc                    r?   r   r   )r   r2   r@   r   r	   r
      rA   z$test_self_unions.<locals>.<listcomp>)r(   r   r9   r8   r*   r   r   )r&   r'   r2   rL   r   r@   r	   test_self_unionsy   s   rO   orderabbac           
      C   s   t | }t|}tjjdd}t| }|| tdt|dD ]C}|||  |||d   }}|dkr?|	||s>J n|	||sGJ |t
|| ||d   }	|| |	ks\J || |	ksdJ q!d S )Nr   r      r   rQ   )r(   r   r   r   r   r   shuffler   r   r8   min)
r&   rP   r'   r,   r!   rJ   r   abexpectedr   r   r	   test_equal_size_ordering   s   

rY   kmax   c                    s  d|  }t |t tjjdd}dt|  D ]l}td|d| D ]3}|jd|dd\}}||  || |  }} ||rGJ  	||sOJ  ||sWJ q$t
 ks`J  fddD }	t|t|d|   }
fdd|
D }|	|ksJ qd S )NrS   r   r   )r"   c                    r?   r   r   r   r@   r   r	   r
      rA   z$test_binary_tree.<locals>.<listcomp>c                    r?   r   r   r   rE   r   r	   r
      rA   )r(   r   r   r   r   r   r   r   r9   r8   r   )rZ   r&   r!   r   r   r1r2rV   rW   rL   Zexpected_indicesrX   r   rM   r	   test_binary_tree   s"   r^   c                    s   t | }t| tjjdd}|d| | dfD ]d\}}|| || } fdd D } t ks<J | ksEJ  fdd D } D ]}| |  	| qPt
| }|  ksjJ  |   |ks|J qd S )Nr   r   rS   c                    s$   h | ]} | h  hkr|qS r   r   r   r#   r,   r2   r   r	   	<setcomp>   s   $ ztest_subsets.<locals>.<setcomp>c                    s   i | ]} | t  qS r   )setr_   r@   r   r	   
<dictcomp>   s    z test_subsets.<locals>.<dictcomp>)r(   r   r   r   r   r   Zsubset_sizer   Zsubsetr/   r   valuesZsubsetsr8   )r&   r'   r!   r   jyrX   r#   r   r`   r	   test_subsets   s"   rg   )Zpytestr   r6   numpyr   Zscipy.cluster.hierarchyr   r   r$   r(   r-   r0   markZparametrizer3   r5   r:   rN   rO   rY   r^   rg   r   r   r   r	   <module>   s4    

	


