o
    ˷eL$                     @   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J d S )N      )nxgrid_2d_graphlen)selfmnG r   ]/var/www/ideatree/venv/lib/python3.10/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s&J d S )Nr   r            )r   r	   degree_histogram)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sJ |j|jks$J d S Nr   create_usingr   r	   DiGraphsuccadj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s"J d S r   r   r	   
MultiGraphlistedgesr    r   r   r   test_multigraph    s    zTestGrid2DGraph.test_multigraphc              
   C   s   t jdddd}t| i ksJ 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 ||sXJ qCd S )	Nr   Tperiodicr   r         r   )r   r	   dictdegreecycle_graph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s%J | || d | || d |  ks;J qd S )N)   r+   r   r*   r(   )r   r   r	   number_of_nodes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sJ |j|jks#J 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s!J d S r9   r#   r:   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   r3   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 ||sJ t jdddd}t ||s,J t dd}t tdtd}t||sCJ d S )	Nr   r   Tr(   abcdefr   r   )r   r	   rangeis_isomorphicr   r:   r   r   r   test_node_inputN   s   zTestGrid2DGraph.test_node_inputN)__name__
__module____qualname____doc__r   r   r"   r'   r2   r8   r;   r<   rC   rH   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 ]1\}}||g}t |}t||| ksJ t |dddd||  d |d |d  gks3J qdD ]"\}}||g}t |}t||| ksMJ t |t dsXJ q6d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)]
        )r3   r   )r   r3   r   r   )r   r   r   r   r   r   ))r*   r   )r   r*   r   N)r   
grid_graphr
   r   rG   
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J t |t ddgs"J d S )Nr+   	   r3   r   r   )r   rP   rF   r
   rG   )r   r   r   r   r   rH   w   s   zTestGridGraph.test_node_inputc           	      C   s   d\}}}t ddgddgddgD ]D\}}}tj|||g|||fd}|| d | | || d | |  || d | |  }| || | ksMJ | |ksUJ qd S )N)r3   r+   r   r   r*   r(   )r   r   rP   r4   r5   )	r   r   r   kr6   r7   cr   num_er   r   r   r8   |   s   
"<z$TestGridGraph.test_periodic_iterableN)rI   rJ   rK   rL   rT   rH   r8   r   r   r   r   rM   Y   s
    rM   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 ||s)J qd S )Nr   r*   r   r   r3   )r   
null_graphrQ   r.   r0   hypercube_graphr1   )r   r   r!   r   r   r   r   test_special_cases   s   


z%TestHypercubeGraph.test_special_casesc                 C   sD   t ddD ]}t|}dg| d| g }t||ksJ qd S )Nr*   
   r   r   )rF   r   r[   r   )r   r   r   r   r   r   r   r      s
   
z+TestHypercubeGraph.test_degree_distributionN)rI   rJ   rK   rL   r\   r   r   r   r   r   rY      s    
rY   c                   @   0   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 ](\}}t ||}|d d }t||d d|  |d |d d   ks*J q| D ]R\}}|||f }||k rG|d |f|v sGJ ||k rU||d f|v sUJ ||k r|dksa|d r||k sk|d d r|d |d f|v s|d |d f|v sJ q/dS )z4Tests that the graph is really a triangular lattice.)r   r3   r   r   r   r*   r3   r3   r3   r   r3   r   r*   r   r   N)r   triangular_lattice_graphr
   nodes)r   r   r   r   Nij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}| sJ | D ] \}}|d |d ks,J |d |d kr>|d |d ks>J qdS )z1Tests for creating a directed triangular lattice.r3   r   r   r*   r   N)r   rf   Graphr   is_directedr&   )r   r   r!   uvr   r   r   r"      s   z(TestTriangularLatticeGraph.test_directedc                 C   H   t jddt  d}t jddt  d}t| t| ks"J dS )z3Tests for creating a triangular lattice multigraph.r3   r   r   N)r   rf   rm   r$   r%   r&   r:   r   r   r   r'          z*TestTriangularLatticeGraph.test_multigraphc                 C   s   t jdddd}t|dksJ | dksJ tdd | D d	ks'J 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      g | ]
\}}|d kr|qS )r   r   .0r   dr   r   r   
<listcomp>       z<TestTriangularLatticeGraph.test_periodic.<locals>.<listcomp>r   r   r+   r   )r   rf   r
   sizer-   r?   r@   rA   )r   r   TLGr   r   r   r2         z(TestTriangularLatticeGraph.test_periodicNrI   rJ   rK   rL   rl   r"   r'   r2   r   r   r   r   r_      s    
r_   c                   @   r^   )TestHexagonalLatticeGraphzETests for :func:`networkx.generators.lattice.hexagonal_lattice_graph`c                 C   s   dD ]\}}t ||}t|d|d  |d  d ksJ qt d}g dg dg dg dg d	g}|D ]}t |||sDJ q7d
S )z3Tests that the graph is really a hexagonal lattice.)rO   )r   r   )r   r3   rd   rc   rN   r   r*   r   ))r   r   )r   r*   r   r   )r*   r   r*   r*   r*   r   )r   )r   r3   )r   r   r   r*   r3   )r*   r   )r   r   r   rb   ra   r`   ))r   r   rb   ra   )r3   r   )r3   r*   rd   )ra   r`   )r   r   rd   rc   re   N)r   hexagonal_lattice_graphr
   r.   rG   subgraph)r   r   r   r   C_6hexagonshexagonr   r   r   rl      s   &
z-TestHexagonalLatticeGraph.test_lattice_pointsc                 C   s   t jddt  d}t jddt  d}| sJ t |d}| D ],\}}|| d || d ks6J || d || d krP|| d || d ksPJ q$dS )z0Tests for creating a directed hexagonal lattice.r3   r   r   posr*   r   N)r   r   rm   r   rn   get_node_attributesr&   )r   r   r!   r   ro   rp   r   r   r   r"      s   z'TestHexagonalLatticeGraph.test_directedc                 C   rq   )z2Tests for creating a hexagonal lattice multigraph.r3   r   r   N)r   r   rm   r$   r%   r&   r:   r   r   r   r'      rr   z)TestHexagonalLatticeGraph.test_multigraphc                 C   s   t jdddd}t|dksJ | dksJ tdd | D d	ks'J 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   ru   )r3   r   rv   r   r   r   ry      rz   z;TestHexagonalLatticeGraph.test_periodic.<locals>.<listcomp>r   r   r   r   r+   r*   )r   r   r
   r{   r-   r?   r@   rA   )r   r   HLGr   r   r   r2      r}   z'TestHexagonalLatticeGraph.test_periodicNr~   r   r   r   r   r      s    r   )rL   	itertoolsr   r?   networkxr   networkx.utilsr   r   rM   rY   r_   r   r   r   r   r   <module>   s    N,/