o
    &?eJ$                     @   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   g/home/www/facesmatcher.com/pyenv/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succZ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_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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 r7   r"   r8   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   r1   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'   abcdZefr   r   )r   r	   rangeis_isomorphicr   r8   r   r   r   test_node_inputN   s   zTestGrid2DGraph.test_node_inputN)__name__
__module____qualname____doc__r   r   r!   r&   r0   r6   r9   r:   rA   rE   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)]
        )r1   r   )r   r1   r   r   )r   r   r   r   r   r   ))r)   r   )r   r)   r   N)r   
grid_graphr
   r   rD   
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*   	   r1   r   r   )r   rM   rC   r
   rD   )r   r   r   r   r   rE   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)r1   r*   r   r   r)   r'   )r   r   rM   r2   r3   )	r   r   r   kr4   r5   cr   Znum_er   r   r   r6   |   s   
"<z$TestGridGraph.test_periodic_iterableN)rF   rG   rH   rI   rQ   rE   r6   r   r   r   r   rJ   Y   s
    rJ   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   r1   )r   Z
null_graphrN   r-   r.   hypercube_graphr/   )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   )rC   r   rV   r   )r   r   r   r   r   r   r   r      s
   
z+TestHypercubeGraph.test_degree_distributionN)rF   rG   rH   rI   rW   r   r   r   r   r   rU      s    
rU   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   r1   r   r   r   r)   r1   r1   r1   r   r1   r   r)   r   r   N)r   triangular_lattice_graphr
   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}| 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.r1   r   r   r)   r   N)r   ra   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.r1   r   r   N)r   ra   rg   r#   r$   r%   r8   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   ra   r
   sizer,   r=   r>   r?   )r   r   ZTLGr   r   r   r0         z(TestTriangularLatticeGraph.test_periodicNrF   rG   rH   rI   rf   r!   r&   r0   r   r   r   r   rZ      s    
rZ   c                   @   rY   )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.)rL   )r   r   )r   r1   r_   r^   rK   r   r)   r   ))r   r   )r   r)   r   r   )r)   r   r)   r)   r)   r   )ry   )r   r1   )r   r   r{   r)   r1   )r)   r   )rz   r{   r|   r]   r\   r[   ))r   r   r]   r\   )r1   r   )r1   r)   r_   )r\   r[   )r   r   r_   r^   r`   N)r   hexagonal_lattice_graphr
   r-   rD   Zsubgraph)r   r   r   r   ZC_6ZhexagonsZhexagonr   r   r   rf      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.r1   r   r   posr)   r   N)r   r}   rg   r   rh   Zget_node_attributesr%   )r   r   r    r~   ri   rj   r   r   r   r!      s   z'TestHexagonalLatticeGraph.test_directedc                 C   rk   )z2Tests for creating a hexagonal lattice multigraph.r1   r   r   N)r   r}   rg   r#   r$   r%   r8   r   r   r   r&      rl   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   ro   )r1   r   rp   r   r   r   rs      rt   z;TestHexagonalLatticeGraph.test_periodic.<locals>.<listcomp>r   r   r   r   r*   r)   )r   r}   r
   ru   r,   r=   r>   r?   )r   r   ZHLGr   r   r   r0      rv   z'TestHexagonalLatticeGraph.test_periodicNrw   r   r   r   r   rx      s    rx   )rI   	itertoolsr   r=   Znetworkxr   Znetworkx.utilsr   r   rJ   rU   rZ   rx   r   r   r   r   <module>   s    N,/