U
    Hvf]                     @   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r|d V  qrt|V  qrd S )N)Zdtypec                 S   s   g | ]}d qS N .0ir   r   I/tmp/pip-unpacked-wheel-96ln3f52/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 ](}||kr
t|||< t|| kr
 q4q
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"tt||ks2td S )N
   )r(   r   	n_subsetsAssertionErrorr   r&   r'   disr   r   r	   	test_init%   s
    r.   c                  C   sF   d} t | }t|}t|| ks$t|d t|| d ksBtd S )Nr)   dummyr   )r(   r   r   r+   addr,   r   r   r	   test_len-   s    
r1   r&   r)   d   c                 C   s6   t | }t|}|D ]}||kstqd|ks2td S )Nr/   )r(   r   r+   )r&   r'   r-   xr   r   r	   test_contains7   s
    r4   c                 C   s|   t | }t|}t }t|D ]D\}}|| t||d ksDt|| t||d kstqt|t|ksxtd S )Nr   )r(   r   	enumerater0   r   r+   r   )r&   r'   Zdis1Zdis2r   r3   r   r   r	   test_addA   s    

r6   c               	   C   sz   t dd} t| }tt |d  W 5 Q R X tt || d d W 5 Q R X tt || d d W 5 Q R X 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                    s2  t | t t ks ttt| d }|dkrF|d d d }t|D ]r\}} | |d  rrt | |d  st | |d  st j| d | ksNtqN fddD }|dkrt	fdd|D stnt	fd	d|D st d
 d r.td S )Nr   r>   c                    s   g | ]} | qS r   r   r   r-   r   r	   r
   q   s     z.test_linear_union_sequence.<locals>.<listcomp>r=   c                 3   s   | ]} d  |kV  qdS )r   Nr   r   rr'   r   r	   	<genexpr>s   s     z-test_linear_union_sequence.<locals>.<genexpr>c                 3   s   | ]} d  |kV  qdS )Nr   rA   rC   r   r	   rD   u   s     r   )
r(   r   r   r+   r   r5   r:   r9   r*   all)r&   r<   indicesitr   rootsr   r-   r'   r	   test_linear_union_sequence`   s     rK   c                    s   t | }t| |D ]4} ||s(t ||r8t ||stq jt|ks\t|t kslt fdd|D }||kstd S )Nc                    s   g | ]} | qS r   r   )r   r3   r@   r   r	   r
      s     z$test_self_unions.<locals>.<listcomp>)r(   r   r:   r+   r9   r*   r   r   )r&   r'   r3   rI   r   r@   r	   test_self_unionsy   s    rL   orderabbac           
      C   s   t | }t|}tjjdd}t| }|| tdt|dD ]}|||  |||d    }}|dkr~|	||st
n|	||st
|t|| ||d   }	|| |	kst
|| |	ksBt
qBd S )Nr   r      r   rN   )r(   r   r   r   r   r   shuffler   r   r9   r+   min)
r&   rM   r'   r-   r!   rG   r   abexpectedr   r   r	   test_equal_size_ordering   s    

rV   kmax   c                    s  d|  }t |t tjjdd}dt|  D ]}td|d| D ]f}|jd|dd\}}||  || |   }} ||rt	 
||st	 ||sHt	qHt kst	 fddD }	t|t|d|   }
fdd|
D }|	|ks4t	q4d S )NrP   r   r   )r"   c                    s   g | ]} | qS r   r   r   r@   r   r	   r
      s     z$test_binary_tree.<locals>.<listcomp>c                    s   g | ]} | qS r   r   r   rC   r   r	   r
      s     )r(   r   r   r   r   r   r   r   r:   r+   r9   r   )rW   r&   r!   r   r   Zr1Zr2rS   rT   rI   Zexpected_indicesrU   r   rJ   r	   test_binary_tree   s     rY   c                    s   t | }t| tjjdd}|d| | dfD ]\}}|| || } fdd D }| ksnt fdd D } D ]}| |  | qt	|
 }|  kst |   |ks0tq0d S )Nr   r   rP   c                    s$   h | ]} | h  hkr|qS r   r   r   r#   r-   r3   r   r	   	<setcomp>   s      ztest_subsets.<locals>.<setcomp>c                    s   i | ]} | t  qS r   )setrZ   r@   r   r	   
<dictcomp>   s      z test_subsets.<locals>.<dictcomp>)r(   r   r   r   r   r   Zsubsetr+   r0   r   valuesZsubsetsr9   )r&   r'   r!   r   jyrU   r#   r   r[   r	   test_subsets   s    rb   )Zpytestr   r7   Znumpyr   Zscipy.cluster.hierarchyr   r   r$   r(   r.   r1   markZparametrizer4   r6   r;   rK   rL   rV   rY   rb   r   r   r   r	   <module>   s2   

	


