
    Vh]b                         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      Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d# Z)d$ Z*d% Z+d& Z,d' Z-d( Z.d) Z/d* Z0d+ Z1d, Z2d- Z3d. Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<d7 Z=d8 Z>d9 Z?d: Z@d; ZAd< ZBd= ZCd> ZDd? ZEd@ ZFdA ZGdB ZHdC ZIdD ZJdE ZKdF ZLdG ZMdH ZNdI ZOdJ ZPdK ZQdL ZRy)M    N)convert_node_labels_to_integers)_bidirectional_dijkstra_bidirectional_shortest_path)arbitrary_elementpairwisec                   ^    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)TestIsSimplePathz^Unit tests for the
    :func:`networkx.algorithms.simple_paths.is_simple_path` function.

    c                 \    t        j                         }t        j                  |g       rJ y)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Gs     [/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/tests/test_simple_paths.pytest_empty_listz TestIsSimplePath.test_empty_list   s+     $$Q++++    c                 ^    t        j                         }t        j                  |dg      sJ y)zlTests that the trivial path, a path of length one, is
        considered a simple path in a graph.

        r   Nr   r   s     r   test_trivial_pathz"TestIsSimplePath.test_trivial_path   s*    
   QC(((r   c                 ^    t        j                         }t        j                  |dg      rJ y)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   s     r   test_trivial_nonpathz%TestIsSimplePath.test_trivial_nonpath%   s-    
 $$Q7777r   c                 b    t        j                  d      }t        j                  |ddg      sJ y )N   r      r   
path_graphr   r   s     r   test_simple_pathz!TestIsSimplePath.test_simple_path-   s*    MM!  QF+++r   c                 b    t        j                  d      }t        j                  |g d      rJ y )Nr   )r   r   r   r   r   s     r   test_non_simple_pathz%TestIsSimplePath.test_non_simple_path1   s)    MM!$$Q	2222r   c                 b    t        j                  d      }t        j                  |g d      rJ y )N   r   r   r   r   )r   cycle_graphr   r   s     r   
test_cyclezTestIsSimplePath.test_cycle5   s)    NN1$$Q5555r   c                 b    t        j                  d      }t        j                  |ddg      rJ y Nr   r   r   r   s     r   test_missing_nodez"TestIsSimplePath.test_missing_node9   -    MM!$$QA////r   c                 b    t        j                  d      }t        j                  |ddg      rJ y r'   r   r   s     r   test_missing_starting_nodez+TestIsSimplePath.test_missing_starting_node=   r)   r   c                 f    t        j                  ddg      }t        j                  |g d      sJ y )Nr   r   r   r   r   r   r   r   DiGraphr   r   s     r   test_directed_pathz#TestIsSimplePath.test_directed_pathA   s+    JJ'(  I...r   c                 f    t        j                  ddg      }t        j                  |g d      rJ y )Nr-   r.   )r   r   r   r0   r   s     r   test_directed_non_pathz'TestIsSimplePath.test_directed_non_pathE   s.    JJ'($$Q	2222r   c                 f    t        j                  g d      }t        j                  |g d      rJ y )N)r-   r.   )r   r   r#   r0   r   s     r   test_directed_cyclez$TestIsSimplePath.test_directed_cycleI   s*    JJ/0$$Q5555r   c                 f    t        j                  ddg      }t        j                  |ddg      sJ y )Nr-   r   r   )r   
MultiGraphr   r   s     r   test_multigraphz TestIsSimplePath.test_multigraphM   s/    MM66*+  QF+++r   c                 f    t        j                  g d      }t        j                  |ddg      sJ y )N)r-   r-   r   r   r;   r   r   )r   MultiDiGraphr   r   s     r   test_multidigraphz"TestIsSimplePath.test_multidigraphQ   s+    OO<=  QF+++r   N)__name__
__module____qualname____doc__r   r   r   r   r    r%   r(   r+   r2   r4   r6   r9   r=    r   r   r	   r	      sH    
,)8,3600/36,,r   r	   c                      t        j                  d      } t        j                  | dd      }|D ch c]  }t        |       c}dhk(  sJ y c c}w )N   r   r"   r   r   r   r"   r   r   all_simple_pathstupler   pathsps      r   test_all_simple_pathsrL   W   sF    
aA1a(E#$E!H$666$   Ac                      t        j                  d      } | j                  dd       t        j                  | dddg      }|D ch c]  }t	        |       c}ddhk(  sJ y c c}w )NrD   r   r   r"   rE   r   r   r   rD   r   r   add_edgerG   rH   rI   s      r   6test_all_simple_paths_with_two_targets_emits_two_pathsrR   ]   s[    
aAJJq!1q!f-E#$E!H$|(DDDD$   A"c                      t        j                  dt        j                               } | j                  dd       t        j                  | dddg      }|D ch c]  }t        |       c}ddhk(  sJ y c c}w )NrD   create_usingr   r   r"   rE   rO   r   r   r1   rQ   rG   rH   rI   s      r   >test_digraph_all_simple_paths_with_two_targets_emits_two_pathsrX   d   sc    
abjjl3AJJq!1q!f-E#$E!H$|(DDDD$   A6c                      t        j                  d      } | j                  dd       t        j                  | dddgd      }|D ch c]  }t	        |       c}ddhk(  sJ y c c}w )NrD   r   r   r"   cutoffrE   rO   rP   rI   s      r   -test_all_simple_paths_with_two_targets_cutoffr]   k   s]    
aAJJq!1q!fQ7E#$E!H$|(DDDD$   A$c                      t        j                  dt        j                               } | j                  dd       t        j                  | dddgd      }|D ch c]  }t        |       c}ddhk(  sJ y c c}w )	NrD   rU   r   r   r"   r[   rE   rO   rW   rI   s      r   5test_digraph_all_simple_paths_with_two_targets_cutoffr`   r   se    
abjjl3AJJq!1q!fQ7E#$E!H$|(DDDD$   A8c                      t        j                  d      } t        j                  | dddg      }|D ch c]  }t        |       c}ddhk(  sJ y c c}w )NrD   r   r   r"   r/   rE   rF   rI   s      r   >test_all_simple_paths_with_two_targets_in_line_emits_two_pathsrc   y   sM    
aA1q!f-E#$E!H$L(AAAA$   Ac                      t        j                  dt        j                               } | j                  dd       t        j                  | dd      }|D ch c]  }t        |       c}dhk(  sJ y c c}w )Nr"   rU   r   r   r   r   r"   r   r$   r1   rQ   rG   rH   rI   s      r   #test_all_simple_paths_ignores_cyclerh      s\    
qrzz|4AJJq!1a(E#$E!H$333$   A3c                      t        j                  dt        j                               } | j                  dd       t        j                  | dddg      }|D ch c]  }t        |       c}ddhk(  sJ y c c}w )Nr"   rU   r   r   r   r/   rf   rg   rI   s      r   Ctest_all_simple_paths_with_two_targets_inside_cycle_emits_two_pathsrk      sc    
qrzz|4AJJq!1q!f-E#$E!H$I(>>>>$rY   c                  |    t        j                  d      } t        t        j                  | dd            dggk(  sJ y NrD   r   r   r   listrG   r   s    r   #test_all_simple_paths_source_targetrq      s6    
aA##Aq!,-1#666r   c                  $   t        j                  d      } t        j                  | ddd      }|D ch c]  }t        |       c}dhk(  sJ t        j                  | ddd      }|D ch c]  }t        |       c}h dk(  sJ y c c}w c c}w )NrD   r   r   r[   r-   r   >   r   r   r   r   r"   r   r-   )r   complete_graphrG   rH   rI   s      r   test_all_simple_paths_cutoffrv      s    
!A1a2E#$E!H$0001a2E#$E!H$(FFFF %$   B+Bc                     t        j                  dt        j                               } | j                  g d       t        j                  | dddg      }|D ch c]  }t        |       c}h dk(  sJ t        j                  | dddgd      }|D ch c]  }t        |       c}h d	k(  sJ t        j                  | dddgd      }|D ch c]  }t        |       c}h d
k(  sJ yc c}w c c}w c c}w )=you may need to draw this graph to make sure it is reasonable   rU   )r   rz   r   rz   r   r"   rz   rD   rD   r   rD   r"   r   r   r"   >   r   rz   rD   r   r"   r.   r}   r   r   r"   r   r"   rD   r   r   rz   rD   r   r   rz   rD   r"   r[   >   r.   r}   r   r   r   r   >   r.   r}   r   N)r   r   r1   add_edges_fromrG   rH   rI   s      r   *test_all_simple_paths_on_non_trivial_graphr      s    
abjjl3AEF1q!f-E#$E!H$ )    1q!fQ7E#$E!H$ )    1q!fQ7E#$E!H$(CCCC' % % %   C-C2C7c                  Z   t        j                  ddg      } t        t        j                  | dd            dggk(  sJ t        j                  | g d       t        t        j                  | dd            }t        |      dk(  sJ |D ch c]  }t        |       c}h dk(  sJ y c c}w )Nr.   r   r"   r   
   r   r   r"   >   r   r   r   r.   )r   r8   ro   rG   add_pathlenrH   rI   s      r    test_all_simple_paths_multigraphr      s    
vv&'A##Aq!,-1#666KK=!$$Q1-.Eu:??#$E!H$(DDDD$s   B(c                  l   t        j                  g d      } t        t        j                  | ddd            }t	        |      dk(  sJ |D ch c]  }t        |       c}ddhk(  sJ t        j                  ddg      } t        t        j                  | dddhd            ddgddggk(  sJ y c c}w )	Nr.   r.   )r   r   )r   r   r   r   r[   r.   r-   r   r   r   )r   r8   ro   rG   r   rH   rI   s      r   ,test_all_simple_paths_multigraph_with_cutoffr      s    
89A$$Q1Q78Eu:??#$E!H$(8888 	vv&'A##Aq1a&;<!Q!Q@PPPP	 %s   B1c                     t        j                         } t        j                  | g d       t        j                  | g d       t        j                  | dd      }|D ch c]  }t	        |       c}dhk(  sJ y c c}w )Nr   r"   r   r   r   r"   )r   r1   r   rG   rH   rI   s      r   test_all_simple_paths_directedr      s_    


AKK9KK91a(E#$E!H$333$    A<c                      t        j                  d      } t        j                  | ddd      }t        |      g k(  sJ y NrD   r   r"   r   r[   )r   r   rG   ro   r   rJ   s     r   test_all_simple_paths_emptyr      s8    
aA1a2E;"r   c                  Z   t        t        j                  t        j                  d      dd            dggk(  sJ t        t        j                  t        j                  d      dd            g k(  sJ t        t        j                  t        j                  d      ddd            g k(  sJ y Nr   r   r   	      )ro   r   rG   empty_graphr   rB   r   r   "test_all_simple_paths_corner_casesr      s    ##BNN1$5q!<=1#FFF##BNN1$5q!<=CCC##BMM!$4aA>?2EEEr   c                      t        j                  d      } t        t        j                  | dh d            dgddgg dgk(  sJ y )Nr"   r   >   r   r   r   r   r/   rn   rp   s    r   'test_all_simple_paths_source_in_targetsr      s?    
aA##Aq)451#1vy9QQQQr   c              #      K   t        |       }t        | |         |hz
  }t        |       }|D ]1  }t        j                  | ||      D ]  }t        |      |k(  s|  3 y wN)r   setr   r   rG   r   source	neighborsntargetpaths         r   hamiltonian_pathr      sj     q!FAfI&)IAA ''66: 	D4yA~
	s   AA"	A"c                     ddl m}  t        j                  d      }t	        |d      D cg c]  }t        |       }} | g dd      D cg c]  }dgt        |      z    }}t        |      t        |      k(  sJ y c c}w c c}w Nr   )permutationsrD   r   r"   )	itertoolsr   r   ru   r   ro   sorted)r   r   rK   rJ   exacts        r   test_hamiltonian_pathr      su    &
!A.q!45T!W5E5$0A$>?qaS47]?E?%=F5M))) 6?s   A=Bc                  D   t        j                  d      } t        j                  | ddd      }|D cg c]  }t        |       c}g k(  sJ t        j                  t        j                  |       ddd      }|D cg c]  }t        |       c}g k(  sJ y c c}w c c}w NrD   r   r"   r[   )r   ru   rG   ro   r8   rI   s      r   test_cutoff_zeror      s    
!A1a2E"#DG#r)))a 0!QqAE"#DG#r))) $#   B=Bc                  2   t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        t        j                  t        j                  |       dd             d d d        y # 1 sw Y   y xY wNr   r   r"   	pytestraisesr   NodeNotFoundGraphr   ro   rG   r8   rp   s    r   test_source_missingr      `    	r	' :HHJ
Ay!R  q!11a89: : :   A BBc                  2   t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        t        j                  t        j                  |       dd             d d d        y # 1 sw Y   y xY wNr   r   rD   r   rp   s    r   test_target_missingr     r   r   c                      t        j                  d      } t        j                  | dd      }|D ch c]  }t        |       c}dhk(  sJ y c c}w )NrD   r   r"   r-   r.   r   r"   r   r   all_simple_edge_pathsrH   rI   s      r   test_all_simple_edge_pathsr     sH    
aA$$Q1-E#$E!H$)A(BBBB$rM   c                  z    t        j                  d      } t        t        j                  | dd            g gk(  sJ y )Nr   r   )r   r   ro   r   rp   s    r   %test_all_simple_edge_paths_empty_pathr     s4    
qA((Aq12rd:::r   c                      t        j                  d      } | j                  dd       t        j                  | dddg      }|D ch c]  }t	        |       c}ddhk(  sJ y c c}w )NrD   r   r   r"   r   r-   r.   )r   rD   r   r   rQ   r   rH   rI   s      r   ;test_all_simple_edge_paths_with_two_targets_emits_two_pathsr     se    
aAJJq!$$QAq62E#$E!H$  )   $rS   c                      t        j                  dt        j                               } | j                  dd       t        j                  | dddg      }|D ch c]  }t        |       c}ddhk(  sJ y c c}w )NrD   rU   r   r   r"   r   r   r   r   r1   rQ   r   rH   rI   s      r   Ctest_digraph_all_simple_edge_paths_with_two_targets_emits_two_pathsr   "  sm    
abjjl3AJJq!$$QAq62E#$E!H$  )   $rY   c                      t        j                  d      } | j                  dd       t        j                  | dddgd      }|D ch c]  }t	        |       c}ddhk(  sJ y c c}w )NrD   r   r   r"   r[   r   r   r   rI   s      r   2test_all_simple_edge_paths_with_two_targets_cutoffr   ,  sg    
aAJJq!$$QAq6!<E#$E!H$  )   $r^   c                      t        j                  dt        j                               } | j                  dd       t        j                  | dddgd      }|D ch c]  }t        |       c}ddhk(  sJ y c c}w )	NrD   rU   r   r   r"   r[   r   r   r   rI   s      r   :test_digraph_all_simple_edge_paths_with_two_targets_cutoffr   6  so    
abjjl3AJJq!$$QAq6!<E#$E!H$  )   $ra   c                      t        j                  d      } t        j                  | dddg      }|D ch c]  }t        |       c}ddhk(  sJ y c c}w )NrD   r   r   r"   r-   r.   r   r   rI   s      r   Ctest_all_simple_edge_paths_with_two_targets_in_line_emits_two_pathsr   @  sO    
aA$$QAq62E#$E!H$)9;S(TTTT$rd   c                      t        j                  dt        j                               } | j                  dd       t        j                  | dd      }|D ch c]  }t        |       c}dhk(  sJ y c c}w )Nr"   rU   r   r   r-   r}   r   r$   r1   rQ   r   rH   rI   s      r   (test_all_simple_edge_paths_ignores_cycler   F  s^    
qrzz|4AJJq!$$Q1-E#$E!H$)9(::::$ri   c                      t        j                  dt        j                               } | j                  dd       t        j                  | dddg      }|D ch c]  }t        |       c}ddhk(  sJ y c c}w )Nr"   rU   r   r   r   r   r   r   rI   s      r   Htest_all_simple_edge_paths_with_two_targets_inside_cycle_emits_two_pathsr   M  se    
qrzz|4AJJq!$$QAq62E#$E!H$)9;K(LLLL$rY   c                  ~    t        j                  d      } t        j                  | dd      }t        |      g gk(  sJ y rm   r   r   r   ro   r   s     r   (test_all_simple_edge_paths_source_targetr   T  s8    
aA$$Q1-E;2$r   c                  $   t        j                  d      } t        j                  | ddd      }|D ch c]  }t        |       c}dhk(  sJ t        j                  | ddd      }|D ch c]  }t        |       c}h dk(  sJ y c c}w c c}w )NrD   r   r   r[   r-   r   >   )r   r"   )r"   r   r   r   r   r   )r   ru   r   rH   rI   s      r   !test_all_simple_edge_paths_cutoffr   Z  s    
!A$$Q1Q7E#$E!H$333$$Q1Q7E#$E!H$(WWWW %$rw   c                     t        j                  dt        j                               } | j                  g d       t        j                  | dddg      }|D ch c]  }t        |       c}h dk(  sJ t        j                  | dddgd      }|D ch c]  }t        |       c}h d	k(  sJ t        j                  | dddgd      }|D ch c]  }t        |       c}h d
k(  sJ yc c}w c c}w c c}w )ry   rz   rU   r{   r   r   r"   >   r|   r~   r   r   r.   r}   r.   r   r}   )r"   rD   r   r|   r~   r   r|   r~   r   r[   >   r   r   r   r   r   r   >   r   r   r   N)r   r   r1   r   r   rH   rI   s      r   /test_all_simple_edge_paths_on_non_trivial_graphr   b  s    
abjjl3AEF$$QAq62E#$E!H$ )    $$QAq6!<E#$E!H$ )    $$QAq6!<E#$E!H$(PPPP' % % %r   c                  \   t        j                  ddg      } t        j                  | dd      }t        |      g gk(  sJ t        j                  | g d       t        t        j                  | dd            }t        |      dk(  sJ |D ch c]  }t        |       c}h dk(  sJ y c c}w )Nr.   r   r   r   r"   >   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r8   r   ro   r   r   rH   rI   s      r   %test_all_simple_edge_paths_multigraphr   }  s    
vv&'A$$Q1-E;2$KK=!))!Q23Eu:??#$E!H$ )   $s   B)c                      t        j                  g d      } t        t        j                  | ddd            }t	        |      dk(  sJ |D ch c]  }t        |       c}ddhk(  sJ y c c}w )Nr   r   r   r[   r   r   )r   r8   ro   r   r   rH   rI   s      r   1test_all_simple_edge_paths_multigraph_with_cutoffr     sa    
89A))!Q!<=Eu:??#$E!H$|(DDDD$s   A+c                     t        j                         } t        j                  | g d       t        j                  | g d       t        j                  | dd      }|D ch c]  }t	        |       c}dhk(  sJ y c c}w )Nr   r   r   r"   r   )r   r1   r   r   rH   rI   s      r   #test_all_simple_edge_paths_directedr     sa    


AKK9KK9$$Q1-E#$E!H$)9(::::$r   c                      t        j                  d      } t        j                  | ddd      }t        |      g k(  sJ y r   r   r   s     r    test_all_simple_edge_paths_emptyr     s8    
aA$$Q1Q7E;"r   c                  X   t        t        j                  t        j                  d      dd            g gk(  sJ t        t        j                  t        j                  d      dd            g k(  sJ t        t        j                  t        j                  d      ddd            g k(  sJ y r   )ro   r   r   r   r   rB   r   r   'test_all_simple_edge_paths_corner_casesr     s    (():AqABrdJJJ(():AqABbHHH((q)91aCDJJJr   c                      t        j                  g d      } t        t        j                  | dd            ddggk(  sJ y )N))r   r   r-   )r   r   r.   r   r   r-   r.   )r   r   ro   r   rp   s    r   ,test_all_simple_edge_paths_ignores_self_loopr    s;    
12A((Aq127G6HHHHr   c              #      K   t        |       }t        | |         |hz
  }t        |       }|D ]4  }t        j                  | ||      D ]  }t        |      |dz
  k(  s|  6 y wNr   )r   r   r   r   r   r   s         r   hamiltonian_edge_pathr    so     q!FAfI&)IAA ,,Q? 	D4yAE!
	s   AA%	A%c                      ddl m}  t        j                  d      }t	        |d      } | g dd      D cg c]#  }t        t        dgt        |      z               % }}t        |      t        |      k(  sJ y c c}w r   )r   r   r   ru   r  ro   r   r   )r   r   rJ   rK   r   s        r   test_hamiltonian__edge_pathr    sk    &
!A!!Q'E4@A4NOqT(A3a=)*OEO%=F5M))) Ps   (A9c                  D   t        j                  d      } t        j                  | ddd      }|D cg c]  }t        |       c}g k(  sJ t        j                  t        j                  |       ddd      }|D cg c]  }t        |       c}g k(  sJ y c c}w c c}w r   )r   ru   r   ro   r8   rI   s      r   test_edge_cutoff_zeror	    s    
!A$$Q1Q7E"#DG#r)))$$R]]1%5q!AFE"#DG#r))) $#r   c                  2   t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        t        j                  t        j                  |       dd             d d d        y # 1 sw Y   y xY wr   	r   r   r   r   r   r   ro   r   r8   rp   s    r   test_edge_source_missingr    `    	r	' ?HHJ
Ay!R%%bmmA&61=>? ? ?r   c                  2   t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        t        j                  t        j                  |       dd             d d d        y # 1 sw Y   y xY wr   r  rp   s    r   test_edge_target_missingr    r  r   c            	      x   t        t        j                  dd      dd      } t        j                  | dd      }t	        |      g dk(  sJ t	        |      g dk(  sJ t        j                  | dd      D cg c]  }t        |       c}t        d t        j                  | dd      D              k(  sJ y c c}w )	NrD   r   r   first_labelordering   r   r   r"   rD   r   r  r   rz         r   r  c              3   2   K   | ]  }t        |        y wr   r   .0r   s     r   	<genexpr>z-test_shortest_simple_paths.<locals>.<genexpr>  s      PD	P   cnltir   grid_2d_graphshortest_simple_pathsnextr   r   rG   )r   rJ   r   s      r   test_shortest_simple_pathsr$    s    bq!$!hGA$$Q2.E;----;----"$":":1a"DE$CIE P 11!Q;P J   Es   7B7c                  |    t        j                  d      } t        t        j                  | dd            dggk(  sJ y )Nr"   r   )r   r   ro   r"  rp   s    r   )test_shortest_simple_paths_singleton_pathr&    s6    
qA((Aq12se;;;r   c                      t        j                  dt        j                               } t        j                  | dd      }t	        |      g dgk(  sJ y )Nr  rU   r   r"   rE   r   r$   r1   r"  ro   r   s     r   #test_shortest_simple_paths_directedr)    s@    
qrzz|4A$$Q1-E;<.(((r   c            	         d } t        t        j                  dd      dd      }t        j                  |dd      }t	        |      g dk(  sJ t	        |      g dk(  sJ t        j                  |dd| 	      D cg c]  }t        |       c}t        d
 t        j                  |dd      D              k(  sJ y c c}w )Nc                      yr  rB   uvxs      r   costzFtest_shortest_simple_paths_directed_with_weight_function.<locals>.cost      r   rD   r   r   r  r  r  r  weightc              3   2   K   | ]  }t        |        y wr   r  r  s     r   r  zKtest_shortest_simple_paths_directed_with_weight_function.<locals>.<genexpr>  s     DdD	Dr  r  )r0  r   rJ   r   s       r   8test_shortest_simple_paths_directed_with_weight_functionr5    s     	bq!$!hGA$$Q2.E;----;---- 66q!RMD		Db&9&9!Q&CD	DE E E s   <B<c                      d } t        j                  dt        j                               }t        j                  |dd|       }t	        |      g dgk(  sJ y )Nc                      yr  rB   r,  s      r   r0  z=test_shortest_simple_paths_with_weight_function.<locals>.cost  r1  r   r  rU   r   r"   r2  rE   r(  r0  r   rJ   s      r   /test_shortest_simple_paths_with_weight_functionr9    sI     	qrzz|4A$$Q1T:E;<.(((r   c                      d } t        j                  d      }t        j                  |dd|       }t        |      g dg dgk(  sJ y )Nc                 :    t        | |z
        }|dk(  s|dk(  rdS d S )Nr   rD   )abs)r-  r.  r/  deltas       r   r0  zBtest_shortest_simple_paths_with_none_weight_function.<locals>.cost  s&    AE
aZ5A:q8D8r   rz   r   r   r2  r/   )r   rD   r"   r   )r   ru   r"  ro   r8  s      r   4test_shortest_simple_paths_with_none_weight_functionr>     sF    9
 	!A$$Q1T:E;9l3333r   c                     t        j                         } | j                  g d       | j                  ddddd       | j                  ddd	d
d       | j                  ddddd       | j                  ddddd       | j                  ddddd       | j                  ddddd       g dg dg dg}t	        t        j
                  | ddd            }||k(  sJ y )N)N0N1N2N3N4rD  rA  g      $@2   L5)r3  capacitynamer@  g      @(   L4-   L1rC  L0rB  g      (@   L2g      .@*   L3)rA  r@  rC  )rA  rB  rC  )rA  rD  r@  rC  r3  r2  )r   r   add_nodes_fromrQ   ro   r"  )g1solutionresults      r   test_Greg_BernsteinrV    s    	B45KKd4"4K@KKd3$K?KKd4"4K@KKd4"4K@KKd4"4K@KKd4"4K@"$68PQH"**2tT(KLFXr   c            	      H   fd} t        j                  d      j                         D ci c]  \  }}||ft        j                  dd        }}}t        j
                  |d       d}t        j                  ddd      D ]  } | |      }||k  sJ |} y c c}}w )	Nc           	      F    t        fdt        | | dd        D              S )Nc              3   N   K   | ]  \  }}j                   |   |   d      ywr3  Nadjr  r-  r.  r   s      r   r  zHtest_weighted_shortest_simple_path.<locals>.cost_func.<locals>.<genexpr>  &     KVa1558A;x(K   "%r   sumzipr   r   s    r   	cost_funcz5test_weighted_shortest_simple_path.<locals>.cost_func  !    Ks4ab7JKKKr   rz   r   d   r3  r   r"   r2  )r   ru   edgesrandomrandintset_edge_attributesr"  rd  r-  r.  r3  r0  r   	this_costr   s          @r   "test_weighted_shortest_simple_pathrm    s    L 	!A;<779E!Qq!ffnnQ,,EFE1fh/D((AqB dO	y    Fs   #Bc            	      h   fd} t        j                  d      j                         j                         D ci c]  \  }}||ft	        j
                  dd        }}}t        j                  |d       d}t        j                  ddd      D ]  } | |      }||k  sJ |} y c c}}w )	Nc           	      F    t        fdt        | | dd        D              S )Nc              3   N   K   | ]  \  }}j                   |   |   d      ywrZ  r[  r]  s      r   r  zQtest_directed_weighted_shortest_simple_path.<locals>.cost_func.<locals>.<genexpr>)  r^  r_  r   r`  rc  s    r   rd  z>test_directed_weighted_shortest_simple_path.<locals>.cost_func(  re  r   rz   r   rf  r3  r   r"   r2  )r   ru   to_directedrg  rh  ri  rj  r"  rk  s          @r   +test_directed_weighted_shortest_simple_pathrr  '  s    L 	!A	A;<779E!Qq!ffnnQ,,EFE1fh/D((AqB dO	y    Fs   #B.c                  H   t        j                         } | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       t        t        j                  | ddd            ddgg d	gk(  sJ t        j                         } | j                  ddd
       | j                  ddd       | j                  ddd       | j                  ddd       t        t        j                  | ddd            g d	ddggk(  sJ y NINOUTr   r2  Ar   Br3  )ru  rx  rv  r   )r   r   rQ   ro   r"  rp   s    r   ,test_weighted_shortest_simple_path_issue2427ry  6  s   

AJJtU1J%JJtSJ#JJtSJ#JJsE!J$((D%IJ	uO    	
AJJtU2J&JJtSJ#JJtSJ#JJsE!J$((D%IJ	uO   r   c                  H   t        j                         } | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       t        t        j                  | ddd            ddgg d	gk(  sJ t        j                         } | j                  ddd
       | j                  ddd       | j                  ddd       | j                  ddd       t        t        j                  | ddd            g d	ddggk(  sJ y rt  )r   r1   rQ   ro   r"  rp   s    r   5test_directed_weighted_shortest_simple_path_issue2427r{  K  s   


AJJtU1J%JJtSJ#JJtSJ#JJsE!J$((D%IJ	uO    	

AJJtU2J&JJtSJ#JJtSJ#JJsE!J$((D%IJ	uO   r   c                     t        j                  d      } t        j                  | dd       t        j                  | dd       d| j                  d   d   d<   t	        t        j
                  | ddd            }g d	g d
g}||k(  sJ y )Nr  r   r3  foor   r   r"   r2  r   r  rz   rD   r"   rE   )r   r$   rj  r\  ro   r"  )r   rJ   rT  s      r   test_weight_namer  `  s}    
qA1a*1a'AEE!HQK))!Q%@AE.HHr   c                     t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        t        j                  | dd             d d d        y # 1 sw Y   y xY wr   r   r   r   r   r   r   ro   r"  rp   s    r   test_ssp_source_missingr  j  W    	r	' 0HHJ
Ay!R%%aA./0 0 0   AA::Bc                     t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        t        j                  | dd             d d d        y # 1 sw Y   y xY wr   r  rp   s    r   test_ssp_target_missingr  q  r  r  c                     t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        t        j                  | dd             d d d        y # 1 sw Y   y xY wr   )r   r   r   NetworkXNotImplementedr8   r   ro   r"  rp   s    r   test_ssp_multigraphr  x  sY    	r00	1 0MMO
Ay!R%%aA./0 0 0r  c                  <   t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        j
                  | g d       t        t        j                  | dd             d d d        y # 1 sw Y   y xY w)Nr/   r"   rD   rz   r   r"   )r   r   r   NetworkXNoPathr   r   ro   r"  rp   s    r   test_ssp_source_missing2r    sg    	r((	) 0HHJ
Ay!
Ay!R%%aA./	0 0 0s   A%BBc                      t        j                  d      } t        | dd      \  }}|g dk(  sJ t        | dddg      \  }}|g dk(  sJ y )Nr  r   r"   rE   r   ignore_nodesr~  )r   r$   r   )cyclelengthr   s      r   1test_bidirectional_shortest_path_restricted_cycler    sT    NN1E/q!<LFD</q!1#NLFD?"""r   c                     t        j                  d      } t        | dd      \  }}|g dg dfv sJ t        | dddg      \  }}|g dk(  sJ t        | ddddg      \  }}|g d	k(  sJ t        | ddg d
      \  }}|g dg d	fv sJ y )Nr  r   r"   )r   r   r"   r   r   r  r   r   )r;   )rz   r   r   ignore_edges)r   r   r   r"   )r   wheel_graphr   )wheelr  r   s      r   1test_bidirectional_shortest_path_restricted_wheelr    s    NN1E/q!<LFDIy))))/q!1#NLFD9/q!1a&QLFD</q!":LFD L,////r   c                  x   t        j                  dt        j                               } t        | dd      \  }}|g dk(  sJ t	        j
                  t         j                  t        | dddg       t        | dddg	      \  }}|g dk(  sJ t	        j
                  t         j                  t        | ddd
g	       y )Nr  rU   r   r"   rE   r   r  r   r  r.   )r   r$   r1   r   r   r   r  )directed_cycler  r   s      r   :test_bidirectional_shortest_path_restricted_directed_cycler    s    ^^ABJJLAN/1ELFD<
MM
$		S 01F8LFD <
MM
$		Xr   c            	         t        j                         } t        j                  | ddg       t        j                  | ddg       t        j                  | ddg       t        j                  t         j
                  t        | dddg       t        j                  t         j
                  t        | dddg       t        j                         } t        j                  | ddg       t        j                  | ddg       t        j                  | ddg       t        j                  t         j
                  t        | ddddg       y )Nr   r   r"   rD   r  )r   r   r   r   r   r  r   rp   s    r   'test_bidirectional_shortest_path_ignorer    s    

AKKAq6KKAq6KKAq6
MM
7AqPQs MM
7AqPQs 	
AKKAq6KKAq6KKAq6
MM
7AqPQSTvr   c           
           |d   |k(  sJ |d   |k(  sJ |t         fdt        |d d |dd        D              k(  sJ y )Nr   c              3   T   K   | ]  \  }}|   |   j                  d d       ! yw)r3  r   N)getr]  s      r   r  z validate_path.<locals>.<genexpr>  s-      %)Q!QHa s   %(r   r`  )r   stsoln_lenr   s   `    r   validate_pathr    s\    7a<<8q==s -0crDH-E    r   c                 0    ||k(  sJ t        | ||||       y r   )r  )r   r  r  r  r  r   s         r   validate_length_pathr    s     v!Q64(r   c            	         t        j                         } | j                  g d       t        j                         }|j                  g dg dg dg dg dg dg       t	        | dd	d
gt        | dd	        t	        | dd	dgt        | dd	dg        t	        | dd	dgt        | dd	dg        t        j                  t         j                  t
        | dd	dgdg       t	        |dddgt        |dd        t	        |dddgt        |dddg        t	        |dddgt        |dddg        t        j                  t         j                  t
        |dddgdg       y )N)
)r  r-  r   )r  r/  rz   )r-  r.  r   )r-  r/  r   )r.  yr   )r/  r-  r"   )r/  r.  rz   )r/  r  r   )r  r  r  )r  r.  r  r/   )r   r   r  )r   r"   r   r  )rD   rz   r   )rz   r   r   r  r.  r   r   r-  r     )r  r/  r  )r  r  r   r"         r   r   r~   )	r   r1   add_weighted_edges_fromr   r  r   r   r   r  )XGXG3s     r   &test_bidirectional_dijkstra_restrictedr    s   	B	
 ((*C	J	9iL S#qQ+B2sC+PQ
Cb22sCseT 

	
 
!S#ZL	I MM

U \ aBL)@a)KLQ2/QL Q2/QQ MM
		SXr   c                     t        j                  t        j                        5  t        j                         } t        j
                  | g d       t        j
                  | g d       t        | dd       d d d        y # 1 sw Y   y xY w)Nr   )rD   rz   r  r   r  )r   r   r   r  r   r   r   rp   s    r   #test_bidirectional_dijkstra_no_pathr    s\    	r((	) )HHJ
Ay!
Ay!1a(	) ) )s   AA??Bc            	         t        j                         } t        j                  | g d       t        j                  | g d       t        j                  t         j
                  t        | dddg       t        j                  t         j
                  t        | dddg       t        j                  t         j
                  t        | ddddg       y )N)r   r   r   )r   r"   r   r   r   r  )r   r   r   r   r   r  r   rp   s    r   "test_bidirectional_dijkstra_ignorer    s    

AKK:KK:
MM"##%<aAUVTWX
MM"##%<aAUVTWX
MM
2Aq!1a&r   )Srh  r   networkxr   r   r    networkx.algorithms.simple_pathsr   r   networkx.utilsr   r   r	   rL   rR   rX   r]   r`   rc   rh   rk   rq   rv   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)  r5  r9  r>  rV  rm  rr  ry  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rB   r   r   <module>r     s      = 7E, E,R7EEEEB4?7
GD6EQ4FR**::C;
U;MXQ6E;KI
**??<
)
E)4**0000#04()
8v)r   