
    hJ$                         S r SSKJr  SSKrSSKrSSKJr   " S S5      r " S S5      r	 " S	 S
5      r
 " S S5      r " S S5      rg)z=Unit tests for the :mod:`networkx.generators.lattice` module.    )productN)edges_equalc                   T    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)TestGrid2DGraph   z@Unit tests for :func:`networkx.generators.lattice.grid_2d_graph`c                 ^    Su  p[         R                  " X5      n[        U5      X-  :X  d   eg )N      )nxgrid_2d_graphlen)selfmnGs       X/var/www/html/env/lib/python3.13/site-packages/networkx/generators/tests/test_lattice.pytest_number_of_vertices'TestGrid2DGraph.test_number_of_vertices   s+    Q"1v    c                     Su  p[         R                  " X5      nSSSSX-   -  S-
  US-
  US-
  -  /n[         R                  " U5      U:X  d   eg )Nr	   r            )r   r   degree_histogram)r   r   r   r   expected_histograms        r   test_degree_distribution(TestGrid2DGraph.test_degree_distribution   s[    Q"AqAE{QQ1q58IJ""1%);;;;r   c                     Su  p[         R                  " X5      n[         R                  " X[         R                  " 5       S9nUR                  UR                  :X  d   eUR
                  UR                  :X  d   eg Nr	   create_usingr   r   DiGraphsuccadjpredr   r   r   r   Hs        r   test_directedTestGrid2DGraph.test_directed   sY    Q"Q

=vvvvr   c                     Su  p[         R                  " X5      n[         R                  " X[         R                  " 5       S9n[        UR	                  5       5      [        UR	                  5       5      :X  d   eg r    r   r   
MultiGraphlistedgesr(   s        r   test_multigraphTestGrid2DGraph.test_multigraph    sS    Q"Q@AGGI$qwwy/111r   c           
      6   [         R                  " SSSS9n[        UR                  5       5      0 :X  d   eSS[         R                  " S5      4SS[         R                  " S5      4SS[         R                  " S5      4SS[         R
                  " S5      4SS[         R
                  " S5      4SS[         R                  " 5       4SS[         R                  " 5       44 H8  u  p#n[         R                  " X#SS9n[         R                  " X5      (       a  M8   e   g )	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_periodicTestGrid2DGraph.test_periodic&   s    QD1AHHJ2%%% 2>>!$%2>>!$%2>>!$%2++A./2++A./2##%&2##%&
GA!   5A))!////
r   c                     Su  p[        SS/SS/5       H\  u  p4[        R                  " XX44S9nUR                  5       X-  :X  d   eUR	                  5       X-   S-
  U-  X$-   S-
  U-  -   :X  a  M\   e   g )N)   r7   r   r6   r4   )r   r   r   number_of_nodesnumber_of_edges)r   r   r   abr   s         r   test_periodic_iterable&TestGrid2DGraph.test_periodic_iterable6   s    QFQF+DA  7A$$&!%///$$&1519/QUQY!O*KKKK ,r   c                     [         R                  " SSSS9n[         R                  " SSS[         R                  " 5       S9nUR                  UR                  :X  d   eUR
                  UR                  :X  d   eg Nr   r   Tr4   )r5   r"   r#   r   r   r)   s      r   test_periodic_directed&TestGrid2DGraph.test_periodic_directed=   sZ    QD1QDrzz|Lvvvvr   c                     [         R                  " SSSS9n[         R                  " SSS[         R                  " 5       S9n[        UR	                  5       5      [        UR	                  5       5      :X  d   eg rI   r-   rJ   s      r   test_periodic_multigraph(TestGrid2DGraph.test_periodic_multigraphC   sT    QD1QDr}}OAGGI$qwwy/111r   c                    [         R                  " [        R                  [        R                  SS5        [         R                  " [        R                  [        R                  SS5        [         R                  " [
        [        R                  SS5        [         R                  " [
        [        R                  SS5        g )Nr   rA   gffffff
@g@)pytestraisesr   NetworkXErrorr   	TypeError)r   s    r   test_exceptionsTestGrid2DGraph.test_exceptionsH   sn    b&&(8(8"a@b&&(8(8!R@i!1!13:i!1!11c:r   c                    [         R                  " SSSS9n[         R                  " [        S5      [        S5      SS9n[         R                  " X!5      (       d   e[         R                  " SSSS9n[         R                  " X!5      (       d   e[         R                  " SS5      n[         R                  " [        S5      [        S5      5      n[	        X!5      (       d   eg )	Nr   r   Tr4   abcdefr
   r   )r   r   rangeis_isomorphicr   rJ   s      r   test_node_inputTestGrid2DGraph.test_node_inputN   s    QD1U1XuQx$?%%%%VTD9%%%%Q"U1XuQx01    r    N)__name__
__module____qualname____firstlineno____doc__r   r   r*   r1   r>   rF   rK   rN   rW   r^   __static_attributes__r`   r   r   r   r      s8    J
<20 L2
;!r   r   c                   *    \ rS rSrSrS rS rS rSrg)TestGridGraphY   z=Unit tests for :func:`networkx.generators.lattice.grid_graph`c           	         S Hc  u  pX/n[         R                  " U5      n[        U5      X-  :X  d   e[         R                  " U5      SSSSX-   -  S-
  US-
  US-
  -  /:X  a  Mc   e   S Hc  u  pX/n[         R                  " U5      n[        U5      X-  :X  d   e[         R                  " U[         R
                  " S5      5      (       a  Mc   e   g)	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)]
)rA   r
   )r
   rA   r   r
   )r
   r   r   r   r   r   ))r6   r
   )r
   r6   r
   N)r   
grid_graphr   r   r]   
path_graph)r   r   r   dimgs        r   test_grid_graphTestGridGraph.test_grid_graph\   s     5DA&Cc"Aq6QU?"?&&q)QUaQ1q5!.   	 5 %DA&Cc"Aq6QU?"?##Ar}}Q'78888	 %r   c                     [         R                  " [        SS5      [        SS5      /5      n[        U5      S:X  d   e[         R                  " U[         R                  " SS/5      5      (       d   eg )Nr7   	   rA   r   r   )r   rm   r\   r   r]   )r   r   s     r   r^   TestGridGraph.test_node_inputw   sW    MM5A;a451v2==!Q#89999r   c                 .   Su  pn[        SS/SS/SS/5       Hy  u  pEn[        R                  " XU/XEU4S9nX-   S-
  U-  U-  X%-   S-
  U-  U-  -   X6-   S-
  U-  U-  -   nUR                  5       X-  U-  :X  d   eUR	                  5       U:X  a  My   e   g )N)rA   r7   r
   r   r6   r4   )r   r   rm   rB   rC   )	r   r   r   krD   rE   cr   num_es	            r   rF   $TestGridGraph.test_periodic_iterable|   s    a1v1v1v6GA!qQi1)<AUQY!Oa'1519/A*==aRS@SSE$$&!%!)333$$&%///	 7r   r`   N)	ra   rb   rc   rd   re   rq   r^   rF   rf   r`   r   r   rh   rh   Y   s    G96:
0r   rh   c                   $    \ rS rSrSrS rS rSrg)TestHypercubeGraph   zBUnit tests for :func:`networkx.generators.lattice.hypercube_graph`c                 4   S[         R                  " 5       4S[         R                  " S5      4S[         R                  " S5      4S[         R                  " 5       44 H8  u  p[         R
                  " U5      n[         R                  " X25      (       a  M8   e   g )Nr   r6   r   r   rA   )r   
null_graphrn   r:   r<   hypercube_graphr=   )r   r   r)   r   s       r   test_special_cases%TestHypercubeGraph.test_special_cases   sz     a !q!"  "#	
DA ""1%A))!////
r   c                     [        SS5       HB  n[        R                  " U5      nS/U-  SU-  /-   n[        R                  " U5      U:X  a  MB   e   g )Nr6   
   r   r   )r\   r   r   r   )r   r   r   r   s       r   r   +TestHypercubeGraph.test_degree_distribution   sS    q"A""1%A"#qAqD6!1&&q)-???? r   r`   N)ra   rb   rc   rd   re   r   r   rf   r`   r   r   r|   r|      s    L0@r   r|   c                   0    \ rS rSrSrS rS rS rS rSr	g)	TestTriangularLatticeGraph   zFTests for :func:`networkx.generators.lattice.triangular_lattice_graph`c                    S HL  u  p[         R                  " X5      nUS-   S-  n[        U5      US-   SU-   -  US-  US-   S-  -  -
  :X  a  ML   e   WR                  5        H}  u  pVX5U4   nUW:  a  US-   U4U;   d   eUW:  a  XVS-   4U;   d   eXa:  d  M7  US:  d  US-  (       d  MI  XT:  d  US-   S-  (       d  M]  US-   US-   4U;   a  Mm  US-
  US-   4U;   a  M}   e   g)z4Tests that the graph is really a triangular lattice.)r   rA   r   r   r   r6   rA   rA   rA   r   rA   r   r6   r   r   N)r   triangular_lattice_graphr   nodes)r   r   r   r   Nijnbrss           r   test_lattice_points.TestTriangularLatticeGraph.test_lattice_points   s   DDA++A1AQ1Aq6a!eA.!a%QUqL1IIIII E GGIDAV9D1uAqzT)))1uq5zT)))u!a%1q55quQ!Aq1u~-!a%Q41GGG r   c                 \   [         R                  " SS[         R                  " 5       S9n[         R                  " SS[         R                  " 5       S9nUR	                  5       (       d   eUR                  5        H/  u  p4US   US   :  d   eUS   US   :X  d  M!  US   US   :  a  M/   e   g)z1Tests for creating a directed triangular lattice.rA   r   r!   r6   r   N)r   r   Graphr$   is_directedr0   )r   r   r)   uvs        r   r*   (TestTriangularLatticeGraph.test_directed   s    ''1288:F''12::<H}}GGIDAQ41Q4<<tqt|tad{"{ r   c                    [         R                  " SS[         R                  " 5       S9n[         R                  " SS[         R                  " 5       S9n[	        UR                  5       5      [	        UR                  5       5      :X  d   eg)z3Tests for creating a triangular lattice multigraph.rA   r   r!   N)r   r   r   r.   r/   r0   rJ   s      r   r1   *TestTriangularLatticeGraph.test_multigraph   sX    ''1288:F''12==?KAGGI$qwwy/111r   c                 2   [         R                  " SSSS9n[        U5      S:X  d   eUR                  5       S:X  d   e[        UR	                  5        VVs/ s H  u  p#US:w  d  M  UPM     snn5      S:X  d   e[         R                  " SS	SS9n[         R                  n[
        R                  " [         R                  US
SSS9  [
        R                  " [         R                  USSSS9  [
        R                  " [         R                  US
SSS9  g s  snnf )Nr   r   Tr4      $   r   r
   r7   r   )r   r   r   sizer9   rS   rT   rU   )r   r   r   dTLGs        r   r>   (TestTriangularLatticeGraph.test_periodic   s    ''1t<1v||vvx2~~!((*7*$!QA*78A===''1t<))b&&QDAb&&QDAb&&QDA 8   D
&D
r`   N
ra   rb   rc   rd   re   r   r*   r1   r>   rf   r`   r   r   r   r      s    LH#2
Br   r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	TestHexagonalLatticeGraph   zETests for :func:`networkx.generators.lattice.hexagonal_lattice_graph`c                 @   S H;  u  p[         R                  " X5      n[        U5      SUS-   -  US-   -  S-
  :X  a  M;   e   [         R                  " S5      n/ SQ/ SQ/ SQ/ SQ/ S	Q/nU H0  n[         R                  " WR                  U5      U5      (       a  M0   e   g
)z3Tests that the graph is really a hexagonal lattice.)rl   )r   r   )r   rA   r   r   rk   r   r6   r   ))r   r   )r   r6   r   r   )r6   r   r6   r6   r6   r   )r   )r   rA   )r   r   r   r6   rA   )r6   r   )r   r   r   r   r   r   ))r   r   r   r   )rA   r   )rA   r6   r   )r   r   )r   r   r   r   r   N)r   hexagonal_lattice_graphr   r:   r]   subgraph)r   r   r   r   C_6hexagonshexagons          r   r   -TestHexagonalLatticeGraph.test_lattice_points   s    DDA**10Aq6Q!a%[AE2Q6666 E nnQ<<<<<
  G##AJJw$7====  r   c                    [         R                  " SS[         R                  " 5       S9n[         R                  " SS[         R                  " 5       S9nUR	                  5       (       d   e[         R
                  " US5      nUR                  5        H;  u  pEX5   S   X4   S   :  d   eX5   S   X4   S   :X  d  M)  X5   S   X4   S   :  a  M;   e   g)z0Tests for creating a directed hexagonal lattice.rA   r
   r!   posr6   r   N)r   r   r   r$   r   get_node_attributesr0   )r   r   r)   r   r   r   s         r   r*   'TestHexagonalLatticeGraph.test_directed   s    &&q!"((*E&&q!"**,G}}$$Q.GGIDA6!9q	)))vayCF1I%vay36!9,,, r   c                    [         R                  " SS[         R                  " 5       S9n[         R                  " SS[         R                  " 5       S9n[	        UR                  5       5      [	        UR                  5       5      :X  d   eg)z2Tests for creating a hexagonal lattice multigraph.rA   r
   r!   N)r   r   r   r.   r/   r0   rJ   s      r   r1   )TestHexagonalLatticeGraph.test_multigraph   sX    &&q!"((*E&&q!"--/JAGGI$qwwy/111r   c                 2   [         R                  " SSSS9n[        U5      S:X  d   eUR                  5       S:X  d   e[        UR	                  5        VVs/ s H  u  p#US:w  d  M  UPM     snn5      S:X  d   e[         R                  " S	S
SS9n[         R                  n[
        R                  " [         R                  USSSS9  [
        R                  " [         R                  USSSS9  [
        R                  " [         R                  USSSS9  g s  snnf )Nr   r   Tr4   0   H   rA   r   r
   r   r   r7   r6   )r   r   r   r   r9   rS   rT   rU   )r   r   r   r   HLGs        r   r>   'TestHexagonalLatticeGraph.test_periodic   s    &&q!d;1v||vvx2~~!((*7*$!QA*78A===&&q!d;((b&&QDAb&&QDAb&&QDA 8r   r`   Nr   r`   r   r   r   r      s    K> 	-2
Br   r   )re   	itertoolsr   rS   networkxr   networkx.utilsr   r   rh   r|   r   r   r`   r   r   <module>r      sQ    C    &K! K!\)0 )0X@ @(,B ,B^.B .Br   