
    fi+                     4   d dl Z d dlZd dlZe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dS )    Nfc                     t          j                    }t          j        t           j        d          5   | |           d d d            d S # 1 swxY w Y   d S )NzConnectivity is undefined)match)nxGraphpytestraisesNetworkXPointlessConcept)r   Gs     |/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/networkx/algorithms/tests/test_euler.pytest_empty_graph_raisesr      s    


A	r2:U	V	V	V  	!                 s   AAAc                       e Zd Zd Zd ZdS )TestIsEulerianc                 $   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 d S )N               )r   is_euleriancomplete_graphhypercube_graphpetersen_graph
path_graphselfs    r   test_is_eulerianzTestIsEulerian.test_is_eulerian   sO   ~b/2233333~b/2233333~b03344444~b03344444>""3A"6"677777>""3A"6"677777>""4Q"7"788888>""4Q"7"788888>""3"5"566666>"-"2"23333333    c                    t          j                    }|                    g d           t          j        |          rJ t          j                    }|                    g d           t          j        |          rJ t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           t          j        |          rJ d S )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    HJJ	###>!$$$$$JLL	###>!$$$$$O	

1a	

1a	

1a	

1a>!$$$$$$$r   N)__name__
__module____qualname__r   r'    r   r   r   r      s2        4 4 4% % % % %r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestEulerianCircuitc                 n   t          j        d          }t          t          j        |d                    }d |D             }|g dk    sJ |g dk    sJ t          t          j        |d                    }d |D             }|g d	k    sJ |g d
k    sJ t          j        d          }t          t          j        |d                    }d |D             }|g dk    sJ |g dk    sJ t          t          j        |d                    }d |D             }|g dk    sJ |g dk    sJ d S )Nr   r   sourcec                     g | ]\  }}|S r+   r+   .0uvs      r   
<listcomp>zCTestEulerianCircuit.test_eulerian_circuit_cycle.<locals>.<listcomp>4       %%%tq!%%%r   )r   r   r!   r    )r   r   r   r!   r!   r    r    r   r    c                     g | ]\  }}|S r+   r+   r2   s      r   r6   zCTestEulerianCircuit.test_eulerian_circuit_cycle.<locals>.<listcomp>9   r7   r   r    r!   r   r   r    r!   r!   r   r   r   r   r    r   c                     g | ]\  }}|S r+   r+   r2   s      r   r6   zCTestEulerianCircuit.test_eulerian_circuit_cycle.<locals>.<listcomp>@   r7   r   )r   r!   r    )r   r!   r:   r;   c                     g | ]\  }}|S r+   r+   r2   s      r   r6   zCTestEulerianCircuit.test_eulerian_circuit_cycle.<locals>.<listcomp>E   r7   r   )r    r!   r   )r?   r!   r   rB   )r   cycle_graphlisteulerian_circuitr   r   r   edgesnodess       r   test_eulerian_circuit_cyclez/TestEulerianCircuit.test_eulerian_circuit_cycle0   s   N1R(155566%%u%%%$$$$8888888R(155566%%u%%%$$$$8888888a  R(155566%%u%%%			!!!!0000000R(155566%%u%%%			!!!!000000000r   c                 f   t          j                    }t          j        |g d           t          t          j        |d                    }d |D             }|g dk    sJ |g dk    sJ t          t          j        |d                    }d |D             }|g dk    sJ |g d	k    sJ d S )
Nr   r    r!   r   r   r/   c                     g | ]\  }}|S r+   r+   r2   s      r   r6   zETestEulerianCircuit.test_eulerian_circuit_digraph.<locals>.<listcomp>N   r7   r   )rB   r?   r@   rA   r    c                     g | ]\  }}|S r+   r+   r2   s      r   r6   zETestEulerianCircuit.test_eulerian_circuit_digraph.<locals>.<listcomp>S   r7   r   r=   r>   )r   r#   	add_cyclerH   rI   rJ   s       r   test_eulerian_circuit_digraphz1TestEulerianCircuit.test_eulerian_circuit_digraphI   s    JLL
Q%%%R(155566%%u%%%$$$$8888888R(155566%%u%%%$$$$888888888r   c                 8   t          j                    }t          j        |g d           |                    dd           |                    dd           t	          t          j        |d                    }d |D             }|g dk    sJ |g dk    sJ d S )	NrO   r    r!   r   r/   c                     g | ]\  }}|S r+   r+   r2   s      r   r6   z7TestEulerianCircuit.test_multigraph.<locals>.<listcomp>]   r7   r   r   r   r!   r    r!   r    )r8   r9   r:   r?   r:   r;   )r   
MultiGraphrR   r%   rH   rI   rJ   s       r   test_multigraphz#TestEulerianCircuit.test_multigraphW   s    MOO
Q%%%	

1a	

1aR(155566%%u%%%*******HHHHHHHHHr   c                    t          j                    }t          j        |g d           |                    dd           |                    dd           t	          t          j        |dd                    }d |D             }|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 d S )NrO   r    r!   r   T)r0   keysc                     g | ]\  }}}|	S r+   r+   )r3   r4   r5   ks       r   r6   zATestEulerianCircuit.test_multigraph_with_keys.<locals>.<listcomp>g   s    (((wq!Q(((r   rV   )r   r   r   )r   r!   r   r   ))r!   r    r   )r    r!   r    )r!   r    r!   r    r   r   )r   rW   rR   r%   rH   rI   collectionsCounterrJ   s       r   test_multigraph_with_keysz-TestEulerianCircuit.test_multigraph_with_keysa   s   MOO
Q%%%	

1a	

1aR(14@@@AA((%(((*******RaRyY	22222"51:..+2E---3
 3
 
 
 
 
 QRRyYK''''''r   c                     t          j        t          j                  5  t	          t          j        t          j        d                              }d d d            d S # 1 swxY w Y   d S Nr   )r   r	   r   NetworkXErrorrH   rI   r   )r   r   s     r   test_not_eulerianz%TestEulerianCircuit.test_not_euleriano   s    ]2+,, 	@ 	@R():1)=)=>>??A	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   4A  A$'A$N)r(   r)   r*   rM   rS   rX   r`   rd   r+   r   r   r-   r-   /   sg        1 1 129 9 9I I I( ( (@ @ @ @ @r   r-   c                       e Zd Zd ZdS )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 d S )Nr   r   create_usingr   r   )r   is_semieulerianr   r#   r   r   r&   s     r   test_is_semieulerianz'TestIsSemiEulerian.test_is_semieulerianu   s    !"-"2"233333M!"*555!!$$$$$ %b&7&:&:;;;;;%b&7&:&:;;;;;%b&8&;&;<<<<<%b&8&;&;<<<<<<<r   N)r(   r)   r*   rk   r+   r   r   rf   rf   t   s#        
= 
= 
= 
= 
=r   rf   c                       e Zd Zd Zd Zd Zej                            d e	j
                     e	j                    f          d             Zej                            d e	j
                     e	j                    f          d             ZdS )TestHasEulerianPathc                 F   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 d S )Nr   r   r   r   )r   has_eulerian_pathr   r   r   s    r   test_has_eulerian_path_cyclicz1TestHasEulerianPath.test_has_eulerian_path_cyclic   s    #B$5a$8$899999#B$5a$8$899999#B$6q$9$9:::::#B$6q$9$9:::::::r   c                     t          j        t          j        d                    sJ t          j        dt           j                  }t          j        |          sJ d S )Nr   r   rh   )r   ro   r   r#   r&   s     r   !test_has_eulerian_path_non_cyclicz5TestHasEulerianPath.test_has_eulerian_path_non_cyclic   sV    #BM!$4$455555M!"*555#A&&&&&&&r   c                 \   t          j                    }|                    g d           t          j        |          rJ t          j                    }|                    g d           t          j        |          sJ |                    d           t          j        |          rJ d S )N)rB   r?   rD   )rB   r?   rF   r   )r   r#   add_edges_fromro   add_noder&   s     r   %test_has_eulerian_path_directed_graphz9TestHasEulerianPath.test_has_eulerian_path_directed_graph   s    JLL	111222'***** JLL	111222#A&&&&& 	


1'*******r   r   c                 `    |                     g d           t          j        |          rJ d S )N)rB   r@   r9   rt   r   ro   r&   s     r   +test_has_eulerian_path_not_weakly_connectedz?TestHasEulerianPath.test_has_eulerian_path_not_weakly_connected   s:    	111222'*******r   c                 `    |                     ddg           t          j        |          rJ d S NrB   r@   rx   r&   s     r   2test_has_eulerian_path_unbalancedins_more_than_onezFTestHasEulerianPath.test_has_eulerian_path_unbalancedins_more_than_one   s8    	&&)***'*******r   N)r(   r)   r*   rp   rr   rv   r   markparametrizer   r   r#   ry   r|   r+   r   r   rm   rm      s        ; ; ;' ' '+ + + [S828::zrz||"<==+ + >=+ [S828::zrz||"<==+ + >=+ + +r   rm   c                       e Zd Zd ZdS )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 d S )Nr   rh   r   )rB   r?   rF   r   r   r   )rB   r?   r@   )r!   r   )r   
algorithmseuler_find_path_startr   r#   )r   find_path_startr   rK   s       r   testfind_path_startz%TestFindPathStart.testfind_path_start   s    -->M!"*555q!!Q&&&&000rz%0011Q6666 100rz%001199999r   N)r(   r)   r*   r   r+   r   r   r   r      s#        
: 
: 
: 
: 
:r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            dej        dd	gfej        dd
gff          d             ZdS )TestEulerianPathc                     g d}t          |t          j        t          j        |                              D ]\  }}||k    sJ d S )N)r   rB   r?   rF   )zipr   eulerian_pathr#   )r   xe1e2s       r   test_eulerian_pathz#TestEulerianPath.test_eulerian_path   sV    ,,,!R-bjmm<<== 	 	FB88888	 	r   c                    t          j                    }g d}|                    |           |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            n# 1 swxY w Y   t          j        t           j                  5  t          t          j        |d                     d d d            n# 1 swxY w Y   t          j        t           j                  5  t          t          j        |d                     d d d            d S # 1 swxY w Y   d S )Nr?   r@   r   r   )r   r   r    r/   r   r   r   )r   r#   rt   rH   r   r   r	   rc   r   r   results      r    test_eulerian_path_straight_linkz1TestEulerianPath.test_eulerian_path_straight_link   s   JLL111	   b.q11222222b.q;;;<<<<<<]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s6   $CCC4$D$$D(+D($E>>FFc                 d   t          j                    }g d}|                    |           |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            n# 1 swxY w Y   t          j        t           j                  5  t          t          j        |d                     d d d            d S # 1 swxY w Y   d S )N)r:   r?   r:   r?   r@   r   r   r   r!   r/   r   r   )r   r$   rt   rH   r   r   r	   rc   r   s      r   test_eulerian_path_multigraphz.TestEulerianPath.test_eulerian_path_multigraph   s   OIII	   b.q11222222b.q;;;<<<<<<]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0$   $CCC4$D%%D),D)c                    t          j                    }g d}g d}g d}|                    |           |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 d S )N)r?   r@   r   r   r    )r@   r   r   r?   )r   r   r?   r@   r    r/   r!   r   )r   r#   rt   rH   r   )r   r   r   result2result3s        r   #test_eulerian_path_eulerian_circuitz4TestEulerianPath.test_eulerian_path_eulerian_circuit   s    JLL111222222	   b.q11222222b.q;;;<<<<<<$r/!<<<======$r/!<<<========r   c                    t          j                    }g d}g d}|                    |           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            n# 1 swxY w Y   t          j        t           j                  5  t          t          j        |d                     d d d            d S # 1 swxY w Y   d S )Nr   ))r   r   r   r9   r:   r    r/   r   r   r!   )r   r   rt   rH   r   r   r	   rc   )r   r   r   r   s       r   test_eulerian_path_undirectedz.TestEulerianPath.test_eulerian_path_undirected   s   HJJ111222	   B$Q''((VW,=====b.q;;;<<<<<<$r/!<<<======]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s$   $C88C<?C<!$EEEc                 d   t          j                    }g d}|                    |           |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            n# 1 swxY w Y   t          j        t           j                  5  t          t          j        |d                     d d d            d S # 1 swxY w Y   d S )N)r:   r?   r:   r?   r@   r   r!   r/   r   r    )r   rW   rt   rH   r   r   r	   rc   r   s      r   (test_eulerian_path_multigraph_undirectedz9TestEulerianPath.test_eulerian_path_multigraph_undirected   s   MOOAAA	   b.q11222222b.q;;;<<<<<<]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]2+,, 	0 	0!!A...///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0r   )
graph_typer   )r   r    r   )r    r   r    r]   c                 v     |ddg          }t          j        |d          }t          |          |k    sJ d S )NrB   r;   T)rZ   )r   r   rH   )r   r   r   r   answers        r   test_eulerian_with_keysz(TestEulerianPath.test_eulerian_with_keys   sJ     J'((!!$///F||v%%%%%%r   N)r(   r)   r*   r   r   r   r   r   r   r   r}   r~   r   rW   r$   r   r+   r   r   r   r      s          
0 0 0	0 	0 	0	> 	> 	>0 0 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
d	S )
TestEulerizec                     t          j        t          j                  5  t          j        ddg          }t          j        |           d d d            d S # 1 swxY w Y   d S r{   )r   r	   r   rc   from_edgelisteulerizer&   s     r   test_disconnectedzTestEulerize.test_disconnected  s    ]2+,, 	 	 &&!122AKNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   +AAAc                     t          j        t          j                  5  t          j        t          j                               d d d            d S # 1 swxY w Y   d S N)r   r	   r   r
   r   r   r   s    r   test_null_graphzTestEulerize.test_null_graph  s    ]2677 	$ 	$K

###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$   &AAAc                     t          j        t          j                  5  t          j        t          j                               d d d            d S # 1 swxY w Y   d S r   )r   r	   r   r
   r   rW   r   s    r   test_null_multigraphz!TestEulerize.test_null_multigraph  s    ]2677 	) 	)K(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)r   c                     t          j        t          j                  5  t          j        t          j        d                     d d d            d S # 1 swxY w Y   d S Nr   )r   r	   r   rc   r   empty_graphr   s    r   test_on_empty_graphz TestEulerize.test_on_empty_graph  s    ]2+,, 	+ 	+Kq))***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   'AAAc                     t          j        d          }t          j        |          }t          j        ||          sJ d S r   )r   rG   r   is_isomorphicr   r   Hs      r   test_on_eulerianzTestEulerize.test_on_eulerian  s=    N1KNN1%%%%%%%r   c                     t          j        t          j        d                    }|                    dd           t          j        |          }t          j        |          sJ d S )Nr   r   r    )r   rW   rG   r%   r   r   r   s      r   test_on_eulerian_multigraphz(TestEulerize.test_on_eulerian_multigraph  sX    M".++,,	

1aKNN~a       r   c                     t          j        d          }t          j        t          j        |                    sJ t          j        t          j        t          j        |                              sJ d S rb   )r   r   r   r   rW   r&   s     r   test_on_complete_graphz#TestEulerize.test_on_complete_graph#  s`    a  ~bk!nn-----~bk"-*:*:;;<<<<<<<r   c                    t          j        d          }|                    dd           |                    dd           |                    dd           |                    dd           |                    dd           |                    dd           |                    dd	           |                    d	d
           |                    d
d           |                    dd           |                    dd           |                    dd           |                    dd           t          j        |          rJ t          j        |          }t          j        |          sJ t          j        |          dk    sJ d S )N   r         r                                 '   )r   rG   r%   r   r   number_of_edgesr&   s     r   test_on_non_eulerian_graphz'TestEulerize.test_on_non_eulerian_graph(  sp   N2	

1b	

2r	

2r	

1b	

2r	

2r	

2r	

2r	

2r	

2r	

2r	

2r	

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