o
    3ήc]                     @   s^  d dl Z d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
mZ G 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d  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Z d/d0 Z!d1d2 Z"d3d4 Z#d5d6 Z$d7d8 Z%d9d: Z&d;d< Z'd=d> Z(d?d@ Z)dAdB Z*dCdD Z+dEdF Z,dGdH Z-dIdJ Z.dKdL Z/dMdN Z0dOdP Z1dQdR Z2dSdT Z3dUdV Z4dWdX Z5dYdZ Z6d[d\ Z7d]d^ Z8d_d` Z9dadb Z:dcdd Z;dedf Z<dgdh Z=didj Z>dkdl Z?dmdn Z@dodp ZAdqdr ZBdsdt ZCdudv ZDdwdx ZEdydz ZFd{d| ZGd}d~ ZHdd ZIdd ZJdd ZKdd ZLdd ZMdS )    N)convert_node_labels_to_integers)_bidirectional_dijkstra_bidirectional_shortest_path)arbitrary_elementpairwisec                   @   sp   e Zd Z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 )TestIsSimplePathz^Unit tests for the
    :func:`networkx.algorithms.simple_paths.is_simple_path` function.

    c                 C   s   t  }t |g rJ dS )zTests that the empty list is not a valid path, since there
        should be a one-to-one correspondence between paths as lists of
        nodes and paths as lists of edges.

        Nnxtrivial_graphis_simple_pathselfG r   R/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/tests/test_simple_paths.pytest_empty_list   s   z TestIsSimplePath.test_empty_listc                 C   s   t  }t |dgsJ dS )zlTests that the trivial path, a path of length one, is
        considered a simple path in a graph.

        r   Nr   r   r   r   r   test_trivial_path      z"TestIsSimplePath.test_trivial_pathc                 C   s   t  }t |dgrJ dS )zuTests that a list whose sole element is an object not in the
        graph is not considered a simple path.

        z
not a nodeNr   r   r   r   r   test_trivial_nonpath%   r   z%TestIsSimplePath.test_trivial_nonpathc                 C   s"   t d}t |ddgsJ d S )N   r      r	   
path_graphr   r   r   r   r   test_simple_path-      
z!TestIsSimplePath.test_simple_pathc                 C   "   t d}t |g drJ d S )Nr   )r   r   r   r   r   r   r   r   test_non_simple_path1   r   z%TestIsSimplePath.test_non_simple_pathc                 C   r   )N   r   r   r   r   )r	   cycle_graphr   r   r   r   r   
test_cycle5   r   zTestIsSimplePath.test_cyclec                 C   s"   t d}t |ddgrJ d S )Nr   r   r   r   r   r   r   test_missing_node9   r   z"TestIsSimplePath.test_missing_nodec                 C   s&   t ddg}t |g dsJ d S )Nr   r   r   r   r   r   r   r	   DiGraphr   r   r   r   r   test_directed_path=      z#TestIsSimplePath.test_directed_pathc                 C   s&   t ddg}t |g drJ d S )Nr"   r#   )r   r   r   r%   r   r   r   r   test_directed_non_pathA   r(   z'TestIsSimplePath.test_directed_non_pathc                 C   s&   t g d}t |g drJ d S )N)r"   r#   )r   r   r   r%   r   r   r   r   test_directed_cycleE   r(   z$TestIsSimplePath.test_directed_cyclec                 C   s&   t ddg}t |ddgsJ d S )Nr"   r   r   )r	   
MultiGraphr   r   r   r   r   test_multigraphI   r(   z TestIsSimplePath.test_multigraphc                 C   s&   t g d}t |ddgsJ d S )N)r"   r"   r   r   r-   r   r   )r	   MultiDiGraphr   r   r   r   r   test_multidigraphM   r(   z"TestIsSimplePath.test_multidigraphN)__name__
__module____qualname____doc__r   r   r   r   r   r    r!   r'   r)   r*   r,   r/   r   r   r   r   r      s    	r   c                  C   4   t d} t | dd}dd |D dhksJ d S )N   r   r   c                 S      h | ]}t |qS r   tuple.0pr   r   r   	<setcomp>V       z(test_all_simple_paths.<locals>.<setcomp>r   r   r   r   r	   r   all_simple_pathsr   pathsr   r   r   test_all_simple_pathsS      
rC   c                  C   F   t d} | dd t | dddg}dd |D ddhks!J d S )	Nr5   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   ]   r=   zItest_all_simple_paths_with_two_targets_emits_two_paths.<locals>.<setcomp>r>   r   r   r   r5   r	   r   add_edger@   rA   r   r   r   6test_all_simple_paths_with_two_targets_emits_two_pathsY   s   
rI   c                  C   N   t jdt  d} | dd t | dddg}dd |D dd	hks%J d S )
Nr5   create_usingr   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   d   r=   zQtest_digraph_all_simple_paths_with_two_targets_emits_two_paths.<locals>.<setcomp>r>   rF   r	   r   r&   rH   r@   rA   r   r   r   >test_digraph_all_simple_paths_with_two_targets_emits_two_paths`      rN   c                  C   J   t d} | dd t j| dddgdd}dd |D dd	hks#J d S )
Nr5   r   r   r   cutoffc                 S   r6   r   r7   r9   r   r   r   r<   k   r=   z@test_all_simple_paths_with_two_targets_cutoff.<locals>.<setcomp>r>   rF   rG   rA   r   r   r   -test_all_simple_paths_with_two_targets_cutoffg   s   
rS   c                  C   R   t jdt  d} | dd t j| dddgdd}dd |D d	d
hks'J d S )Nr5   rK   r   r   r   rQ   c                 S   r6   r   r7   r9   r   r   r   r<   r   r=   zHtest_digraph_all_simple_paths_with_two_targets_cutoff.<locals>.<setcomp>r>   rF   rM   rA   r   r   r   5test_digraph_all_simple_paths_with_two_targets_cutoffn   s   rU   c                  C   :   t d} t | dddg}dd |D ddhksJ d S )	Nr5   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   x   r=   zQtest_all_simple_paths_with_two_targets_in_line_emits_two_paths.<locals>.<setcomp>r$   r>   r?   rA   r   r   r   >test_all_simple_paths_with_two_targets_in_line_emits_two_pathsu      
rW   c                  C   H   t jdt  d} | dd t | dd}dd |D dhks"J d S )Nr   rK   r   r   c                 S   r6   r   r7   r9   r   r   r   r<      r=   z6test_all_simple_paths_ignores_cycle.<locals>.<setcomp>r   r   r   r	   r   r&   rH   r@   rA   r   r   r   #test_all_simple_paths_ignores_cycle{      r\   c                  C   rJ   )
Nr   rK   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<      r=   zVtest_all_simple_paths_with_two_targets_inside_cycle_emits_two_paths.<locals>.<setcomp>r$   rZ   r[   rA   r   r   r   Ctest_all_simple_paths_with_two_targets_inside_cycle_emits_two_paths   rO   r^   c                  C   ,   t d} t | dd}t|g ksJ d S Nr5   r   r	   r   r@   listrA   r   r   r   #test_all_simple_paths_source_target      
rc   c                  C   d   t d} t j| dddd}dd |D dhksJ t j| dddd}d	d |D h d
ks0J d S )Nr5   r   r   rQ   c                 S   r6   r   r7   r9   r   r   r   r<      r=   z/test_all_simple_paths_cutoff.<locals>.<setcomp>r"   r   c                 S   r6   r   r7   r9   r   r   r   r<      r=   >   r   r   r   r   r   r   r"   )r	   complete_graphr@   rA   r   r   r   test_all_simple_paths_cutoff   
   
ri   c                  C      t jdt  d} | g d t | dddg}dd |D h d	ks&J t j| dddgdd
}dd |D h dks>J t j| dddgdd
}dd |D h dksVJ dS )=you may need to draw this graph to make sure it is reasonable   rK   )r   rm   r   rm   r   r   rm   r5   r5   r   r5   r   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<      r=   z=test_all_simple_paths_on_non_trivial_graph.<locals>.<setcomp>>   r   rm   r5   r   r   r#   rp   r   r   r   r   r   r5   r   r   rm   r5   r   r   rm   r5   r   rQ   c                 S   r6   r   r7   r9   r   r   r   r<      r=   >   r#   rp   ru   rv   rw   rx   c                 S   r6   r   r7   r9   r   r   r   r<      r=   >   r#   rp   ru   N)r	   r   r&   add_edges_fromr@   rA   r   r   r   *test_all_simple_paths_on_non_trivial_graph      	rz   c                  C   |   t ddg} t | dd}t|g ksJ t | g d tt | dd}t|dks/J dd |D h dks<J d S )	Nr#   r   r   r   
   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<      r=   z3test_all_simple_paths_multigraph.<locals>.<setcomp>>   r   r~   r   r#   )r	   r+   r@   rb   add_pathlenrA   r   r   r    test_all_simple_paths_multigraph      r   c                  C   sR   t g d} tt j| dddd}t|dksJ dd |D ddhks'J d S )Nr#   r#   )r   r~   )r~   r   r   r   rQ   c                 S   r6   r   r7   r9   r   r   r   r<      r=   z?test_all_simple_paths_multigraph_with_cutoff.<locals>.<setcomp>r#   )r	   r+   rb   r@   r   rA   r   r   r   ,test_all_simple_paths_multigraph_with_cutoff      r   c                  C   sR   t  } t | g d t | g d t | dd}dd |D dhks'J d S )Nru   r   r   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<      r=   z1test_all_simple_paths_directed.<locals>.<setcomp>)r	   r&   r   r@   rA   r   r   r   test_all_simple_paths_directed   
   r   c                  C   0   t d} t j| dddd}t|g ksJ d S Nr5   r   r   r   rQ   ra   rA   r   r   r   test_all_simple_paths_empty      
r   c                   C   f   t ttdddg ksJ t ttdddg ks J t ttddddg ks1J d S Nr   r   r   	      )rb   r	   r@   empty_graphr   r   r   r   r   "test_all_simple_paths_corner_cases        &r   c                 c   sX    t | }t| | |h }t| }|D ]}t| ||D ]}t||kr(|V  qqd S N)r   setr   r	   r@   r   source	neighborsntargetpathr   r   r   hamiltonian_path   s   r   c                  C   sZ   ddl m}  td}dd t|dD }dd | g ddD }t|t|ks+J d S )	Nr   permutationsr5   c                 S      g | ]}t |qS r   rb   r9   r   r   r   
<listcomp>   r=   z)test_hamiltonian_path.<locals>.<listcomp>c                 S   s   g | ]	}d gt | qS r   r   r9   r   r   r   r      s    ru   r   )	itertoolsr   r	   rh   r   sortedr   r   rB   exactr   r   r   test_hamiltonian_path   s
   
r   c                  C   l   t d} t j| dddd}tdd |D g ksJ t jt | dddd}tdd |D g ks4J d S )Nr5   r   r   rQ   c                 s       | ]}t |V  qd S r   r   r9   r   r   r   	<genexpr>       z#test_cutoff_zero.<locals>.<genexpr>c                 s   r   r   r   r9   r   r   r   r      r   )r	   rh   r@   rb   r+   rA   r   r   r   test_cutoff_zero   
   
r   c                  C   b   t tj! t } t| g d ttt| dd W d    d S 1 s*w   Y  d S Nru   r   r   	pytestraisesr	   NodeNotFoundGraphr   rb   r@   r+   r   r   r   r   test_source_missing   
   "r   c                  C   r   Nru   r   r5   r   r   r   r   r   test_target_missing   r   r   c                  C   r4   )Nr5   r   r   c                 S   r6   r   r7   r9   r   r   r   r<     r=   z-test_all_simple_edge_paths.<locals>.<setcomp>r"   r#   r   r   r	   r   all_simple_edge_pathsrA   r   r   r   test_all_simple_edge_paths  rD   r   c                  C   rE   )	Nr5   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<     r=   zNtest_all_simple_edge_paths_with_two_targets_emits_two_paths.<locals>.<setcomp>r   r"   r#   )r   r5   r	   r   rH   r   rA   r   r   r   ;test_all_simple_edge_paths_with_two_targets_emits_two_paths  s   
r   c                  C   rJ   )
Nr5   rK   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<     r=   zVtest_digraph_all_simple_edge_paths_with_two_targets_emits_two_paths.<locals>.<setcomp>r   r   r	   r   r&   rH   r   rA   r   r   r   Ctest_digraph_all_simple_edge_paths_with_two_targets_emits_two_paths  s   r   c                  C   rP   )
Nr5   r   r   r   rQ   c                 S   r6   r   r7   r9   r   r   r   r<     r=   zEtest_all_simple_edge_paths_with_two_targets_cutoff.<locals>.<setcomp>r   r   r   rA   r   r   r   2test_all_simple_edge_paths_with_two_targets_cutoff  s   
r   c                  C   rT   )Nr5   rK   r   r   r   rQ   c                 S   r6   r   r7   r9   r   r   r   r<   )  r=   zMtest_digraph_all_simple_edge_paths_with_two_targets_cutoff.<locals>.<setcomp>r   r   r   rA   r   r   r   :test_digraph_all_simple_edge_paths_with_two_targets_cutoff%  s   r   c                  C   rV   )	Nr5   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   2  r=   zVtest_all_simple_edge_paths_with_two_targets_in_line_emits_two_paths.<locals>.<setcomp>r"   r#   r   r   rA   r   r   r   Ctest_all_simple_edge_paths_with_two_targets_in_line_emits_two_paths/  rX   r   c                  C   rY   )Nr   rK   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   9  r=   z;test_all_simple_edge_paths_ignores_cycle.<locals>.<setcomp>r"   rp   r	   r   r&   rH   r   rA   r   r   r   (test_all_simple_edge_paths_ignores_cycle5  r]   r   c                  C   rJ   )
Nr   rK   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   @  r=   z[test_all_simple_edge_paths_with_two_targets_inside_cycle_emits_two_paths.<locals>.<setcomp>r   r   r   rA   r   r   r   Htest_all_simple_edge_paths_with_two_targets_inside_cycle_emits_two_paths<  rO   r   c                  C   r_   r`   r	   r   r   rb   rA   r   r   r   (test_all_simple_edge_paths_source_targetC  rd   r   c                  C   re   )Nr5   r   r   rQ   c                 S   r6   r   r7   r9   r   r   r   r<   L  r=   z4test_all_simple_edge_paths_cutoff.<locals>.<setcomp>r"   r   c                 S   r6   r   r7   r9   r   r   r   r<   N  r=   >   )r   r   r   r   )r   r   )r   r   r   )r	   rh   r   rA   r   r   r   !test_all_simple_edge_paths_cutoffI  rj   r   c                  C   rk   )rl   rm   rK   rn   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   V  r=   zBtest_all_simple_edge_paths_on_non_trivial_graph.<locals>.<setcomp>>   ro   rq   rr   r   r#   rp   r#   r   rp   )r   r5   rr   ro   rq   rr   ro   rq   rs   rQ   c                 S   r6   r   r7   r9   r   r   r   r<   `  r=   >   r   r   r   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   i  r=   >   r   r   r   N)r	   r   r&   ry   r   rA   r   r   r   /test_all_simple_edge_paths_on_non_trivial_graphQ  r{   r   c                  C   r|   )	Nr#   r   r}   r   r   c                 S   r6   r   r7   r9   r   r   r   r<   s  r=   z8test_all_simple_edge_paths_multigraph.<locals>.<setcomp>>   )r   r~   r   )r~   r   r   )r   r   r   )r   r   r   )r	   r+   r   rb   r   r   rA   r   r   r   %test_all_simple_edge_paths_multigraphl  r   r   c                  C   sR   t g d} tt j| dddd}t|dksJ dd |D ddhks'J d S )	Nr   r   r   rQ   c                 S   r6   r   r7   r9   r   r   r   r<   ~  r=   zDtest_all_simple_edge_paths_multigraph_with_cutoff.<locals>.<setcomp>r   r   )r	   r+   rb   r   r   rA   r   r   r   1test_all_simple_edge_paths_multigraph_with_cutoffz  r   r   c                  C   sR   t  } t | g d t | g d t | dd}dd |D dhks'J d S )Nru   r   r   r   c                 S   r6   r   r7   r9   r   r   r   r<     r=   z6test_all_simple_edge_paths_directed.<locals>.<setcomp>r   )r	   r&   r   r   rA   r   r   r   #test_all_simple_edge_paths_directed  r   r   c                  C   r   r   r   rA   r   r   r    test_all_simple_edge_paths_empty  r   r   c                   C   r   r   )rb   r	   r   r   r   r   r   r   r   'test_all_simple_edge_paths_corner_cases  r   r   c                 c   s\    t | }t| | |h }t| }|D ]}t| ||D ]}t||d kr*|V  qqd S Nr   )r   r   r   r	   r   r   r   r   r   hamiltonian_edge_path  s   r   c                  C   sZ   ddl m}  td}t|d}dd | g ddD }t|dd t|D ks+J d S )	Nr   r   r5   c                 S   s"   g | ]}t td gt | qS r   )rb   r   r9   r   r   r   r        " z/test_hamiltonian__edge_path.<locals>.<listcomp>ru   r   c                 S      g | ]}|qS r   r   r9   r   r   r   r         )r   r   r	   rh   r   r   r   r   r   r   test_hamiltonian__edge_path  s
   

"r   c                  C   r   )Nr5   r   r   rQ   c                 s   r   r   r   r9   r   r   r   r     r   z(test_edge_cutoff_zero.<locals>.<genexpr>c                 s   r   r   r   r9   r   r   r   r     r   )r	   rh   r   rb   r+   rA   r   r   r   test_edge_cutoff_zero  r   r   c                  C   r   r   	r   r   r	   r   r   r   rb   r   r+   r   r   r   r   test_edge_source_missing  r   r   c                  C   r   r   r   r   r   r   r   test_edge_target_missing  r   r   c                  C   s   t tddddd} t| dd}t|g dksJ t|g dks&J dd	 t| ddD td
d t| ddD ksBJ d S )Nr5   r   r   first_labelordering   r   r   r   r5   r   r   r   rm         r   r   c                 S   r   r   r   r:   r   r   r   r   r     r=   z.test_shortest_simple_paths.<locals>.<listcomp>c                 s   r   r   r   r   r   r   r   r     s    
z-test_shortest_simple_paths.<locals>.<genexpr>cnltir	   grid_2d_graphshortest_simple_pathsnextr   r@   rA   r   r   r   test_shortest_simple_paths  s   r   c                  C   s@   t jdt  d} t | dd}dd |D g dgksJ d S )Nr   rK   r   r   c                 S   r   r   r   r   r   r   r   r     r   z7test_shortest_simple_paths_directed.<locals>.<listcomp>r>   r	   r   r&   r   rA   r   r   r   #test_shortest_simple_paths_directed  s    r   c                  C   s   dd } t tddddd}t|dd}t|g dks J t|g d	ks*J d
d tj|dd| dD tdd t|ddD ksHJ d S )Nc                 S      dS r   r   uvxr   r   r   cost     zFtest_shortest_simple_paths_directed_with_weight_fucntion.<locals>.costr5   r   r   r   r   r   r   c                 S   r   r   r   r   r   r   r   r     s    zLtest_shortest_simple_paths_directed_with_weight_fucntion.<locals>.<listcomp>weightc                 s   r   r   r   r   r   r   r   r     r   zKtest_shortest_simple_paths_directed_with_weight_fucntion.<locals>.<genexpr>r   r  r   rB   r   r   r   8test_shortest_simple_paths_directed_with_weight_fucntion  s   r
  c                  C   sL   dd } t jdt  d}t j|dd| d}dd	 |D g d
gks$J d S )Nc                 S   r   r   r   r  r   r   r   r    r  z=test_shortest_simple_paths_with_weight_fucntion.<locals>.costr   rK   r   r   r  c                 S   r   r   r   r   r   r   r   r     r   zCtest_shortest_simple_paths_with_weight_fucntion.<locals>.<listcomp>r>   r   r	  r   r   r   /test_shortest_simple_paths_with_weight_fucntion  s    r  c                  C   s   t  } | g d | jdddddd | jddd	d
dd | jdddddd | jdddddd | jdddddd | jdddddd g dg dg dg}tt j| dddd}||kscJ d S )N)N0N1N2N3N4r  r  g      $@2   L5)r  capacitynamer  g      @(   L4-   L1r  L0r  g      (@   L2g      .@*   L3)r  r  r  )r  r  r  )r  r  r  r  r  r  )r	   r   add_nodes_fromrH   rb   r   )g1solutionresultr   r   r   test_Greg_Bernstein  s   r"  c                     sn    fdd} t d dd   D }t  |d d}t j dddd	D ]}| |}||ks2J |}q&d S )
Nc                    $   t  fddt| | dd  D S )Nc                 3   &    | ]\}} j | | d  V  qdS r  Nadjr:   r  r  r   r   r   r        $ zHtest_weighted_shortest_simple_path.<locals>.cost_func.<locals>.<genexpr>r   sumzipr   r   r   r   	cost_func     $z5test_weighted_shortest_simple_path.<locals>.cost_funcrm   c                 S   "   i | ]\}}||ft d dqS r   d   randomrandintr(  r   r   r   
<dictcomp>  r   z6test_weighted_shortest_simple_path.<locals>.<dictcomp>r  r   r   r  )r	   rh   edgesset_edge_attributesr   r.  r  r  r   	this_costr   r   r   "test_weighted_shortest_simple_path  s   
r;  c                     sv    fdd} t d    dd   D }t  |d d}t j dddd	D ]}| |}||ks6J |}q*d S )
Nc                    r#  )Nc                 3   r$  r%  r&  r(  r   r   r   r     r)  zQtest_directed_weighted_shortest_simple_path.<locals>.cost_func.<locals>.<genexpr>r   r*  r-  r   r   r   r.    r/  z>test_directed_weighted_shortest_simple_path.<locals>.cost_funcrm   c                 S   r0  r1  r3  r(  r   r   r   r6    r   z?test_directed_weighted_shortest_simple_path.<locals>.<dictcomp>r  r   r   r  )r	   rh   to_directedr7  r8  r   r9  r   r   r   +test_directed_weighted_shortest_simple_path  s   
r=  c                  C      t  } | jdddd | jdddd | jdddd | jdddd tt j| ddddddgg d	gks9J t  } | jddd
d | jdddd | jdddd | jdddd tt j| ddddg d	ddggksrJ d S NINOUTr   r  Ar   Br  )r@  rC  rA  r~   )r	   r   rH   rb   r   r   r   r   r   ,test_weighted_shortest_simple_path_issue2427  $   
rD  c                  C   r>  r?  )r	   r&   rH   rb   r   r   r   r   r   5test_directed_weighted_shortest_simple_path_issue2427%  rE  rF  c                  C   sn   t d} t | dd t | dd d| jd d d< tt j| dddd}g d	g d
g}||ks5J d S )Nr   r   r  foor   r   r   r  r   r   rm   r5   r   r>   )r	   r   r8  r'  rb   r   )r   rB   r   r   r   r   test_weight_name:  s   
rI  c                  C   \   t tj t } t| g d tt| dd W d    d S 1 s'w   Y  d S r   r   r   r	   r   r   r   rb   r   r   r   r   r   test_ssp_source_missingD  
   "rL  c                  C   rJ  r   rK  r   r   r   r   test_ssp_target_missingK  rM  rN  c                  C   rJ  r   )r   r   r	   NetworkXNotImplementedr+   r   rb   r   r   r   r   r   test_ssp_multigraphR  rM  rP  c                  C   sl   t tj& t } t| g d t| g d tt| dd W d    d S 1 s/w   Y  d S )Nr$   r   r5   rm   r   r   )r   r   r	   NetworkXNoPathr   r   rb   r   r   r   r   r   test_ssp_source_missing2Y  s   "rS  c                  C   sT   t d} t| dd\}}|g dksJ t| dddgd\}}|g dks(J d S )Nr   r   r   r>   r   ignore_nodesrH  )r	   r   r   )cyclelengthr   r   r   r   1test_bidirectional_shortest_path_restricted_cyclea  s
   
rX  c                  C   s   t d} t| dd\}}|g dg dfv sJ t| dddgd\}}|g dks,J t| ddddgd\}}|g d	ks@J t| ddg d
d\}}|g dg d	fv sXJ d S )Nr   r   r   )r   r   r   ru   r   rT  r   rx   )r-   )rm   r   r   ignore_edges)r   r   r   r   )r	   wheel_graphr   )wheelrW  r   r   r   r   1test_bidirectional_shortest_path_restricted_wheeli  s   

r]  c                  C   s   t jdt  d} t| dd\}}|g dksJ tjt jt| dddgd t| dddgd	\}}|g dks9J tjt jt| ddd
gd	 d S )Nr   rK   r   r   r>   r   rT  r   rY  r#   )r	   r   r&   r   r   r   rR  )directed_cyclerW  r   r   r   r   :test_bidirectional_shortest_path_restricted_directed_cyclew  s.   


r_  c                  C   s   t  } t | ddg t | ddg t | ddg tjt jt| dddgd tjt jt| dddgd t  } t | ddg t | ddg t | ddg tjt jt| ddddgd d S )Nr   r   r   r5   rT  )r	   r   r   r   r   rR  r   r   r   r   r   'test_bidirectional_shortest_path_ignore  s"   
r`  c                    sX   |d |ksJ |d |ksJ |t  fddt|d d |dd  D ks*J d S )Nr   c                 3   s(    | ]\}} | |  d dV  qdS )r  r   N)getr(  r   r   r   r     s    
z validate_path.<locals>.<genexpr>r   r*  )r   stsoln_lenr   r   r   r   validate_path  s
   rf  c                 C   s    ||ksJ t | |||| d S r   )rf  )r   rc  rd  re  rW  r   r   r   r   validate_length_path  s   rg  c               	   C   sX  t  } | g d t  }|g dg dg dg dg dg dg t| dd	d
gt| dd	R   t| dd	dgt| dd	dgdR   t| dd	dgt| dd	dgdR   tjt jt| dd	dgdgd t|dddgt|ddR   t|dddgt|dddgdR   t|dddgt|dddgdR   tjt jt|dddgdgd d S )N)
)rc  r  r~   )rc  r  rm   )r  r  r   )r  r  r   )r  yr   )r  r  r   )r  r  rm   )r  rh  r   )rh  rc  r   )rh  r  r   r$   )r   r   r   )r   r   r   rQ  )r5   rm   r   )rm   r   r~   rc  r  r   r~   r  rT     )rc  r  rY  )rU  rZ  r   r         r   r   rq   )	r	   r&   add_weighted_edges_fromr   rg  r   r   r   rR  )XGXG3r   r   r   %test_bidirectional_dijksta_restricted  sf   &	
ro  c                  C   sf   t tj# t } t| g d t| g d t| dd W d    d S 1 s,w   Y  d S )Nru   )r5   rm   r   r   r   )r   r   r	   rR  r   r   r   r   r   r   r   #test_bidirectional_dijkstra_no_path  s   "rp  c                  C   s|   t  } t | g d t | g d tjt jt| dddgd tjt jt| dddgd tjt jt| ddddgd d S )N)r   r   r~   )r   r   r~   r   r   rT  )r	   r   r   r   r   rR  r   r   r   r   r   "test_bidirectional_dijkstra_ignore  s   
rq  )Nr4  r   networkxr	   r   r    networkx.algorithms.simple_pathsr   r   networkx.utilsr   r   r   rC   rI   rN   rS   rU   rW   r\   r^   rc   ri   rz   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=  rD  rF  rI  rL  rN  rP  rS  rX  r]  r_  r`  rf  rg  ro  rp  rq  r   r   r   r   <module>   s    E

	




	
	
;