
    wg+                        d dl Z d dlZd dlZej                  j                  dej                  ej                  f      d        Z G d d      Z	 G d d      Z
 G d d	      Z G d
 d      Z G d d      Z G d d      Z G d d      Zy)    Nfc                     t        j                         }t        j                  t         j                  d      5   | |       d d d        y # 1 sw Y   y xY w)NzConnectivity is undefined)match)nxGraphpytestraisesNetworkXPointlessConcept)r   Gs     i/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_euler.pytest_empty_graph_raisesr      s>    

A	r22:U	V 	!  s   	AAc                       e Zd Zd Zd Zy)TestIsEulerianc                 J   t        j                  t        j                  d            sJ t        j                  t        j                  d            sJ t        j                  t        j                  d            sJ t        j                  t        j                  d            sJ t        j                  t        j                  d            rJ t        j                  t        j                  d            rJ t        j                  t        j                  d            rJ t        j                  t        j                  d            rJ t        j                  t        j                               rJ t        j                  t        j
                  d            rJ y )N               )r   is_euleriancomplete_graphhypercube_graphpetersen_graph
path_graphselfs    r   test_is_eulerianzTestIsEulerian.test_is_eulerian   s#   ~~b//2333~~b//2333~~b003444~~b003444>>""3"3A"6777>>""3"3A"6777>>""4"4Q"7888>>""4"4Q"7888>>""3"3"5666>>"--"23333    c                    t        j                         }|j                  g d       t        j                  |      rJ t        j                         }|j                  g d       t        j                  |      rJ t        j
                         }|j                  dd       |j                  dd       |j                  dd       |j                  dd       t        j                  |      rJ y )N)      r   r    r!   r   )r   r   add_nodes_fromr   DiGraphMultiDiGraphadd_edger   r   s     r   test_is_eulerian2z TestIsEulerian.test_is_eulerian2   s    HHJ	#>>!$$$JJL	#>>!$$$OO	

1a	

1a	

1a	

1a>>!$$$$r   N)__name__
__module____qualname__r   r'    r   r   r   r      s    4%r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestEulerianCircuitc                    t        j                  d      }t        t        j                  |d            }|D cg c]  \  }}|	 }}}|g dk(  sJ |g dk(  sJ t        t        j                  |d            }|D cg c]  \  }}|	 }}}|g dk(  sJ |g dk(  sJ t        j                  d	      }t        t        j                  |d            }|D cg c]  \  }}|	 }}}|g d
k(  sJ |g dk(  sJ t        t        j                  |d            }|D cg c]  \  }}|	 }}}|g dk(  sJ |g dk(  sJ y c c}}w c c}}w c c}}w c c}}w )Nr   r   source)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!   r3   r4   )r    r!   r   )r7   r!   r   r:   )r   cycle_graphlisteulerian_circuitr   r   r   edgesuvnodess         r   test_eulerian_circuit_cyclez/TestEulerianCircuit.test_eulerian_circuit_cycle0   s`   NN1R((156$%tq!%%$$$8888R((156$%tq!%%$$$8888a R((156$%tq!%%	!!!0000R((156$%tq!%%	!!!0000' &
 & &
 &s   EE
E"Ec                    t        j                         }t        j                  |g d       t        t        j                  |d            }|D cg c]  \  }}|	 }}}|g dk(  sJ |g dk(  sJ t        t        j                  |d            }|D cg c]  \  }}|	 }}}|g dk(  sJ |g dk(  sJ y c c}}w c c}}w )Nr   r    r!   r   r   r/   )r:   r7   r8   r9   r    r5   r6   )r   r#   	add_cycler>   r?   r@   s         r   test_eulerian_circuit_digraphz1TestEulerianCircuit.test_eulerian_circuit_digraphI   s    JJL
Q%R((156$%tq!%%$$$8888R((156$%tq!%%$$$8888 &
 &s   B:C c                 <   t        j                         }t        j                  |g d       |j                  dd       |j                  dd       t	        t        j
                  |d            }|D cg c]  \  }}|	 }}}|g dk(  sJ |g dk(  sJ y c c}}w )NrG   r    r!   r   r/   r   r   r!   r    r!   r    )r1   r2   r3   r7   r3   r4   )r   
MultiGraphrH   r%   r>   r?   r@   s         r   test_multigraphz#TestEulerianCircuit.test_multigraphW   s    MMO
Q%	

1a	

1aR((156$%tq!%%****HHHH &s   6Bc                    t        j                         }t        j                  |g d       |j                  dd       |j                  dd       t	        t        j
                  |dd            }|D cg c]  \  }}}|
 }}}}|g dk(  sJ |d d dd	gk(  sJ t        j                  |dd
       t        j                  g d      k(  sJ |d
d  dgk(  sJ y c c}}}w )NrG   r    r!   r   T)r0   keysrK   )r   r   r   )r   r!   r   r   ))r!   r    r   )r    r!   r    )r!   r    r!   r    r   r   )r   rL   rH   r%   r>   r?   collectionsCounter)r   r   rA   rB   rC   krD   s          r   test_multigraph_with_keysz-TestEulerianCircuit.test_multigraph_with_keysa   s    MMO
Q%	

1a	

1aR((14@A"'((wq!Q((****RayY	2222""51:.+2E2E-3
 
 	
 
 QRyYK''' )s   8Cc                     t        j                  t        j                        5  t	        t        j
                  t        j                  d                  }d d d        y # 1 sw Y   y xY wNr   )r   r	   r   NetworkXErrorr>   r?   r   )r   r   s     r   test_not_eulerianz%TestEulerianCircuit.test_not_euleriano   sM    ]]2++, 	@R(():):1)=>?A	@ 	@ 	@s   2AA(N)r(   r)   r*   rE   rI   rM   rT   rX   r+   r   r   r-   r-   /   s    129I(@r   r-   c                       e Zd Zd Zy)TestIsSemiEulerianc                     t        j                  t        j                  d            sJ t        j                  dt         j                        }t        j                  |      sJ t        j                  t        j                  d            rJ t        j                  t        j                  d            rJ t        j                  t        j
                  d            rJ t        j                  t        j
                  d            rJ y )Nr   r   create_usingr   r   )r   is_semieulerianr   r#   r   r   r&   s     r   test_is_semieulerianz'TestIsSemiEulerian.test_is_semieulerianu   s    !!"--"2333MM!"**5!!!$$$ %%b&7&7&:;;;%%b&7&7&:;;;%%b&8&8&;<<<%%b&8&8&;<<<<r   N)r(   r)   r*   r_   r+   r   r   rZ   rZ   t   s    
=r   rZ   c                   &   e Zd Zd Zd Zd Zej                  j                  d e	j                          e	j                         f      d        Zej                  j                  d e	j                          e	j                         f      d        Zy)TestHasEulerianPathc                 T   t        j                  t        j                  d            sJ t        j                  t        j                  d            sJ t        j                  t        j                  d            sJ t        j                  t        j                  d            sJ y )Nr   r   r   r   )r   has_eulerian_pathr   r   r   s    r   test_has_eulerian_path_cyclicz1TestHasEulerianPath.test_has_eulerian_path_cyclic   s~    ##B$5$5a$8999##B$5$5a$8999##B$6$6q$9:::##B$6$6q$9:::r   c                     t        j                  t        j                  d            sJ t        j                  dt         j                        }t        j                  |      sJ y )Nr   r   r\   )r   rc   r   r#   r&   s     r   !test_has_eulerian_path_non_cyclicz5TestHasEulerianPath.test_has_eulerian_path_non_cyclic   sG    ##BMM!$4555MM!"**5##A&&&r   c                 L   t        j                         }|j                  g d       t        j                  |      rJ t        j                         }|j                  g d       t        j                  |      sJ |j	                  d       t        j                  |      rJ y )N)r:   r7   r;   )r:   r7   r<   r   )r   r#   add_edges_fromrc   add_noder&   s     r   %test_has_eulerian_path_directed_graphz9TestHasEulerianPath.test_has_eulerian_path_directed_graph   s    JJL	12''*** JJL	12##A&&& 	


1''****r   r   c                 X    |j                  g d       t        j                  |      rJ y )N)r:   r8   r2   rh   r   rc   r&   s     r   +test_has_eulerian_path_not_weakly_connectedz?TestHasEulerianPath.test_has_eulerian_path_not_weakly_connected   s(    	12''****r   c                 X    |j                  ddg       t        j                  |      rJ y Nr:   r8   rl   r&   s     r   2test_has_eulerian_path_unbalancedins_more_than_onezFTestHasEulerianPath.test_has_eulerian_path_unbalancedins_more_than_one   s,    	&&)*''****r   N)r(   r)   r*   rd   rf   rj   r   markparametrizer   r   r#   rm   rp   r+   r   r   ra   ra      s    ;'+ [[S8288:zrzz|"<=+ >+ [[S8288:zrzz|"<=+ >+r   ra   c                       e Zd Zd Zy)TestFindPathStartc                 :   t         j                  j                  j                  }t        j                  dt         j
                        } ||      dk(  sJ g d} |t        j
                  |            dk(  sJ g d} |t        j
                  |            J y )Nr   r\   r   )r:   r7   r<   r   r   r   )r:   r7   r8   )r!   r   )r   
algorithmseuler_find_path_startr   r#   )r   find_path_startr   rA   s       r   testfind_path_startz%TestFindPathStart.testfind_path_start   s    ---->>MM!"**5q!Q&&&0rzz%01Q666 1rzz%01999r   N)r(   r)   r*   r{   r+   r   r   rt   rt      s    
:r   rt   c                       e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  dej                  dd	gfej                  dd
gff      d        Zy)TestEulerianPathc                     g d}t        |t        j                  t        j                  |                  D ]  \  }}||k(  rJ  y )N)rv   r:   r7   r<   )zipr   eulerian_pathr#   )r   xe1e2s       r   test_eulerian_pathz#TestEulerianPath.test_eulerian_path   s?    ,!R--bjjm<= 	FB8O8	r   c                    t        j                         }g d}|j                  |       |t        t        j                  |            k(  sJ |t        t        j                  |d            k(  sJ t        j                  t         j                        5  t        t        j                  |d             d d d        t        j                  t         j                        5  t        t        j                  |d             d d d        t        j                  t         j                        5  t        t        j                  |d             d d d        y # 1 sw Y   xY w# 1 sw Y   bxY w# 1 sw Y   y xY w)Nr7   r8   r   r   )r   r   r    r/   r   r   r   )r   r#   rh   r>   r   r   r	   rW   r   r   results      r    test_eulerian_path_straight_linkz1TestEulerianPath.test_eulerian_path_straight_link   s   JJL1	 b..q12222b..q;<<<<]]2++, 	0!!!A./	0]]2++, 	0!!!A./	0]]2++, 	0!!!A./	0 	0		0 	0	0 	0	0 	0s$   !E!!E#-!E/E #E,/E8c                 F   t        j                         }g d}|j                  |       |t        t        j                  |            k(  sJ |t        t        j                  |d            k(  sJ t        j                  t         j                        5  t        t        j                  |d             d d d        t        j                  t         j                        5  t        t        j                  |d             d d d        y # 1 sw Y   VxY w# 1 sw Y   y xY w)N)r3   r7   r3   r7   r8   r   r   r   r!   r/   r   r   )r   r$   rh   r>   r   r   r	   rW   r   s      r   test_eulerian_path_multigraphz.TestEulerianPath.test_eulerian_path_multigraph   s    OOI	 b..q12222b..q;<<<<]]2++, 	0!!!A./	0]]2++, 	0!!!A./	0 	0	0 	0	0 	0   !D!!DDD c                    t        j                         }g d}g d}g d}|j                  |       |t        t        j                  |            k(  sJ |t        t        j                  |d            k(  sJ |t        t        j                  |d            k(  sJ |t        t        j                  |d            k(  sJ y )N)r7   r8   r   r   r    )r8   r   r   r7   )r   r   r7   r8   r    r/   r!   r   )r   r#   rh   r>   r   )r   r   r   result2result3s        r   #test_eulerian_path_eulerian_circuitz4TestEulerianPath.test_eulerian_path_eulerian_circuit   s    JJL122	 b..q12222b..q;<<<<$r//!<====$r//!<====r   c                    t        j                         }g d}g d}|j                  |       t        t        j                  |            ||fv sJ |t        t        j                  |d            k(  sJ |t        t        j                  |d            k(  sJ t        j                  t         j                        5  t        t        j                  |d             d d d        t        j                  t         j                        5  t        t        j                  |d             d d d        y # 1 sw Y   VxY w# 1 sw Y   y xY w)Nr   ))r   r   r   r2   r3   r    r/   r   r   r!   )r   r   rh   r>   r   r   r	   rW   )r   r   r   r   s       r   test_eulerian_path_undirectedz.TestEulerianPath.test_eulerian_path_undirected   s   HHJ12	 B$$Q'(VW,====b..q;<<<<$r//!<====]]2++, 	0!!!A./	0]]2++, 	0!!!A./	0 	0	0 	0	0 	0s   ?!D5!E5D>E
c                 F   t        j                         }g d}|j                  |       |t        t        j                  |            k(  sJ |t        t        j                  |d            k(  sJ t        j                  t         j                        5  t        t        j                  |d             d d d        t        j                  t         j                        5  t        t        j                  |d             d d d        y # 1 sw Y   VxY w# 1 sw Y   y xY w)N)r3   r7   r3   r7   r8   r   r!   r/   r   r    )r   rL   rh   r>   r   r   r	   rW   r   s      r   (test_eulerian_path_multigraph_undirectedz9TestEulerianPath.test_eulerian_path_multigraph_undirected   s    MMOA	 b..q12222b..q;<<<<]]2++, 	0!!!A./	0]]2++, 	0!!!A./	0 	0	0 	0	0 	0r   )
graph_typer   )r   r    r   )r    r   r    rP   c                 f     |ddg      }t        j                  |d      }t        |      |k(  sJ y )Nr:   r4   T)rO   )r   r   r>   )r   r   r   r   answers        r   test_eulerian_with_keysz(TestEulerianPath.test_eulerian_with_keys   s7     '(!!!$/F|v%%%r   N)r(   r)   r*   r   r   r   r   r   r   r   rq   rr   r   rL   r$   r   r+   r   r   r}   r}      sm    
0	0	>0	0 [[ ]]Y	23__y)45	
&&r   r}   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestEulerizec                     t        j                  t        j                        5  t        j                  ddg      }t        j
                  |       d d d        y # 1 sw Y   y xY wro   )r   r	   r   rW   from_edgelisteulerizer&   s     r   test_disconnectedzTestEulerize.test_disconnected  sI    ]]2++, 	  &&!12AKKN	 	 	s   -AA#c                     t        j                  t        j                        5  t        j                  t        j
                                d d d        y # 1 sw Y   y xY wN)r   r	   r   r
   r   r   r   s    r   test_null_graphzTestEulerize.test_null_graph  s;    ]]2667 	$KK
#	$ 	$ 	$   (AAc                     t        j                  t        j                        5  t        j                  t        j
                                d d d        y # 1 sw Y   y xY wr   )r   r	   r   r
   r   rL   r   s    r   test_null_multigraphz!TestEulerize.test_null_multigraph  s;    ]]2667 	)KK(	) 	) 	)r   c                     t        j                  t        j                        5  t        j                  t        j
                  d             d d d        y # 1 sw Y   y xY wNr   )r   r	   r   rW   r   empty_graphr   s    r   test_on_empty_graphz TestEulerize.test_on_empty_graph  s>    ]]2++, 	+KKq)*	+ 	+ 	+s   )AAc                     t        j                  d      }t        j                  |      }t        j                  ||      sJ y r   )r   r=   r   is_isomorphicr   r   Hs      r   test_on_eulerianzTestEulerize.test_on_eulerian  s3    NN1KKN1%%%r   c                     t        j                  t        j                  d            }|j                  dd       t        j                  |      }t        j
                  |      sJ y )Nr   r   r    )r   rL   r=   r%   r   r   r   s      r   test_on_eulerian_multigraphz(TestEulerize.test_on_eulerian_multigraph  sF    MM"..+,	

1aKKN~~a   r   c                     t        j                  d      }t        j                  t        j                  |            sJ t        j                  t        j                  t        j                  |                  sJ y rV   )r   r   r   r   rL   r&   s     r   test_on_complete_graphz#TestEulerize.test_on_complete_graph#  sP    a ~~bkk!n---~~bkk"--*:;<<<r   c                    t        j                  d      }|j                  dd       |j                  dd       |j                  dd       |j                  dd       |j                  dd       |j                  dd       |j                  dd	       |j                  d	d
       |j                  d
d       |j                  dd       |j                  dd       |j                  dd       |j                  dd       t        j                  |      rJ t        j                  |      }t        j                  |      sJ t        j
                  |      dk(  sJ y )N   r         r                                 '   )r   r=   r%   r   r   number_of_edgesr&   s     r   test_on_non_eulerian_graphz'TestEulerize.test_on_non_eulerian_graph(  s   NN2	

1b	

2r	

2r	

1b	

2r	

2r	

2r	

2r	

2r	

2r	

2r	

2r	

2r>>!$$$KKN~~a   !!!$***r   N)r(   r)   r*   r   r   r   r   r   r   r   r   r+   r   r   r   r     s*    
$)+&
!=
+r   r   )rQ   r   networkxr   rq   rr   r   r^   r   r   r-   rZ   ra   rt   r}   r   r+   r   r   <module>r      s       r~~r/A/ABC D% %@B@ B@J= =%+ %+P: :K& K&\4+ 4+r   