Ë
    D^(hJ$  ã                   ó”   — 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       úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/generators/tests/test_lattice.pyÚtest_number_of_verticesz'TestGrid2DGraph.test_number_of_vertices   s1   € Ø‰ˆˆ1Ü×Ñ˜Q Ó"ˆÜ�1‹v˜˜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 Ó"ˆØ  A q¨A°©E¡{°Q¡¸¸Q¹À1ÀqÁ5Ñ8IÐ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 ´·
±
³Ô=ˆØ�v‰v˜Ÿ™ŠÐˆØ�v‰v˜Ÿ™ŠÐ‰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 ´·±³Ô@ˆÜ�A—G‘G“I‹¤$ q§w¡w£y£/Ò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ˆÜ�A—H‘H“JÓ 2Ò%Ð%Ð%ð �”2—>‘> !Ó$Ð%Ø�”2—>‘> !Ó$Ð%Ø�”2—>‘> !Ó$Ð%Ø�”2×+Ñ+¨AÓ.Ð/Ø�”2×+Ñ+¨AÓ.Ð/Ø�”2×#Ñ#Ó%Ð&Ø�”2×#Ñ#Ó%Ð&ð
ò 
	0‰GˆAˆq�!ô × Ñ   A°Ô5ˆAÜ×)Ñ)¨!¨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 ˜F Q¨ FÓ+ò 	L‰DˆAˆqÜ× Ñ   A°°A°Ô7ˆAØ×$Ñ$Ó&¨!¨a©%Ò/Ð/Ð/Ø×$Ñ$Ó&¨1¨q©5°1©9¸©/¸QÀ¹UÀQ¹YÈ!¹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 ¨D¼r¿z¹z»|ÔLˆØ�v‰v˜Ÿ™ŠÐˆØ�v‰v˜Ÿ™ŠÐ‰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 ¨D¼r¿}¹}»ÔOˆÜ�A—G‘G“I‹¤$ q§w¡w£y£/Ò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 )Néýÿÿÿr   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Ñ!1°3¸Ô:Ü�‰”i¤×!1Ñ!1°1°cÕ: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ˆÜ×ÑœU 1›X¤u¨Q£x¸$Ô?ˆÜ×Ñ  1Ô%Ð%Ð%Ü×Ñ˜V T°DÔ9ˆÜ×Ñ  1Ô%Ð%Ð%Ü×Ñ˜Q Ó"ˆÜ×ÑœU 1›X¤u¨Q£xÓ0ˆÜ˜1˜aÔ Ð Ñ 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)	z´grid_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ò 
	‰DˆAˆqØ�a�&ˆCÜ—‘˜cÓ"ˆAÜ�q“6˜Q ™U’?Ð"�?Ü×&Ñ& qÓ)ØØØØ�Q˜‘U‘˜a‘Ø�Q‘˜1˜q™5Ñ!ð.ó ð ð ð	
	ð %ò 	9‰DˆAˆqØ�a�&ˆCÜ—‘˜cÓ"ˆAÜ�q“6˜Q ™U’?Ð"�?Ü×#Ñ# A¤r§}¡}°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   € Ü�M‰Mœ5  A›;¬¨a°«Ð4Ó5ˆÜ�1‹v˜ŠÐˆÜ×Ñ ¤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Ì   € Ø‰ˆˆ1ˆaÜ  1˜v¨¨1 v°°1¨vÓ6ò 	0‰GˆAˆq�!Ü—‘˜q ! Q˜i°1°a¸°)Ô<ˆAØ˜‘U˜Q‘Y !‘O aÑ'¨1¨q©5°1©9¸©/¸AÑ*=Ñ=ÀÀQÁÈÁÈaÁÐRSÑ@SÑSˆEØ×$Ñ$Ó&¨!¨a©%°!©)Ò3Ð3Ð3Ø×$Ñ$Ó&¨%Ó/Ð/Ð/ñ		0r   N)rU   rV   rW   rX   rc   rT   r@   rY   r   r   r[   r[   Y   s   „ ÙGò9ò6:ó
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Ó!Ð"Ø”× Ñ Ó"Ð#ð	
ò 	0‰DˆAˆqô ×"Ñ" 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¡¨A¨q©D¨6Ñ!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‰DˆAˆqÜ×+Ñ+¨A¨qÓ1ˆAØ�Q‘˜1‘ˆAÜ�q“6˜a !™e¨¨A©Ñ.°!°a±%¸QÀ¹UÀq¹LÑ1IÑIÓIÐIÐIð	Jð —G‘G“Iò 	H‰DˆAˆqØ�a˜�V‘9ˆDØ�1ŠuØ˜A™˜q�z TÑ)Ð)Ð)Ø�1ŠuØ˜1˜q™5�z TÑ)Ð)Ð)Ø�1‹u˜!˜aš% 1 q£5¨q°1ªu¸¸Q¹À!»Ø˜A™˜q 1™u�~¨Ò-°!°a±%¸¸Q¹°À4Ò1GÐ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”   € ä×'Ñ'¨¨1¼2¿8¹8»:ÔFˆÜ×'Ñ'¨¨1¼2¿:¹:»<ÔHˆØ�}‰}ŒÐˆØ—G‘G“Iò 	#‰DˆAˆqØ�Q‘4˜1˜Q™4’<Ð�<Ø�‰t�q˜‘t‹|Ø˜‘t˜a ™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   € ä×'Ñ'¨¨1¼2¿8¹8»:ÔFˆÜ×'Ñ'¨¨1¼2¿=¹=»?ÔKˆÜ�A—G‘G“I‹¤$ q§w¡w£y£/Ò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Ø   € Ü×'Ñ'¨¨1°tÔ<ˆÜ�1‹v˜Š|Ðˆ|Ø�v‰v‹x˜2Š~Ðˆ~ä !§(¡(£*×7™$˜!˜Q°°Q³’AÓ7Ó8¸AÒ=Ð=Ð=Ü×'Ñ'¨¨1°tÔ<ˆÜ×)Ñ)ˆÜ�‰”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ò 	7‰DˆAˆqÜ×*Ñ*¨1¨aÓ0ˆAÜ�q“6˜Q ! a¡%™[¨A°©EÑ2°QÑ6Ó6Ð6Ð6ð	7ô �n‰n˜QÓˆâ<Ú<Ú<Ú<Ú<ð
ˆð  ò 	>ˆGÜ×#Ñ# A§J¡J¨wÓ$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¨Ó.ˆØ—G‘G“Iò 	-‰DˆAˆqØ�q‘6˜!‘9  A¡ q¡	Ò)Ð)Ð)Ø�1‰v�a‰y˜C ™F 1™IÓ%Ø˜1‘v˜a‘y 3 q¡6¨!¡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ˆÜ�A—G‘G“I‹¤$ q§w¡w£y£/Ò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Ô;ˆÜ�1‹v˜Š|Ðˆ|Ø�v‰v‹x˜2Š~Ðˆ~ä !§(¡(£*×7™$˜!˜Q°°Q³’AÓ7Ó8¸AÒ=Ð=Ð=Ü×&Ñ& 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ñ )0÷X@ñ @÷(,Bñ ,B÷^.Bò .Br   