o
    ñhž
  ã                   @   s0   d dl Z d dlZG dd„ dƒZG dd„ dƒZdS )é    Nc                   @   sP   e Zd 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 )ÚTestMinEdgeCoverz4Tests for :func:`networkx.algorithms.min_edge_cover`c                 C   s    t  ¡ }t  |¡tƒ ksJ ‚d S ©N)ÚnxÚGraphÚmin_edge_coverÚset©ÚselfÚG© r   ú[/var/www/vscode/kcb/lib/python3.10/site-packages/networkx/algorithms/tests/test_covering.pyÚtest_empty_graph	   s   z!TestMinEdgeCover.test_empty_graphc                 C   s,   t  ¡ }| dd¡ t  |¡dhksJ ‚d S )Nr   ©r   r   )r   r   Úadd_edger   r   r   r   r   Útest_graph_with_loop   s   z%TestMinEdgeCover.test_graph_with_loopc                 C   sR   t  ¡ }| d¡ tjt jdd t  |¡ W d   ƒ d S 1 s"w   Y  d S )Né   zFGraph has a node with no edge incident on it, so no edge cover exists.)Úmatch)r   r   Úadd_nodeÚpytestÚraisesÚNetworkXExceptionr   r   r   r   r   Útest_graph_with_isolated_v   s   
þ"üz+TestMinEdgeCover.test_graph_with_isolated_vc                 C   s*   t  dg¡}t  |¡dhdhfv sJ ‚d S )N©r   r   ©r   r   )r   r   r   r   r   r   r   Útest_graph_single_edge   s   z'TestMinEdgeCover.test_graph_single_edgec                 C   sT   t  d¡}t  |¡}t|ƒdksJ ‚|jD ]\}}||f|v s'||f|v s'J ‚qd S )Né   é   )r   Ú
path_graphr   ÚlenÚedges)r	   r
   Ú	min_coverÚuÚvr   r   r   Útest_graph_two_edge_path   s   

€ÿz)TestMinEdgeCover.test_graph_two_edge_pathc                 C   sœ   t  ¡ }|jg d¢dd |jg d¢dd | g d¢¡ t  |t jjjj¡}t  	||¡s/J ‚t
|ƒdks7J ‚t  |¡}t  	||¡sDJ ‚t
|ƒdksLJ ‚d S )	N)r   r   r   é   r   )Ú	bipartite)ÚaÚbÚcr   ))r   r&   )r   r'   )r   r'   )r   r(   )r   r(   )r$   r&   é   r$   )r   r   Úadd_nodes_fromÚadd_edges_fromr   Ú
algorithmsr%   ÚmatchingÚeppstein_matchingÚis_edge_coverr   )r	   r
   r    Ú
min_cover2r   r   r   Útest_bipartite_explicit&   s   ÿ
z(TestMinEdgeCover.test_bipartite_explicitc                 C   ó8   t  d¡}t  |¡}t  ||¡sJ ‚t|ƒdksJ ‚d S )Né
   é   ©r   Úcomplete_graphr   r/   r   ©r	   r
   r    r   r   r   Útest_complete_graph_even6   ó   

z)TestMinEdgeCover.test_complete_graph_evenc                 C   r2   )Né   é   r5   r7   r   r   r   Útest_complete_graph_odd<   r9   z(TestMinEdgeCover.test_complete_graph_oddN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r#   r1   r8   r<   r   r   r   r   r      s    	r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestIsEdgeCoverz3Tests for :func:`networkx.algorithms.is_edge_cover`c                 C   s   t  ¡ }t  |tƒ ¡sJ ‚d S r   )r   r   r/   r   r   r   r   r   r   F   s   z TestIsEdgeCover.test_empty_graphc                 C   s*   t  ¡ }| dd¡ t  |dh¡sJ ‚d S )Nr   ©r   r   ©r   r   r   r/   r   r   r   r   r   J   s   z$TestIsEdgeCover.test_graph_with_loopc                 C   sd   t  ¡ }| dd¡ t  |ddh¡sJ ‚t  |ddh¡sJ ‚t  |dh¡s'J ‚t  |dh¡r0J ‚d S )Nr   r   r   rB   r   r   rC   r   r   r   r   r   O   s   z&TestIsEdgeCover.test_graph_single_edgeN)r=   r>   r?   r@   r   r   r   r   r   r   r   rA   C   s
    rA   )r   Únetworkxr   r   rA   r   r   r   r   Ú<module>   s    =