
    ިsgJ$                         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y)z=Unit tests for the :mod:`networkx.generators.lattice` module.    )productN)edges_equalc                   L    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y)TestGrid2DGraphz@Unit tests for :func:`networkx.generators.lattice.grid_2d_graph`c                 `    d\  }}t        j                  ||      }t        |      ||z  k(  sJ y )N      )nxgrid_2d_graphlen)selfmnGs       Y/var/www/html/venv/lib/python3.12/site-packages/networkx/generators/tests/test_lattice.pytest_number_of_verticesz'TestGrid2DGraph.test_number_of_vertices   s1    1Q"1vQ    c                     d\  }}t        j                  ||      }dddd||z   z  dz
  |dz
  |dz
  z  g}t        j                  |      |k(  sJ y )Nr   r            )r   r   degree_histogram)r   r   r   r   expected_histograms        r   test_degree_distributionz(TestGrid2DGraph.test_degree_distribution   sa    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 y Nr   create_usingr   r   DiGraphsuccadjpredr   r   r   r   Hs        r   test_directedzTestGrid2DGraph.test_directed   s_    1Q"Q

=vvvvr   c                     d\  }}t        j                  ||      }t        j                  ||t        j                               }t        |j	                               t        |j	                               k(  sJ y r   r   r   
MultiGraphlistedgesr%   s        r   test_multigraphzTestGrid2DGraph.test_multigraph    sY    1Q"Q@AGGI$qwwy/111r   c           
      $   t        j                  ddd      }t        |j                               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 ]6  \  }}}t        j                  ||d      }t        j                  ||      r6J  y )	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AHHJ2%%% 2>>!$%2>>!$%2>>!$%2++A./2++A./2##%&2##%&
 
	0GAq!   A5A))!Q///
	0r   c                     d\  }}t        ddgddg      D ]a  \  }}t        j                  ||||f      }|j                         ||z  k(  sJ |j	                         ||z   dz
  |z  ||z   dz
  |z  z   k(  raJ  y )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DAq  AA7A$$&!a%///$$&1q519/QUQY!O*KKKK	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 y Nr   r   Tr/   )r0   r   r    r   r   r&   s      r   test_periodic_directedz&TestGrid2DGraph.test_periodic_directed=   sZ    QD1QDrzz|Lvvvvr   c                     t        j                  ddd      }t        j                  dddt        j                               }t        |j	                               t        |j	                               k(  sJ y rB   r)   rC   s      r   test_periodic_multigraphz(TestGrid2DGraph.test_periodic_multigraphC   sT    QD1QDr}}OAGGI$qwwy/111r   c                 |   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       y )Nr   r;   gffffff
@g@)pytestraisesr   NetworkXErrorr   	TypeError)r   s    r   test_exceptionszTestGrid2DGraph.test_exceptionsH   sn    b&&(8(8"a@b&&(8(8!R@i!1!13:i!1!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 y )	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U1XuQx$?1%%%VTD91%%%Q"U1XuQx01a   r   N)__name__
__module____qualname____doc__r   r   r'   r-   r9   r@   rD   rF   rN   rT    r   r   r   r      s8    J
<20 L2
;!r   r   c                   "    e Zd ZdZd Zd Zd Zy)TestGridGraphz=Unit tests for :func:`networkx.generators.lattice.grid_graph`c           	         dD ]b  \  }}||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(  rbJ  dD ]\  \  }}||g}t        j                  |      }t        |      ||z  k(  sJ t        j                  |t        j
                  d            r\J  y)	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q6QU?"?&&q)QUaQ1q5!.   	
	 % 	9DAqa&Cc"Aq6QU?"?##Ar}}Q'7888		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 y )Nr2   	   r;   r
   r   )r   r_   rR   r   rS   )r   r   s     r   rT   zTestGridGraph.test_node_inputw   sT    MM5A;a451v2==!Q#8999r   c                 :   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   }|j                         ||z  |z  k(  sJ |j	                         |k(  rJ  y )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 	0GAq!q!Qi1a)<AUQY!Oa'1q519/A*==QaRS@SSE$$&!a%!)333$$&%///		0r   N)rU   rV   rW   rX   rc   rT   r@   rY   r   r   r[   r[   Y   s    G96:
0r   r[   c                       e Zd ZdZd Zd Zy)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 ]2  \  }}t        j
                  |      }t        j                  ||      r2J  y )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!"  "#	
 	0DAq ""1%A))!Q///	0r   c                     t        dd      D ]>  }t        j                  |      }dg|z  d|z  gz   }t        j                  |      |k(  r>J  y )Nr1   
   r   r   )rR   r   rn   r   )r   r   r   r   s       r   r   z+TestHypercubeGraph.test_degree_distribution   sZ    q" 	@A""1%A"#qAqD6!1&&q)-????	@r   N)rU   rV   rW   rX   ro   r   rY   r   r   rk   rk      s    L0@r   rk   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestTriangularLatticeGraphzFTests for :func:`networkx.generators.lattice.triangular_lattice_graph`c                    dD ]K  \  }}t        j                  ||      }|dz   dz  }t        |      |dz   d|z   z  |dz  |dz   dz  z  z
  k(  rKJ  j                         D ]f  \  }}|||f   }|k  r|dz   |f|v sJ |k  r||dz   f|v sJ ||k  s3|dkD  s|dz  s>||k  s	|dz   dz  sL|dz   |dz   f|v rY|dz
  |dz   f|v rfJ  y)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   s   D 	JDAq++Aq1AQ1Aq6a!eA.!a%QUqL1IIIII	J GGI 	HDAqaV9D1uAqzT)))1u1q5zT)))1u!a%1q5q1uQ!Aq1u~-!a%Q41GGG	Hr   c                 L   t        j                  ddt        j                               }t        j                  ddt        j                               }|j	                         sJ |j                         D ]+  \  }}|d   |d   k\  sJ |d   |d   k(  s|d   |d   kD  r+J  y)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    ''1288:F''12::<H}}GGI 	#DAqQ41Q4<<tqt|tad{"{	#r   c                    t        j                  ddt        j                               }t        j                  ddt        j                               }t	        |j                               t	        |j                               k(  sJ y)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   sX    ''1288:F''12==?KAGGI$qwwy/111r   c                 8   t        j                  ddd      }t        |      dk(  sJ |j                         dk(  sJ t        |j	                         D cg c]  \  }}|dk7  s| c}}      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       y c c}}w )Nr   r
   Tr/      $   r   r	   r2   r   )r   r{   r   sizer4   rJ   rK   rL   )r   r   r   dTLGs        r   r9   z(TestTriangularLatticeGraph.test_periodic   s    ''1t<1v||vvx2~~!((*7$!QQA78A===''1t<))b&&QDAb&&QDAb&&QDA 8   D
$D
NrU   rV   rW   rX   r   r'   r-   r9   rY   r   r   rs   rs      s    LH#2
Br   rs   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestHexagonalLatticeGraphzETests for :func:`networkx.generators.lattice.hexagonal_lattice_graph`c                 *   dD ]:  \  }}t        j                  ||      }t        |      d|dz   z  |dz   z  dz
  k(  r:J  t        j                  d      }g dg dg dg dg d	g}|D ])  }t        j                  j                  |      |      r)J  y
)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 	7DAq**1a0Aq6Q!a%[AE2Q6666	7 nnQ<<<<<
   	>G##AJJw$7===	>r   c                    t        j                  ddt        j                               }t        j                  ddt        j                               }|j	                         sJ t        j
                  |d      }|j                         D ]=  \  }}||   d   ||   d   k\  sJ ||   d   ||   d   k(  s+||   d   ||   d   kD  r=J  y)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&&q!"**,G}}$$Q.GGI 	-DAqq6!9Aq	)))1vayCF1I%1vay3q6!9,,,	-r   c                    t        j                  ddt        j                               }t        j                  ddt        j                               }t	        |j                               t	        |j                               k(  sJ y)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   sX    &&q!"((*E&&q!"--/JAGGI$qwwy/111r   c                 8   t        j                  ddd      }t        |      dk(  sJ |j                         dk(  sJ t        |j	                         D cg c]  \  }}|dk7  s| c}}      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       y c c}}w )Nr   r
   Tr/   0   H   r;   r   r	   r   r   r2   r1   )r   r   r   r   r4   rJ   rK   rL   )r   r   r   r   HLGs        r   r9   z'TestHexagonalLatticeGraph.test_periodic   s    &&q!d;1v||vvx2~~!((*7$!QQA78A===&&q!d;((b&&QDAb&&QDAb&&QDA 8r   Nr   rY   r   r   r   r      s    K> 	-2
Br   r   )rX   	itertoolsr   rJ   networkxr   networkx.utilsr   r   r[   rk   rs   r   rY   r   r   <module>r      sQ    C    &K! K!\)0 )0X@ @(,B ,B^.B .Br   