o
    3ήc                     @   s<   d dl mZ d dlZd dlZG dd dZG dd dZdS )    )partialNc                   @   sp   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestBFSc                 C   s    t  }|g d || _d S )Nr      r      r      r      r
   r   )nxGraphadd_edges_fromG)clsr    r   S/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/traversal/tests/test_bfs.pysetup_class	   s   
zTestBFS.setup_classc                 C   s0   t tj| jdddgddgdgdksJ d S )Nr   sourcer   r   r
   r   )r   r   r   )dictr   bfs_successorsr   selfr   r   r   test_successor   s   0zTestBFS.test_successorc                 C   s*   t tj| jdddddddksJ d S )Nr   r   r   r   )r   r   r
   r   )r   r   bfs_predecessorsr   r   r   r   r   test_predecessor   s   *zTestBFS.test_predecessorc                 C   sJ   t j| jdd}t| t| j ksJ t| g dks#J d S Nr   r   )r   r   r	   r   )r   bfs_treer   sortednodesedgesr   Tr   r   r   test_bfs_tree   s   zTestBFS.test_bfs_treec                 C   s(   t j| jdd}t|g dksJ d S r   r   	bfs_edgesr   listr   r#   r   r   r   test_bfs_edges   s   zTestBFS.test_bfs_edgesc                 C   s>   t  }|g d t j|ddd}t|g dksJ d S )Nr   r   T)r   reverse))r   r   )r   r
   r   r   )r   r   )r   DiGraphr   r(   r)   )r   Dr#   r   r   r   test_bfs_edges_reverse   s   zTestBFS.test_bfs_edges_reversec                 C   sn   t  }|g d ttdd}t j|dtd}t j|d|d}t|g dks+J t|g dks5J d S )N)r   r   r   r   r   r	   r      T)r,   r   )r   sort_neighbors)r   r1   r	   r2   r3   )r1   r   r3   r2   r	   )r   r.   r   r   r!   r(   r)   )r   r/   	sort_desc	edges_asc
edges_descr   r   r   test_bfs_edges_sorting%   s   zTestBFS.test_bfs_edges_sortingc                 C   sX   t  }|d |d t j|dd}t| dgks J t| g ks*J d S )Nr   r   r   )r   r   add_noder    r!   r"   r#   )r   r   r%   r   r   r   test_bfs_tree_isolates.   s   

zTestBFS.test_bfs_tree_isolatesc                 C   s^   dgdgddgdgd}t ttj| jdgd|ksJ t ttj| jdd|ks-J d S )Nr   r   r   r
   r   )r   r   r   r
   sources)r   	enumerater   
bfs_layersr   )r   expectedr   r   r   test_bfs_layers6   s   "$zTestBFS.test_bfs_layersc                 C   s   t tj ttj| jdd W d    n1 sw   Y  t tj ttj| jdgd W d    d S 1 s=w   Y  d S )Nabcr<   )pytestraisesr   NetworkXErrornextr?   r   r   r   r   r   test_bfs_layers_missing_source@   s   "z&TestBFS.test_bfs_layers_missing_sourcec                 C   s@   t dhdhddhdhgD ]\}}t| jd||ksJ qd S )Nr   r   r   r
   r   )r>   r   descendants_at_distancer   r   distancedescendantsr   r   r   test_descendants_at_distanceF   s   "z$TestBFS.test_descendants_at_distancec                 C   sB   t tj t| jdd W d    d S 1 sw   Y  d S )NrB   r   )rC   rD   r   rE   rH   r   r   r   r   r   +test_descendants_at_distance_missing_sourceJ   s   "z3TestBFS.test_descendants_at_distance_missing_sourceN)__name__
__module____qualname__classmethodr   r   r   r&   r+   r0   r9   r;   rA   rG   rL   rM   r   r   r   r   r      s    
	
r   c                   @   sH   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )TestBreadthLimitedSearchc                 C   s^   t  }t |g d t |g d || _t  }|ddg t |g d || _d S )Nr   r   r   r
   r   r4      )r         	   
   r   r   r
   )r   r   add_pathr   r   r/   )r   r   r/   r   r   r   r   P   s   
z$TestBreadthLimitedSearch.setup_classc                 C   sp   t tj| jdddddgddgdgdgd	ksJ d
d tj| jdddD }|dgdgddgdks6J d S )Nr   r
   r   depth_limitr   r   rU   r   rV   )r   r   r
   rU   c                 S   s   i | ]	\}}|t |qS r   )r!   ).0nsr   r   r   
<dictcomp>d   s    zGTestBreadthLimitedSearch.test_limited_bfs_successor.<locals>.<dictcomp>rW   )rV   r   rU   )r   r   r   r   r/   )r   resultr   r   r   test_limited_bfs_successor]   s    z3TestBreadthLimitedSearch.test_limited_bfs_successorc                 C   sX   t tj| jddddddddddksJ t tj| jddddddddks*J d S )	Nr   r
   r[   r   rU   )r   r   r
   r   rU   rV   rV   )r   r
   rV   rW   )r   r   r   r   r/   r   r   r   r   test_limited_bfs_predecessori   s   z5TestBreadthLimitedSearch.test_limited_bfs_predecessorc                 C   s.   t j| jddd}t| ddgksJ d S )Nr
   r   r[   )r
   r   r   )r   r    r   r!   r#   r$   r   r   r   test_limited_bfs_treey   s   z.TestBreadthLimitedSearch.test_limited_bfs_treec                 C   s*   t j| jddd}t|g dksJ d S )NrW   r   r[   ))rW   rV   )rW   rX   )rV   rU   )rU   r   r-   rY   r'   r*   r   r   r   test_limited_bfs_edges}   s   z/TestBreadthLimitedSearch.test_limited_bfs_edgesc              	   C   s   t ttj| jdgddgdgdgddgddgd	d
gddgdks$J t ttj| jdddgddgdgd
gdgdks@J d S )Nr   r<   r   r   r
   rU   r   rV   r4   rW   rT   rX   rS   )r   r   r   r
   r   )r   r>   r   r?   r   r/   r   r   r   r   test_limited_bfs_layers   s    	z0TestBreadthLimitedSearch.test_limited_bfs_layersc              	   C   s   t dhdhdhddhddhdd	hd
dhgD ]\}}t| jd||ks&J qt dhddhdhd	hdhgD ]\}}t| jd||ksFJ q6d S )Nr   r   r   r
   rU   r   rV   r4   rW   rT   rX   )r>   r   rH   r   r/   rI   r   r   r   $test_limited_descendants_at_distance   s   &&z=TestBreadthLimitedSearch.test_limited_descendants_at_distanceN)rN   rO   rP   rQ   r   rb   rc   rd   re   rf   rg   r   r   r   r   rR   O   s    
rR   )	functoolsr   rC   networkxr   r   rR   r   r   r   r   <module>   s
    G