U
    ?hi)                     @   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tt t ds(tt t ds<tt t dsPtt t drdtt t drxtt t drtt t drtt t  rtt t drtd S )N               )nxis_euleriancomplete_graphAssertionErrorhypercube_graphZpetersen_graph
path_graphself r   V/var/www/html/venv/lib/python3.8/site-packages/networkx/algorithms/tests/test_euler.pytest_is_eulerian	   s    zTestIsEulerian.test_is_eulerianc                 C   s   t  }|dddg t |r&tt  }|dddg t |rLtt  }|dd |dd |dd |dd t |rtd S )N      r   )r   GraphZadd_nodes_fromr	   r   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   s4  t d}tt j|dd}dd |D }|ddddgks>t|d	d
ddgksRttt j|dd}dd |D }|ddddgkst|ddddgkstt d}tt j|dd}dd |D }|dddgkst|dddgksttt j|dd}dd |D }|dddgkst|dddgks0td S )Nr   r   sourcec                 S   s   g | ]\}}|qS r   r   .0uvr   r   r   
<listcomp>-   s     zCTestEulerianCircuit.test_eulerian_circuit_cycle.<locals>.<listcomp>r   r   r   r   r   r   r   r   r   r   r   c                 S   s   g | ]\}}|qS r   r   r"   r   r   r   r&   2   s     r   r   r   r   r   r   r   r   c                 S   s   g | ]\}}|qS r   r   r"   r   r   r   r&   9   s     r   r   c                 S   s   g | ]\}}|qS r   r   r"   r   r   r   r&   >   s     r   r   )r   cycle_graphlisteulerian_circuitr   r
   r   r   edgesZnodesr   r   r   test_eulerian_circuit_cycle)   s$    

z/TestEulerianCircuit.test_eulerian_circuit_cyclec                 C   s   t  }t |ddddg tt j|dd}dd |D }|ddddgksPt|dd	d
dgksdttt j|dd}dd |D }|ddddgkst|d	d
ddgkstd S )Nr   r   r   r   r    c                 S   s   g | ]\}}|qS r   r   r"   r   r   r   r&   G   s     zETestEulerianCircuit.test_eulerian_circuit_digraph.<locals>.<listcomp>r.   r+   r,   r-   c                 S   s   g | ]\}}|qS r   r   r"   r   r   r   r&   L   s     )r   r   	add_cycler2   r3   r   r4   r   r   r   test_eulerian_circuit_digraphB   s    z1TestEulerianCircuit.test_eulerian_circuit_digraphc                 C   s   t  }t |ddddg |dd |dd tt j|dd}dd |D }|ddddddgkslt|dd	d
dd
dgkstd S )Nr   r   r   r   r    c                 S   s   g | ]\}}|qS r   r   r"   r   r   r   r&   V   s     z7TestEulerianCircuit.test_multigraph.<locals>.<listcomp>r'   r(   r)   r+   r*   )r   
MultiGraphr7   r   r2   r3   r   r4   r   r   r   test_multigraphP   s    z#TestEulerianCircuit.test_multigraphc                 C   s   t  }t |ddddg |dd |dd tt j|ddd}dd |D }|ddddddgksnt|d d d	d
gkstt|dd tdddgkst|dd  dgkst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   r9   r7   r   r2   r3   r   collectionsCounterr4   r   r   r   test_multigraph_with_keysZ   s    
z-TestEulerianCircuit.test_multigraph_with_keysc              	   C   s0   t tj tttd}W 5 Q R X d S Nr   )pytestraisesr   NetworkXErrorr2   r3   r
   )r   fr   r   r   test_not_eulerianh   s    z%TestEulerianCircuit.test_not_eulerianN)r   r   r   r6   r8   r:   r?   rE   r   r   r   r   r   (   s
   
r   c                   @   s   e Zd Zdd ZdS )TestIsSemiEulerianc                 C   s   t t dstt jdt jd}t |s2tt t drFtt t drZtt t drntt t drtd S )Nr   r   Zcreate_usingr   r   )r   Zis_semieulerianr   r   r   r
   r   r   r   r   r   test_is_semieuleriann   s    z'TestIsSemiEulerian.test_is_semieulerianN)r   r   r   rH   r   r   r   r   rF   m   s   rF   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tt t ds(tt t ds<tt t dsPtd S )Nr   r   r   r   )r   has_eulerian_pathr
   r   r   r   r   r   r   test_has_eulerian_path_cyclic|   s    z1TestHasEulerianPath.test_has_eulerian_path_cyclicc                 C   s6   t t dstt jdt jd}t |s2td S )Nr   r   rG   )r   rJ   r   r   r   r   r   r   r   !test_has_eulerian_path_non_cyclic   s    z5TestHasEulerianPath.test_has_eulerian_path_non_cyclicc                 C   sh   t  }|dddg t |r&tt  }|dddg t |sLt|d t |rdtd S )Nr.   r+   r/   r0   r   )r   r   add_edges_fromrJ   r   add_noder   r   r   r   %test_has_eulerian_path_directed_graph   s    
z9TestHasEulerianPath.test_has_eulerian_path_directed_graphr   c                 C   s"   | dddg t|rtd S )Nr.   r,   r(   rM   r   rJ   r   r   r   r   r   +test_has_eulerian_path_not_weakly_connected   s    z?TestHasEulerianPath.test_has_eulerian_path_not_weakly_connectedc                 C   s    | ddg t|rtd S Nr.   r,   rP   r   r   r   r   2test_has_eulerian_path_unbalancedins_more_than_one   s    zFTestHasEulerianPath.test_has_eulerian_path_unbalancedins_more_than_oneN)r   r   r   rK   rL   rO   rA   markZparametrizer   r   r   rQ   rS   r   r   r   r   rI   {   s   
rI   c                   @   s   e Zd Zdd ZdS )TestFindPathStartc                 C   sr   t jjj}t jdt jd}||dks*tddddg}|t |dksLtddd	d
g}|t |d ksntd S )Nr   rG   r   r.   r+   r0   r   r   r   r,   )r   r   )r   Z
algorithmsZeulerZ_find_path_startr   r   r   )r   Zfind_path_startr   r5   r   r   r   testfind_path_start   s    
z%TestFindPathStart.testfind_path_startN)r   r   r   rW   r   r   r   r   rU      s   rU   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   s<   ddddg}t |tt|D ]\}}||ks"tq"d S )NrV   r.   r+   r0   )zipr   eulerian_pathr   r   )r   xe1e2r   r   r   test_eulerian_path   s    z#TestEulerianPath.test_eulerian_pathc              	   C   s   t  }ddddg}|| |tt |ks4t|tt j|ddksNttt j tt j|dd W 5 Q R X tt j tt j|dd W 5 Q R X tt j tt j|d	d W 5 Q R X d S )
Nr+   r,   r   r   r   r   r   r    r   r   r   )	r   r   rM   r2   rZ   r   rA   rB   rC   r   r   resultr   r   r    test_eulerian_path_straight_link   s    
z1TestEulerianPath.test_eulerian_path_straight_linkc              	   C   s   t  }dddddddg}|| |tt |ks:t|tt j|ddksTttt j tt j|dd W 5 Q R X tt j tt j|d	d W 5 Q R X d S )
Nr)   r+   r,   r_   r   r   r   r    r   r   )	r   r   rM   r2   rZ   r   rA   rB   rC   ra   r   r   r   test_eulerian_path_multigraph   s    
z.TestEulerianPath.test_eulerian_path_multigraphc                 C   s   t  }ddddg}ddddg}ddddg}|| |tt |ksLt|tt j|ddksft|tt j|ddkst|tt j|ddkstd S )	Nr+   r,   r_   )r   r   r   r    r   r   )r   r   rM   r2   rZ   r   )r   r   rb   result2Zresult3r   r   r   #test_eulerian_path_eulerian_circuit   s    
z4TestEulerianPath.test_eulerian_path_eulerian_circuitc              	   C   s   t  }ddddg}ddddg}|| tt |||fksDt|tt j|d	d
ks^t|tt j|dd
ksxttt j tt j|dd
 W 5 Q R X tt j tt j|dd
 W 5 Q R X d S )Nr+   r,   r_   r`   )r   r   rd   r(   r)   r   r    r   r   r   )	r   r   rM   r2   rZ   r   rA   rB   rC   )r   r   rb   rf   r   r   r   test_eulerian_path_undirected   s    
z.TestEulerianPath.test_eulerian_path_undirectedc              	   C   s   t  }ddddddg}|| |tt |ks8t|tt j|ddksRttt j tt j|dd W 5 Q R X tt j tt j|dd W 5 Q R X d S )	Nr)   r+   r,   r_   r   r    r   r   )	r   r9   rM   r2   rZ   r   rA   rB   rC   ra   r   r   r   (test_eulerian_path_multigraph_undirected   s    
z9TestEulerianPath.test_eulerian_path_multigraph_undirectedN)	r   r   r   r^   rc   re   rg   rh   ri   r   r   r   r   rX      s   rX   c                   @   sL   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d Z
dS )TestEulerizec              	   C   s4   t tj tddg}t| W 5 Q R X d S rR   )rA   rB   r   rC   Zfrom_edgelisteulerizer   r   r   r   test_disconnected   s    zTestEulerize.test_disconnectedc              	   C   s*   t tj tt  W 5 Q R X d S N)rA   rB   r   NetworkXPointlessConceptrk   r   r   r   r   r   test_null_graph   s    zTestEulerize.test_null_graphc              	   C   s*   t tj tt  W 5 Q R X d S rm   )rA   rB   r   rn   rk   r9   r   r   r   r   test_null_multigraph   s    z!TestEulerize.test_null_multigraphc              	   C   s,   t tj ttd W 5 Q R X d S Nr   )rA   rB   r   rC   rk   Zempty_graphr   r   r   r   test_on_empty_graph  s    z TestEulerize.test_on_empty_graphc                 C   s(   t d}t |}t ||s$td S rq   )r   r1   rk   Zis_isomorphicr   r   r   Hr   r   r   test_on_eulerian  s    

zTestEulerize.test_on_eulerianc                 C   s8   t t d}|dd t |}t |s4td S )Nr   r   r   )r   r9   r1   r   rk   r	   r   rs   r   r   r   test_on_eulerian_multigraph
  s    
z(TestEulerize.test_on_eulerian_multigraphc                 C   s<   t d}t t |stt t t |s8td S r@   )r   r
   r	   rk   r   r9   r   r   r   r   test_on_complete_graph  s    
z#TestEulerize.test_on_complete_graphc                 C   s   t 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 |rtt |}t |stt |dkstd S )N   r         r                                 '   )r   r1   r   r	   r   rk   Znumber_of_edgesr   r   r   r   test_on_non_eulerian_graph  s$    

z'TestEulerize.test_on_non_eulerian_graphN)r   r   r   rl   ro   rp   rr   ru   rv   rw   r   r   r   r   r   rj      s   rj   )r=   rA   Znetworkxr   r   r   rF   rI   rU   rX   rj   r   r   r   r   <module>   s    E(B