U
    ?hJ$                     @   sv   d Z ddlmZ ddlZddlZddlm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 )z=Unit tests for the :mod:`networkx.generators.lattice` module.    )productN)edges_equalc                   @   s`   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d Zdd ZdS )TestGrid2DGraphz@Unit tests for :func:`networkx.generators.lattice.grid_2d_graph`c                 C   s,   d\}}t ||}t||| ks(td S )N      )nxgrid_2d_graphlenAssertionError)selfmnG r   X/var/www/html/venv/lib/python3.8/site-packages/networkx/generators/tests/test_lattice.pytest_number_of_vertices   s    z'TestGrid2DGraph.test_number_of_verticesc                 C   sP   d\}}t ||}dddd||  d |d |d  g}t ||ksLtd S )Nr   r            )r   r	   degree_histogramr   )r   r   r   r   expected_histogramr   r   r   test_degree_distribution   s    &z(TestGrid2DGraph.test_degree_distributionc                 C   sL   d\}}t ||}t j||t  d}|j|jks8t|j|jksHtd S Nr   create_usingr   r	   DiGraphsuccZadjr   predr   r   r   r   Hr   r   r   test_directed   s
    zTestGrid2DGraph.test_directedc                 C   sH   d\}}t ||}t j||t  d}t| t| ksDtd S r   r   r	   
MultiGraphlistedgesr   r    r   r   r   test_multigraph    s    zTestGrid2DGraph.test_multigraphc              
   C   s   t jdddd}t| i ks$tddt dfddt dfddt dfddt dfddt dfddt  fddt  ffD ]*\}}}t j||dd}t ||stqd S )	Nr   Tperiodicr   r         r   )	r   r	   dictdegreer   cycle_graphZcircular_ladder_graphcubical_graphcould_be_isomorphic)r   r   r   r   r!   r   r   r   test_periodic&   s    	zTestGrid2DGraph.test_periodicc                 C   s|   d\}}t ddgddgD ]\\}}tj||||fd}| || ksJt| || d | || d |  kstqd S )N)   r+   r   r*   r(   )r   r   r	   number_of_nodesr   number_of_edges)r   r   r   abr   r   r   r   test_periodic_iterable6   s
    z&TestGrid2DGraph.test_periodic_iterablec                 C   sJ   t jdddd}t jdddt  d}|j|jks6t|j|jksFtd S Nr   r   Tr(   )r)   r   r   r   r   r!   r   r   r   test_periodic_directed=   s    z&TestGrid2DGraph.test_periodic_directedc                 C   sF   t jdddd}t jdddt  d}t| t| ksBtd S r8   r#   r9   r   r   r   test_periodic_multigraphC   s    z(TestGrid2DGraph.test_periodic_multigraphc                 C   sP   t tjtjdd t tjtjdd t ttjdd t ttjdd d S )Nr   r2   gffffff
@g@)pytestraisesr   NetworkXErrorr	   	TypeError)r   r   r   r   test_exceptionsH   s    zTestGrid2DGraph.test_exceptionsc                 C   s   t jdddd}t jtdtddd}t ||s8tt jdddd}t ||sXtt dd}t tdtd}t||std S )	Nr   r   Tr(   abcdZefr   r   )r   r	   rangeis_isomorphicr   r   r9   r   r   r   test_node_inputN   s    zTestGrid2DGraph.test_node_inputN)__name__
__module____qualname____doc__r   r   r"   r'   r1   r7   r:   r;   rB   rF   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 )	TestGridGraphz=Unit tests for :func:`networkx.generators.lattice.grid_graph`c              	   C   s   dD ]b\}}||g}t |}t||| ks2tt |dddd||  d |d |d  gkstqdD ]D\}}||g}t |}t||| kstt |t dsltqldS )	zgrid_graph([n,m]) is a connected simple graph with the
        following properties:
        number_of_nodes = n*m
        degree_histogram = [0,0,4,2*(n+m)-8,(n-2)*(m-2)]
        )r2   r   )r   r2   r   r   )r   r   r   r   r   r   ))r*   r   )r   r*   r   N)r   
grid_graphr
   r   r   rE   
path_graph)r   r   r   dimgr   r   r   test_grid_graph\   s     

zTestGridGraph.test_grid_graphc                 C   sH   t tddtddg}t|dks*tt |t ddgsDtd S )Nr+   	   r2   r   r   )r   rN   rD   r
   r   rE   )r   r   r   r   r   rF   w   s    zTestGridGraph.test_node_inputc           	      C   s   d\}}}t ddgddgddgD ]\}}}tj|||g|||fd}|| d | | || d | |  || d | |  }| || | kst| |ks"tq"d S )N)r2   r+   r   r   r*   r(   )r   r   rN   r3   r   r4   )	r   r   r   kr5   r6   cr   Znum_er   r   r   r7   |   s    
"<z$TestGridGraph.test_periodic_iterableN)rG   rH   rI   rJ   rR   rF   r7   r   r   r   r   rK   Y   s   rK   c                   @   s    e Zd ZdZdd Zdd ZdS )TestHypercubeGraphzBUnit tests for :func:`networkx.generators.lattice.hypercube_graph`c                 C   sX   dt  fdt dfdt dfdt  ffD ]"\}}t |}t ||s0tq0d S )Nr   r*   r   r   r2   )r   Z
null_graphrO   r.   r/   hypercube_graphr0   r   )r   r   r!   r   r   r   r   test_special_cases   s    


z%TestHypercubeGraph.test_special_casesc                 C   sD   t ddD ]4}t|}dg| d| g }t||ks
tq
d S )Nr*   
   r   r   )rD   r   rW   r   r   )r   r   r   r   r   r   r   r      s    
z+TestHypercubeGraph.test_degree_distributionN)rG   rH   rI   rJ   rX   r   r   r   r   r   rV      s   
rV   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestTriangularLatticeGraphzFTests for :func:`networkx.generators.lattice.triangular_lattice_graph`c                 C   s  dD ]P\}}t ||}|d d }t||d d|  |d |d d   kstq| D ]\}}|||f }||k r|d |f|kst||k r||d f|kst||k r^|dks|d r^||k s|d d r^|d |d f|ks^|d |d f|ks^tq^dS )z4Tests that the graph is really a triangular lattice.)r   r2   r   r   r   r*   r2   r2   r2   r   r2   r   r*   r   r   N)r   triangular_lattice_graphr
   r   Znodes)r   r   r   r   NijZnbrsr   r   r   test_lattice_points   s    2,z.TestTriangularLatticeGraph.test_lattice_pointsc                 C   s   t jddt  d}t jddt  d}| s4t| D ]@\}}|d |d ksXt|d |d kr<|d |d ks<tq<dS )z1Tests for creating a directed triangular lattice.r2   r   r   r*   r   N)r   ra   Graphr   is_directedr   r&   )r   r   r!   uvr   r   r   r"      s    z(TestTriangularLatticeGraph.test_directedc                 C   sH   t jddt  d}t jddt  d}t| t| ksDtdS )z3Tests for creating a triangular lattice multigraph.r2   r   r   N)r   ra   rf   r$   r%   r&   r   r9   r   r   r   r'      s    z*TestTriangularLatticeGraph.test_multigraphc                 C   s   t jdddd}t|dks t| dks0ttdd | D d	ksNtt jd
ddd}t j}tjt j|dddd tjt j|dddd tjt j|dddd d S )Nr   r   Tr(      $   c                 S   s   g | ]\}}|d kr|qS )r   r   .0r   dr   r   r   
<listcomp>   s      z<TestTriangularLatticeGraph.test_periodic.<locals>.<listcomp>r   r   r+   r   )	r   ra   r
   r   sizer-   r>   r?   r@   )r   r   ZTLGr   r   r   r1      s    z(TestTriangularLatticeGraph.test_periodicNrG   rH   rI   rJ   re   r"   r'   r1   r   r   r   r   rZ      s
   
rZ   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestHexagonalLatticeGraphzETests for :func:`networkx.generators.lattice.hexagonal_lattice_graph`c              
   C   s   dD ]8\}}t ||}t|d|d  |d  d kstqt d}ddddd	d
gdddd
ddgd	d
ddddgddddddgddddddgg}|D ]}t |||stqdS )z3Tests that the graph is really a hexagonal lattice.)rM   )r   r   )r   r2   r_   r^   rL   r   r*   r   )r   r   )r   r*   )r   r   )r*   r   )r*   r*   )r*   r   )r   r2   )r   r   )r*   r2   )r*   r   r]   r\   r[   )r   r   )r2   r   )r2   r*   r_   )r   r   r^   r`   N)r   hexagonal_lattice_graphr
   r   r.   rE   Zsubgraph)r   r   r   r   ZC_6ZhexagonsZhexagonr   r   r   re      s    &
z-TestHexagonalLatticeGraph.test_lattice_pointsc                 C   s   t jddt  d}t jddt  d}| s4tt |d}| D ]X\}}|| d || d kslt|| d || d krH|| d || d ksHtqHdS )z0Tests for creating a directed hexagonal lattice.r2   r   r   posr*   r   N)r   rs   rf   r   rg   r   Zget_node_attributesr&   )r   r   r!   rt   rh   ri   r   r   r   r"      s    z'TestHexagonalLatticeGraph.test_directedc                 C   sH   t jddt  d}t jddt  d}t| t| ksDtdS )z2Tests for creating a hexagonal lattice multigraph.r2   r   r   N)r   rs   rf   r$   r%   r&   r   r9   r   r   r   r'      s    z)TestHexagonalLatticeGraph.test_multigraphc                 C   s   t jdddd}t|dks t| dks0ttdd | D d	ksNtt jd
ddd}t j}tjt j|dddd tjt j|dddd tjt j|dddd d S )Nr   r   Tr(   0   H   c                 S   s   g | ]\}}|d kr|qS )r2   r   rl   r   r   r   ro      s      z;TestHexagonalLatticeGraph.test_periodic.<locals>.<listcomp>r   r   r   r   r+   r*   )	r   rs   r
   r   rp   r-   r>   r?   r@   )r   r   ZHLGr   r   r   r1      s    z'TestHexagonalLatticeGraph.test_periodicNrq   r   r   r   r   rr      s
   rr   )rJ   	itertoolsr   r>   Znetworkxr   Znetworkx.utilsr   r   rK   rV   rZ   rr   r   r   r   r   <module>   s   N,/