o
    3ήc                     @   s*   d dl Z d dlZdd ZG dd dZdS )    Nc                    sJ  t |tsJ |d |ksJ |d |ksJ |d   |d   f}|d   |d   f}t|t|d |d  t|d |d   d ksKJ  fdd|D }|D ]"}d|d   kre| k shJ  J d|d   kru k sxJ  J qVt|d d |dd  D ]\}}t|d |d  t|d |d  fdv sJ qd S )Nr      c                    s$   g | ]}|d    |d    fqS )r    ).0ucr   _/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/shortest_paths/tests/test_unweighted.py
<listcomp>   s   $ z&validate_grid_path.<locals>.<listcomp>))r   r   )r   r   )
isinstancelistlenabszip)rr   stpr   vr   r   r	   validate_grid_path   s   8 ""2r   c                   @   s   e Zd Zedd Zdd Zejdd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d  Zd!S )"TestUnweightedPathc                 C   sH   ddl m} |tddddd| _td| _tjdt d| _d S )	Nr   )convert_node_labels_to_integers   r   sorted)first_labelordering   )create_using)	networkxr   nxgrid_2d_graphgridcycle_graphcycleDiGraphdirected_cycle)clscnltir   r   r	   setup_class   s   zTestUnweightedPath.setup_classc              
   C   s   t | jddg dksJ t | jddg dksJ tddddt | jdd t | jddg dks8J t | jdddgksEJ d S )Nr      r   r      r)   r   )r         r   r      )r   bidirectional_shortest_pathr#   r   r!   r%   selfr   r   r	    test_bidirectional_shortest_path   s   z3TestUnweightedPath.test_bidirectional_shortest_path)srctgt))   r)   )r)   r5   )r5   
   )r5   r5   c                 C   sT   t jtjd| d| dd t| j|| W d    d S 1 s#w   Y  d S )NzEither source z or target  is not in Gmatch)pytestraisesr   NodeNotFoundr/   r#   )r1   r3   r4   r   r   r	   5test_bidirectional_shortest_path_src_tgt_not_in_graph(   s   
"zHTestUnweightedPath.test_bidirectional_shortest_path_src_tgt_not_in_graphc                 C   s   t | jdddksJ t | jdddksJ t | jdddks$J t j| jdddddks2J t j| jdddddks@J t j| jdddddksNJ d S )	Nr   r)   r   r.   r-   r   T)weight)r   shortest_path_lengthr#   r!   r%   r0   r   r   r	   test_shortest_path_length8   s    z,TestUnweightedPath.test_shortest_path_lengthc                 C   sl   t | jd}|d g dksJ t | jd}|d g dks"J t j| jddd}|ddgiks4J d S )Nr)   r   r)   r   r-   r,   r   r*   cutoff)r   single_source_shortest_pathr%   r#   r1   r   r   r   r	    test_single_source_shortest_pathA   s   z3TestUnweightedPath.test_single_source_shortest_pathc                 C   sb   t j}dddddddd}t|| jd|ksJ dddddddd}t|| jd|ks/J d S )	Nr   r   r+   r)   r   r   r+   r)   r   r-   r,   r   r-   r,   )r   "single_source_shortest_path_lengthdictr#   r%   )r1   pllengthsr   r   r	   'test_single_source_shortest_path_lengthI   s
   z:TestUnweightedPath.test_single_source_shortest_path_lengthc                 C   s   t | jd}|d g dksJ t | jd}|d g dks"J t j| jddd}|ddgiks4J d}tjt jd| dd	 t | j| W d    d S 1 sUw   Y  d S )
Nr   r)   rA   )r)   r+   r   r   rB   r5   Target 	 not in Gr8   )r   single_target_shortest_pathr%   r#   r:   r;   r<   )r1   r   targetr   r   r	    test_single_target_shortest_pathP   s   "z3TestUnweightedPath.test_single_target_shortest_pathc                 C   s   t j}dddddddd}t|| jd|ksJ dddddddd}t|| jd|ks/J d	}tjt jd
| dd t | j| W d    d S 1 sPw   Y  d S )Nr   r   r+   r)   rG   r,   r-   r   r5   rM   r7   r8   )r   "single_target_shortest_path_lengthrI   r#   r%   r:   r;   r<   )r1   rJ   rK   rP   r   r   r	   'test_single_target_shortest_path_length\   s   "z:TestUnweightedPath.test_single_target_shortest_path_lengthc                 C   sT   t t| j}|d d g dksJ t t| j}tdddd|d d  d S )Nr   r)   r*   r   r   r.   )rI   r   all_pairs_shortest_pathr#   r!   r   rE   r   r   r	   test_all_pairs_shortest_pathg   s   z/TestUnweightedPath.test_all_pairs_shortest_pathc              	   C   sX   t t| j}|d ddddddddksJ t t| j}|d d dks*J d S )Nr   r   r+   r)   rG      r,   )rI   r   all_pairs_shortest_path_lengthr#   r!   )r1   lr   r   r	   #test_all_pairs_shortest_path_lengthm   s    z6TestUnweightedPath.test_all_pairs_shortest_path_lengthc                 C   sJ   t d}t |dg dgdgdgdksJ t |dddgks#J d S )Nr   r   r   r+   r*   r)   r   
path_graphpredecessor)r1   Gr   r   r	   test_predecessor_paths   s   
$z(TestUnweightedPath.test_predecessor_pathc                 C   sj   t d}t |d}|d g ksJ |d dgksJ |d ddgddgfv s*J |d dgks3J d S )Nr   r   r   r+   r)   )r   r"   r\   )r1   r]   predr   r   r	   test_predecessor_cyclex   s   
z)TestUnweightedPath.test_predecessor_cyclec                 C   s(   t d}t |dd}d|vsJ d S )Nr   r   r)   rZ   )r1   r]   r   r   r   r	   test_predecessor_cutoff   s   
z*TestUnweightedPath.test_predecessor_cutoffc                 C   s   t d}t |dd}|dgksJ t j|dddd}|g ks"J t j|dddd\}}|dgks4J |dks:J t j|ddddd\}}|g ksLJ |d	ksRJ d S )
Nr   r   r)   r+   rB   T)return_seen)rC   rb   r   rZ   )r1   r]   r   r   r   r   r	   test_predecessor_target   s   
z*TestUnweightedPath.test_predecessor_targetc                 C   sP   d}t jtjd| dd t| j| W d    d S 1 s!w   Y  d S )Nr5   zSource rN   r8   )r:   r;   r   r<   r\   r#   )r1   sourcer   r   r	   test_predecessor_missing_source   s   "z2TestUnweightedPath.test_predecessor_missing_sourceN)__name__
__module____qualname__classmethodr(   r2   r:   markparametrizer=   r@   rF   rL   rQ   rS   rU   rY   r^   r`   ra   rc   re   r   r   r   r	   r      s*    


		r   )r:   r   r   r   r   r   r   r   r	   <module>   s    