o
    ˷e6'                     @   s~   d dl Z d dlZd dlZG dd dZG dd dZG dd dZG dd	 d	ZG d
d dZG dd dZ	G dd dZ
dS )    Nc                   @   s   e Zd Zdd Zdd ZdS )TestIsEulerianc                 C   s   t t ds
J t t dsJ t t dsJ t t ds(J t t dr2J t t dr<J t t drFJ t t drPJ t t  rYJ t t drcJ d S )N               )nxis_euleriancomplete_graphhypercube_graphpetersen_graph
path_graphself r   [/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/algorithms/tests/test_euler.pytest_is_eulerian	   s   zTestIsEulerian.test_is_eulerianc                 C   s   t  }|g d t |rJ t  }|g d t |r$J t  }|dd |dd |dd |dd t |rGJ d S )N)      r   r   r   r   )r   Graphadd_nodes_fromr	   DiGraphMultiDiGraphadd_edger   Gr   r   r   test_is_eulerian2   s   z TestIsEulerian.test_is_eulerian2N)__name__
__module____qualname__r   r   r   r   r   r   r      s    r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestEulerianCircuitc                 C   s  t d}tt j|dd}dd |D }|g dksJ |g dks%J tt j|dd}d	d |D }|g d
ks=J |g dksEJ t d}tt j|dd}dd |D }|g dksbJ |g dksjJ tt j|dd}dd |D }|g dksJ |g dksJ d S )Nr   r   sourcec                 S      g | ]\}}|qS r   r   .0uvr   r   r   
<listcomp>-       zCTestEulerianCircuit.test_eulerian_circuit_cycle.<locals>.<listcomp>)r   r   r   r   )r   r   r   r   r   r   r   r   r   c                 S   r#   r   r   r$   r   r   r   r(   2   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 S   r#   r   r   r$   r   r   r   r(   9   r)   )r   r   r   )r   r   r,   r-   c                 S   r#   r   r   r$   r   r   r   r(   >   r)   )r   r   r   )r0   r   r   r3   )r   cycle_graphlisteulerian_circuitr
   r   r   edgesnodesr   r   r   test_eulerian_circuit_cycle)   s$   

z/TestEulerianCircuit.test_eulerian_circuit_cyclec                 C   s   t  }t |g d tt j|dd}dd |D }|g dks$J |g dks,J tt j|dd}dd |D }|g d	ksDJ |g d
ksLJ d S )Nr   r   r   r   r   r!   c                 S   r#   r   r   r$   r   r   r   r(   G   r)   zETestEulerianCircuit.test_eulerian_circuit_digraph.<locals>.<listcomp>)r3   r0   r1   r2   r   c                 S   r#   r   r   r$   r   r   r   r(   L   r)   r.   r/   )r   r   	add_cycler7   r8   r9   r   r   r   test_eulerian_circuit_digraphB   s   z1TestEulerianCircuit.test_eulerian_circuit_digraphc                 C   st   t  }t |g d |dd |dd tt j|dd}dd |D }|g dks0J |g d	ks8J d S )
Nr=   r   r   r   r!   c                 S   r#   r   r   r$   r   r   r   r(   V   r)   z7TestEulerianCircuit.test_multigraph.<locals>.<listcomp>r   r   r   r   r   r   )r*   r+   r,   r0   r,   r-   )r   
MultiGraphr>   r   r7   r8   r9   r   r   r   test_multigraphP   s   z#TestEulerianCircuit.test_multigraphc                 C   s   t  }t |g d |dd |dd tt j|ddd}dd |D }|g d	ks1J |d d d
dgks=J t|dd tg dksOJ |dd  dgksZJ d S )Nr=   r   r   r   T)r"   keysc                 S   s   g | ]\}}}|qS r   r   )r%   r&   r'   kr   r   r   r(   `   s    zATestEulerianCircuit.test_multigraph_with_keys.<locals>.<listcomp>r@   )r   r   r   )r   r   r   r   ))r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   rA   r>   r   r7   r8   collectionsCounterr9   r   r   r   test_multigraph_with_keysZ   s   
z-TestEulerianCircuit.test_multigraph_with_keysc                 C   sF   t tj tttd}W d    d S 1 sw   Y  d S Nr   )pytestraisesr   NetworkXErrorr7   r8   r
   )r   fr   r   r   test_not_eulerianh   s   "z%TestEulerianCircuit.test_not_eulerianN)r   r   r   r<   r?   rB   rG   rM   r   r   r   r   r    (   s    
r    c                   @      e Zd Zdd ZdS )TestIsSemiEulerianc                 C   s   t t ds
J t jdt jd}t |sJ t t dr#J t t dr-J t t dr7J t t drAJ d S )Nr   r   create_usingr   r   )r   is_semieulerianr   r   r
   r   r   r   r   r   test_is_semieuleriann   s   z'TestIsSemiEulerian.test_is_semieulerianN)r   r   r   rS   r   r   r   r   rO   m       rO   c                   @   sh   e Zd Zdd Zdd Zdd Zejde	
 e	 fdd	 Zejde	
 e	 fd
d ZdS )TestHasEulerianPathc                 C   sT   t t ds
J t t dsJ t t dsJ t t ds(J d S )Nr   r   r   r   )r   has_eulerian_pathr
   r   r   r   r   r   test_has_eulerian_path_cyclic|   s   z1TestHasEulerianPath.test_has_eulerian_path_cyclicc                 C   s6   t t ds
J t jdt jd}t |sJ d S )Nr   r   rP   )r   rV   r   r   r   r   r   r   !test_has_eulerian_path_non_cyclic   s   z5TestHasEulerianPath.test_has_eulerian_path_non_cyclicc                 C   sd   t  }|g d t |rJ t  }|g d t |s$J |d t |r0J d S )N)r3   r0   r4   )r3   r0   r5   r   )r   r   add_edges_fromrV   add_noder   r   r   r   %test_has_eulerian_path_directed_graph   s   
z9TestHasEulerianPath.test_has_eulerian_path_directed_graphr   c                 C   s    | g d t|rJ d S )N)r3   r1   r+   rY   r   rV   r   r   r   r   +test_has_eulerian_path_not_weakly_connected      z?TestHasEulerianPath.test_has_eulerian_path_not_weakly_connectedc                 C   s    | ddg t|rJ d S Nr3   r1   r\   r   r   r   r   2test_has_eulerian_path_unbalancedins_more_than_one   r^   zFTestHasEulerianPath.test_has_eulerian_path_unbalancedins_more_than_oneN)r   r   r   rW   rX   r[   rI   markparametrizer   r   r   r]   r`   r   r   r   r   rU   {   s    
rU   c                   @   rN   )TestFindPathStartc                 C   sj   t jjj}t jdt jd}||dksJ g d}|t |dks$J g d}|t |d u s3J d S )Nr   rP   r   )r3   r0   r5   r   r   r   )r3   r0   r1   )r   r   )r   
algorithmseuler_find_path_startr   r   )r   find_path_startr   r:   r   r   r   testfind_path_start   s   
z%TestFindPathStart.testfind_path_startN)r   r   r   ri   r   r   r   r   rc      rT   rc   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestEulerianPathc                 C   s8   g d}t |tt|D ]
\}}||ksJ qd S )N)rd   r3   r0   r5   )zipr   eulerian_pathr   )r   xe1e2r   r   r   test_eulerian_path   s   z#TestEulerianPath.test_eulerian_pathc                 C   s
  t  }g d}|| |tt |ksJ |tt j|ddks%J tt j tt j|dd W d    n1 s?w   Y  tt j tt j|dd W d    n1 s^w   Y  tt j tt j|dd W d    d S 1 s~w   Y  d S )Nr0   r1   r   r   )r   r   r   r!   r   r   r   )r   r   rY   r7   rl   rI   rJ   rK   r   r   resultr   r   r    test_eulerian_path_straight_link   s   
"z1TestEulerianPath.test_eulerian_path_straight_linkc                 C      t  }g d}|| |tt |ksJ |tt j|ddks%J tt j tt j|dd W d    n1 s?w   Y  tt j tt j|dd W d    d S 1 s_w   Y  d S )N)r,   r0   r,   r0   r1   rr   r   r   r   r!   r   r   )r   r   rY   r7   rl   rI   rJ   rK   rs   r   r   r   test_eulerian_path_multigraph      
"z.TestEulerianPath.test_eulerian_path_multigraphc                 C   s   t  }g d}g d}g d}|| |tt |ks J |tt j|ddks-J |tt j|ddks:J |tt j|ddksGJ d S )N)r0   r1   rr   r   r   )r1   rr   rz   r0   )rr   rz   r0   r1   r   r!   r   r   )r   r   rY   r7   rl   )r   r   rt   result2result3r   r   r   #test_eulerian_path_eulerian_circuit   s   
z4TestEulerianPath.test_eulerian_path_eulerian_circuitc                 C   s   t  }g d}g d}|| tt |||fv sJ |tt j|ddks+J |tt j|ddks8J tt j tt j|dd W d    n1 sRw   Y  tt j tt j|dd W d    d S 1 srw   Y  d S )Nrq   ))r   r   rw   r+   r,   r   r!   r   r   r   )r   r   rY   r7   rl   rI   rJ   rK   )r   r   rt   r{   r   r   r   test_eulerian_path_undirected   s   
"z.TestEulerianPath.test_eulerian_path_undirectedc                 C   rv   )N)r,   r0   r,   r0   r1   rr   r   r!   r   r   )r   rA   rY   r7   rl   rI   rJ   rK   rs   r   r   r   (test_eulerian_path_multigraph_undirected   ry   z9TestEulerianPath.test_eulerian_path_multigraph_undirectedN)	r   r   r   rp   ru   rx   r}   r~   r   r   r   r   r   rj      s    rj   c                   @   sD   e 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S )TestEulerizec                 C   sJ   t tj tddg}t| W d    d S 1 sw   Y  d S r_   )rI   rJ   r   rK   from_edgelisteulerizer   r   r   r   test_disconnected   s   "zTestEulerize.test_disconnectedc                 C   @   t tj tt  W d    d S 1 sw   Y  d S N)rI   rJ   r   NetworkXPointlessConceptr   r   r   r   r   r   test_null_graph      "zTestEulerize.test_null_graphc                 C   r   r   )rI   rJ   r   r   r   rA   r   r   r   r   test_null_multigraph   r   z!TestEulerize.test_null_multigraphc                 C   sB   t tj ttd W d    d S 1 sw   Y  d S Nr   )rI   rJ   r   rK   r   empty_graphr   r   r   r   test_on_empty_graph  s   "z TestEulerize.test_on_empty_graphc                 C   s(   t d}t |}t ||sJ d S r   )r   r6   r   is_isomorphicr   r   Hr   r   r   test_on_eulerian  s   

zTestEulerize.test_on_eulerianc                 C   s8   t t d}|dd t |}t |sJ d S )Nr   r   r   )r   rA   r6   r   r   r	   r   r   r   r   test_on_eulerian_multigraph
  s   
z(TestEulerize.test_on_eulerian_multigraphc                 C   s<   t d}t t |sJ t t t |sJ d S rH   )r   r
   r	   r   rA   r   r   r   r   test_on_complete_graph  s   
z#TestEulerize.test_on_complete_graphN)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    r   )rE   rI   networkxr   r   r    rO   rU   rc   rj   r   r   r   r   r   <module>   s     E(B