
    fiJ$                         d Z ddlmZ ddlZddlZddlmZ  G d d          Z G d d          Z	 G d	 d
          Z
 G d d          Z G d d          ZdS )z=Unit tests for the :mod:`networkx.generators.lattice` module.    )productN)edges_equalc                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestGrid2DGraphz@Unit tests for :func:`networkx.generators.lattice.grid_2d_graph`c                 j    d\  }}t          j        ||          }t          |          ||z  k    sJ d S )N      )nxgrid_2d_graphlen)selfmnGs       ~/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/networkx/generators/tests/test_lattice.pytest_number_of_verticesz'TestGrid2DGraph.test_number_of_vertices   s8    1Q""1vvQ    c                     d\  }}t          j        ||          }dddd||z   z  dz
  |dz
  |dz
  z  g}t          j        |          |k    sJ d S )Nr   r            )r   r   degree_histogram)r   r   r   r   expected_histograms        r   test_degree_distributionz(TestGrid2DGraph.test_degree_distribution   sj    1Q""AqAE{QQ1q58IJ"1%%);;;;;;;r   c                     d\  }}t          j        ||          }t          j        ||t          j                              }|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   Hs        r   test_directedzTestGrid2DGraph.test_directed   s`    1Q""Q
===vvr   c                    d\  }}t          j        ||          }t          j        ||t          j                              }t          |                                          t          |                                          k    sJ d S r   r   r   
MultiGraphlistedgesr%   s        r   test_multigraphzTestGrid2DGraph.test_multigraph    sm    1Q""Q@@@AGGII$qwwyy//111111r   c           
          t          j        ddd          }t          |                                          i k    sJ ddt          j        d          fddt          j        d          fddt          j        d          fddt          j        d          fddt          j        d          fddt          j                    fddt          j                    ffD ]4\  }}}t          j        ||d          }t          j        ||          sJ 5d 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&   s        r   test_periodiczTestGrid2DGraph.test_periodic&   s   QD111AHHJJ2%%%% 2>!$$%2>!$$%2>!$$%2+A../2+A../2#%%&2#%%&
 
	0 
	0GAq!  A555A)!Q//////
	0 
	0r   c                    d\  }}t          ddgddg          D ]j\  }}t          j        ||||f          }|                                ||z  k    sJ |                                ||z   dz
  |z  ||z   dz
  |z  z   k    sJ kd S )N)   r2   r   r1   r/   )r   r   r   number_of_nodesnumber_of_edges)r   r   r   abr   s         r   test_periodic_iterablez&TestGrid2DGraph.test_periodic_iterable6   s    1QFQF++ 	L 	LDAq AA777A$$&&!a%////$$&&1q519/QUQY!O*KKKKKK	L 	Lr   c                     t          j        ddd          }t          j        dddt          j                              }|j        |j        k    sJ |j        |j        k    sJ d S Nr   r   Tr/   )r0   r   r    r   r   r&   s      r   test_periodic_directedz&TestGrid2DGraph.test_periodic_directed=   s^    QD111QDrz||LLLvvr   c                    t          j        ddd          }t          j        dddt          j                              }t          |                                          t          |                                          k    sJ d S rB   r)   rC   s      r   test_periodic_multigraphz(TestGrid2DGraph.test_periodic_multigraphC   sk    QD111QDr}OOOAGGII$qwwyy//111111r   c                 J   t          j        t          j        t          j        dd           t          j        t          j        t          j        dd           t          j        t
          t          j        dd           t          j        t
          t          j        dd           d S )Nr   r;   gffffff
@g@)pytestraisesr   NetworkXErrorr   	TypeError)r   s    r   test_exceptionszTestGrid2DGraph.test_exceptionsH   sr    b&(8"a@@@b&(8!R@@@i!13:::i!11c:::::r   c                    t          j        ddd          }t          j        t          d          t          d          d          }t          j        ||          sJ t          j        ddd          }t          j        ||          sJ t          j        dd          }t          j        t          d          t          d                    }t	          ||          sJ d S )	Nr   r   Tr/   abcdefr	   r
   )r   r   rangeis_isomorphicr   rC   s      r   test_node_inputzTestGrid2DGraph.test_node_inputN   s    QD111U1XXuQxx$???1%%%%%VTD9991%%%%%Q""U1XXuQxx001a       r   N)__name__
__module____qualname____doc__r   r   r'   r-   r9   r@   rD   rF   rN   rT    r   r   r   r      s        JJ  
< < <  2 2 20 0 0 L L L  2 2 2
; ; ;! ! ! ! !r   r   c                   $    e Zd ZdZd Zd Zd ZdS )TestGridGraphz=Unit tests for :func:`networkx.generators.lattice.grid_graph`c           	         dD ]f\  }}||g}t          j        |          }t          |          ||z  k    sJ t          j        |          dddd||z   z  dz
  |dz
  |dz
  z  gk    sJ gdD ]^\  }}||g}t          j        |          }t          |          ||z  k    sJ t          j        |t          j        d                    sJ _d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)]
        )r;   r	   )r	   r;   r   r	   )r	   r   r   r   r   r   ))r1   r	   )r	   r1   r	   N)r   
grid_graphr   r   rS   
path_graph)r   r   r   dimgs        r   test_grid_graphzTestGridGraph.test_grid_graph\   s    5 
	 
	DAqa&Cc""Aq66QU????&q))QUaQ1q5!.      % 	9 	9DAqa&Cc""Aq66QU????#Ar}Q'7'7888888		9 	9r   c                     t          j        t          dd          t          dd          g          }t          |          dk    sJ t          j        |t          j        ddg                    sJ d S )Nr2   	   r;   r
   r   )r   r_   rR   r   rS   )r   r   s     r   rT   zTestGridGraph.test_node_inputw   sf    M5A;;a4551vv2=!Q#8#89999999r   c                 R   d\  }}}t          ddgddgddg          D ]\  }}}t          j        |||g|||f          }||z   dz
  |z  |z  ||z   dz
  |z  |z  z   ||z   dz
  |z  |z  z   }|                                ||z  |z  k    sJ |                                |k    sJ d S )N)r;   r2   r	   r   r1   r/   )r   r   r_   r<   r=   )	r   r   r   kr>   r?   cr   num_es	            r   r@   z$TestGridGraph.test_periodic_iterable|   s    1a1v1v1v66 	0 	0GAq!q!Qi1a)<<<AUQY!Oa'1q519/A*==QaRS@SSE$$&&!a%!)3333$$&&%/////		0 	0r   N)rU   rV   rW   rX   rc   rT   r@   rY   r   r   r[   r[   Y   sG        GG9 9 96: : :
0 0 0 0 0r   r[   c                       e Zd ZdZd Zd ZdS )TestHypercubeGraphzBUnit tests for :func:`networkx.generators.lattice.hypercube_graph`c                    dt          j                    fdt          j        d          fdt          j        d          fdt          j                    ffD ]0\  }}t          j        |          }t          j        ||          sJ 1d S )Nr   r1   r   r   r;   )r   
null_graphr`   r5   r7   hypercube_graphr8   )r   r   r&   r   s       r   test_special_casesz%TestHypercubeGraph.test_special_cases   s     a  !q!!" ""#	
 	0 	0DAq "1%%A)!Q//////	0 	0r   c                     t          dd          D ]=}t          j        |          }dg|z  d|z  gz   }t          j        |          |k    sJ >d S )Nr1   
   r   r   )rR   r   rn   r   )r   r   r   r   s       r   r   z+TestHypercubeGraph.test_degree_distribution   sn    q" 	@ 	@A"1%%A"#qAqD6!1&q))-??????	@ 	@r   N)rU   rV   rW   rX   ro   r   rY   r   r   rk   rk      s=        LL0 0 0@ @ @ @ @r   rk   c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestTriangularLatticeGraphzFTests for :func:`networkx.generators.lattice.triangular_lattice_graph`c                    dD ]O\  }}t          j        ||          }|dz   dz  }t          |          |dz   d|z   z  |dz  |dz   dz  z  z
  k    sJ P|                                D ]j\  }}|||f         }||k     r|dz   |f|v sJ ||k     r||dz   f|v sJ ||k     r3|dk    s|dz  r(||k     s|dz   dz  r|dz   |dz   f|v s|dz
  |dz   f|v sJ kdS )z4Tests that the graph is really a triangular lattice.)r   r;   r   r   r   r1   r;   r;   r;   r   r;   r   r1   r   r   N)r   triangular_lattice_graphr   nodes)r   r   r   r   Nijnbrss           r   test_lattice_pointsz.TestTriangularLatticeGraph.test_lattice_points   sN   D 	J 	JDAq+Aq11AQ1Aq66a!eA.!a%QUqL1IIIIIIIGGII 	H 	HDAqaV9D1uuAqzT))))1uu1q5zT))))1uu!a%%1q5%q1uuQ!uAq1u~--!a%Q41G1G1G1G	H 	Hr   c                 z   t          j        ddt          j                              }t          j        ddt          j                              }|                                sJ |                                D ]?\  }}|d         |d         k    sJ |d         |d         k    r|d         |d         k    sJ @dS )z1Tests for creating a directed triangular lattice.r;   r   r   r1   r   N)r   r{   Graphr!   is_directedr,   )r   r   r&   uvs        r   r'   z(TestTriangularLatticeGraph.test_directed   s    '128::FFF'12:<<HHH}}GGII 	# 	#DAqQ41Q4<<<<tqt||tad{{{{	# 	#r   c                 2   t          j        ddt          j                              }t          j        ddt          j                              }t	          |                                          t	          |                                          k    sJ dS )z3Tests for creating a triangular lattice multigraph.r;   r   r   N)r   r{   r   r*   r+   r,   rC   s      r   r-   z*TestTriangularLatticeGraph.test_multigraph   so    '128::FFF'12=??KKKAGGII$qwwyy//111111r   c                    t          j        ddd          }t          |          dk    sJ |                                dk    sJ t          d |                                D                       dk    sJ t          j        d	d
d          }t           j        }t          j        t           j        |ddd           t          j        t           j        |ddd           t          j        t           j        |ddd           d S )Nr   r
   Tr/      $   c                 $    g | ]\  }}|d k    |S )r
   rY   .0r   ds      r   
<listcomp>z<TestTriangularLatticeGraph.test_periodic.<locals>.<listcomp>   !    777$!QQAr   r   r	   r2   r   )r   r{   r   sizer4   rJ   rK   rL   )r   r   TLGs      r   r9   z(TestTriangularLatticeGraph.test_periodic   s    '1t<<<1vv||||vvxx2~~~~77!((**77788A===='1t<<<)b&QDAAAAb&QDAAAAb&QDAAAAAAr   NrU   rV   rW   rX   r   r'   r-   r9   rY   r   r   rs   rs      s^        LLH H H# # #2 2 2
B 
B 
B 
B 
Br   rs   c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestHexagonalLatticeGraphzETests for :func:`networkx.generators.lattice.hexagonal_lattice_graph`c                 0   dD ]>\  }}t          j        ||          }t          |          d|dz   z  |dz   z  dz
  k    sJ ?t          j        d          }g dg dg dg dg d	g}|D ],}t          j        |                    |          |          sJ -d
S )z3Tests that the graph is really a hexagonal lattice.)r^   )r   r   )r   r;   ry   rx   r]   r   r1   r
   ))r   r   )r   r1   r   r   )r1   r   r1   r1   r1   r   )r   )r   r;   )r   r   r   r1   r;   )r1   r   )r   r   r   rw   rv   ru   ))r   r   rw   rv   )r;   r   )r;   r1   ry   )rv   ru   )r   r   ry   rx   rz   N)r   hexagonal_lattice_graphr   r5   rS   subgraph)r   r   r   r   C_6hexagonshexagons          r   r   z-TestHexagonalLatticeGraph.test_lattice_points   s    D 	7 	7DAq*1a00Aq66Q!a%[AE2Q666666nQ<<<<<<<<<<<<<<<
   	> 	>G#AJJw$7$7======	> 	>r   c                    t          j        ddt          j                              }t          j        ddt          j                              }|                                sJ t          j        |d          }|                                D ]c\  }}||         d         ||         d         k    sJ ||         d         ||         d         k    r ||         d         ||         d         k    sJ ddS )z0Tests for creating a directed hexagonal lattice.r;   r	   r   posr1   r   N)r   r   r   r!   r   get_node_attributesr,   )r   r   r&   r   r   r   s         r   r'   z'TestHexagonalLatticeGraph.test_directed   s    &q!"(**EEE&q!"*,,GGG}}$Q..GGII 	- 	-DAqq6!9Aq	))))1vayCF1I%%1vay3q6!9,,,,	- 	-r   c                 2   t          j        ddt          j                              }t          j        ddt          j                              }t	          |                                          t	          |                                          k    sJ dS )z2Tests for creating a hexagonal lattice multigraph.r;   r	   r   N)r   r   r   r*   r+   r,   rC   s      r   r-   z)TestHexagonalLatticeGraph.test_multigraph   so    &q!"(**EEE&q!"-//JJJAGGII$qwwyy//111111r   c                    t          j        ddd          }t          |          dk    sJ |                                dk    sJ t          d |                                D                       dk    sJ t          j        d	d
d          }t           j        }t          j        t           j        |ddd           t          j        t           j        |ddd           t          j        t           j        |ddd           d S )Nr   r
   Tr/   0   H   c                 $    g | ]\  }}|d k    |S )r;   rY   r   s      r   r   z;TestHexagonalLatticeGraph.test_periodic.<locals>.<listcomp>   r   r   r   r	   r   r   r2   r1   )r   r   r   r   r4   rJ   rK   rL   )r   r   HLGs      r   r9   z'TestHexagonalLatticeGraph.test_periodic   s    &q!d;;;1vv||||vvxx2~~~~77!((**77788A====&q!d;;;(b&QDAAAAb&QDAAAAb&QDAAAAAAr   Nr   rY   r   r   r   r      s[        KK> > > 	- 	- 	-2 2 2
B 
B 
B 
B 
Br   r   )rX   	itertoolsr   rJ   networkxr   networkx.utilsr   r   r[   rk   rs   r   rY   r   r   <module>r      s;   C C            & & & & & &K! K! K! K! K! K! K! K!\)0 )0 )0 )0 )0 )0 )0 )0X@ @ @ @ @ @ @ @(,B ,B ,B ,B ,B ,B ,B ,B^.B .B .B .B .B .B .B .B .B .Br   