
    9 jv'                     
   S r SSKJr  SSKrSSKrSSKJr  S r\R                  R                  S\R                  \R                  45      S 5       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                  |    [         R                  " SSSS9n [        S U R                  SS9 5       5      (       d   eg )N   F)with_positionsc              3   .   #    U  H  u  pUS L v   M     g 7fN ).0_poss      w/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/networkx/generators/tests/test_lattice.py	<genexpr>0test_hexagonal_lattice_no_pos.<locals>.<genexpr>   s     =)<vqsd{)<s   r   data)nxhexagonal_lattice_graphallnodes)Gs    r   test_hexagonal_lattice_no_posr      s8    
""1a>A=e)<=====    lattice_graphc                     U " SSSSS9n[        S UR                  SS9 5       5      (       d   e[        S UR                  SS9 5       5      (       d   eg)	zhexagonal_lattice_graph and triangular_lattice_graph use nx.contracted_nodes
under-the-hood when periodic=True. Check that there are no leftover
"contraction" node attributes on the returned graph.r   FT)r   periodicc              3   0   #    U  H  u  pU0 :H  v   M     g 7fr	   r
   r   r   r   s      r   r   ;test_2D_lattice_no_contraction_leftovers.<locals>.<genexpr>   s     <);gatrz);s   r   c              3   2   #    U  H  u    pU0 :H  v   M     g 7fr	   r
   r   s      r   r   r      s     ?,>jatrz,>s   N)r   r   edges)r   r   s     r   (test_2D_lattice_no_contraction_leftoversr"      sX     	a54@A<d);<<<<<?AGGG,>?????r   c                   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   r   )r   grid_2d_graphlen)selfmnr   s       r   test_number_of_vertices'TestGrid2DGraph.test_number_of_vertices    s+    Q"1vr   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 r9   r   r)   
MultiGraphlistr!   rA   s        r   test_multigraphTestGrid2DGraph.test_multigraph2   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r   r2   r1         r(   )r   r)   dictdegreecycle_graphcircular_ladder_graphcubical_graphcould_be_isomorphic)r+   r   r,   r-   rB   s        r   test_periodicTestGrid2DGraph.test_periodic8   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)   rN   r   rM   rL   )r   r   r)   number_of_nodesnumber_of_edges)r+   r,   r-   abr   s         r   test_periodic_iterable&TestGrid2DGraph.test_periodic_iterableH   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 Nr1   r2   TrL   )r   r;   r<   r+   r   rB   s      r   test_periodic_directed&TestGrid2DGraph.test_periodic_directedO   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 r`   rF   ra   s      r   test_periodic_multigraph(TestGrid2DGraph.test_periodic_multigraphU   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 )Nr2   rX   gffffff
@g@)pytestraisesr   NetworkXErrorr)   	TypeError)r+   s    r   test_exceptionsTestGrid2DGraph.test_exceptionsZ   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 )	Nr1   r2   TrL   abcdefr(   r   )r   r)   rangeis_isomorphicr   ra   s      r   test_node_inputTestGrid2DGraph.test_node_input`   s    QD1U1XuQx$?%%%%VTD9%%%%Q"U1XuQx01    r   r
   N)__name__
__module____qualname____firstlineno____doc__r.   r6   rC   rI   rU   r]   rb   re   rn   ru   __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)TestGridGraphk   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)]
)rX   r(   )r(   rX   r1   r(   )r(   r1   r   r1   r2   r3   ))rM   r(   )r(   rM   r(   N)r   
grid_graphr*   r4   rt   
path_graph)r+   r-   r,   dimgs        r   test_grid_graphTestGridGraph.test_grid_graphn   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 )NrN   	   rX   r   r2   )r   r   rs   r*   rt   )r+   r   s     r   ru   TestGridGraph.test_node_input   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)rX   rN   r(   r   rM   rL   )r   r   r   rY   rZ   )	r+   r,   r-   kr[   r\   cr   num_es	            r   r]   $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)	rw   rx   ry   rz   r{   r   ru   r]   r|   r
   r   r   r~   r~   k   s    G96:
0r   r~   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   rM   r2   r1   rX   )r   
null_graphr   rQ   rS   hypercube_graphrT   )r+   r-   rB   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 )NrM   
   r   r2   )rs   r   r   r4   )r+   r-   r   r5   s       r   r6   +TestHypercubeGraph.test_degree_distribution   sS    q"A""1%A"#qAqD6!1&&q)-???? r   r
   N)rw   rx   ry   rz   r{   r   r6   r|   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.)r2   rX   r2   r2   r2   rM   rX   rX   rX   r2   rX   r1   rM   r2   r   N)r   triangular_lattice_graphr*   r   )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.rX   r1   r:   rM   r   N)r   r   Graphr=   is_directedr!   )r+   r   rB   uvs        r   rC   (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.rX   r1   r:   N)r   r   r   rG   rH   r!   ra   s      r   rI   *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 )Nr1   r   TrL      $   r   r(   rN   r2   )r   r   r*   sizerP   rj   rk   rl   )r+   r   r-   dTLGs        r   rU   (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
rw   rx   ry   rz   r{   r   rC   rI   rU   r|   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.)r   )r1   r1   )r1   rX   r   r   r   r2   rM   r   ))r   r   )r   rM   r   r2   )rM   r   rM   rM   rM   r2   )r   )r   rX   )r   r1   r   rM   rX   )rM   r1   )r   r   r   r   r   r   ))r2   r   r   r   )rX   r   )rX   rM   r   )r   r   )r2   r1   r   r   r   N)r   r   r*   rQ   rt   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.rX   r(   r:   r   rM   r   N)r   r   r   r=   r   get_node_attributesr!   )r+   r   rB   r   r   r   s         r   rC   '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.rX   r(   r:   N)r   r   r   rG   rH   r!   ra   s      r   rI   )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 )Nr1   r   TrL   0   H   rX   r   r(   r3   r2   rN   rM   )r   r   r*   r   rP   rj   rk   rl   )r+   r   r-   r   HLGs        r   rU   '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   )r{   	itertoolsr   rj   networkxr   networkx.utilsr   r   markparametrizer   r   r"   r$   r~   r   r   r   r
   r   r   <module>r      s    C    &> b1123M3MN@@K! K!\)0 )0X@ @(,B ,B^.B .Br   