
    Piv'                        d Z ddlmZ ddlZddlZddlmZ d Zej	        
                    dej        ej        f          d             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                      t          j        ddd          } t          d |                     d          D                       sJ d S )N   F)with_positionsc              3   $   K   | ]\  }}|d u V  d S N ).0_poss      z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/networkx/generators/tests/test_lattice.py	<genexpr>z0test_hexagonal_lattice_no_pos.<locals>.<genexpr>   s*      ==vq#sd{======    r   data)nxhexagonal_lattice_graphallnodes)Gs    r   test_hexagonal_lattice_no_posr      sP    
"1a>>>A==e)<)<==========r   lattice_graphc                      | dddd          }t          d |                    d          D                       sJ t          d |                    d          D                       sJ dS )	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   (   K   | ]\  }}|i k    V  d S r	   r
   r   r   r   s      r   r   z;test_2D_lattice_no_contraction_leftovers.<locals>.<genexpr>   s*      <<gatrz<<<<<<r   r   c              3   *   K   | ]\  }}}|i k    V  d S r	   r
   r   s      r   r   z;test_2D_lattice_no_contraction_leftovers.<locals>.<genexpr>   s,      ??jaDtrz??????r   N)r   r   edges)r   r   s     r   (test_2D_lattice_no_contraction_leftoversr       s     	a54@@@A<<d););<<<<<<<<??AGGG,>,>??????????r   c                   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   r   )r   grid_2d_graphlen)selfmnr   s       r   test_number_of_verticesz'TestGrid2DGraph.test_number_of_vertices    s8    1Q""1vvQr   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 r4   r   r&   
MultiGraphlistr   r<   s        r   test_multigraphzTestGrid2DGraph.test_multigraph2   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r   r.   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_periodic8   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)   rG   r   rF   rE   )r   r   r&   number_of_nodesnumber_of_edges)r(   r)   r*   abr   s         r   test_periodic_iterablez&TestGrid2DGraph.test_periodic_iterableH   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.   TrE   )r   r6   r7   r(   r   r=   s      r   test_periodic_directedz&TestGrid2DGraph.test_periodic_directedO   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 rW   r@   rX   s      r   test_periodic_multigraphz(TestGrid2DGraph.test_periodic_multigraphU   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.   rP   gffffff
@g@)pytestraisesr   NetworkXErrorr&   	TypeError)r(   s    r   test_exceptionszTestGrid2DGraph.test_exceptionsZ   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.   TrE   abcdefr%   r   )r   r&   rangeis_isomorphicr   rX   s      r   test_node_inputzTestGrid2DGraph.test_node_input`   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+   r2   r>   rC   rN   rU   rY   r[   rc   ri   r
   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)]
        )rP   r%   )r%   rP   r-   r%   )r%   r-   r   r-   r.   r/   ))rF   r%   )r%   rF   r%   N)r   
grid_graphr'   r0   rh   
path_graph)r(   r*   r)   dimgs        r   test_grid_graphzTestGridGraph.test_grid_graphn   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 )NrG   	   rP   r   r.   )r   rs   rg   r'   rh   )r(   r   s     r   ri   zTestGridGraph.test_node_input   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)rP   rG   r%   r   rF   rE   )r   r   rs   rQ   rR   )	r(   r)   r*   krS   rT   cr   num_es	            r   rU   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)rj   rk   rl   rm   rw   ri   rU   r
   r   r   ro   ro   k   sG        GG9 9 96: : :
0 0 0 0 0r   ro   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   rF   r.   r-   rP   )r   
null_graphrt   rJ   rL   hypercube_graphrM   )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 )NrF   
   r   r.   )rg   r   r   r0   )r(   r*   r   r1   s       r   r2   z+TestHypercubeGraph.test_degree_distribution   sn    q" 	@ 	@A"1%%A"#qAqD6!1&q))-??????	@ 	@r   N)rj   rk   rl   rm   r   r2   r
   r   r   r   r      s=        LL0 0 0@ @ @ @ @r   r   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.   rP   r.   r.   r.   rF   rP   rP   rP   r.   rP   r-   rF   r.   r   N)r   triangular_lattice_graphr'   r   )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41G1G1GG	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.rP   r-   r5   rF   r   N)r   r   Graphr8   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.rP   r-   r5   N)r   r   r   rA   rB   r   rX   s      r   rC   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   TrE      $   c                 $    g | ]\  }}|d k    |S )r   r
   r   r*   ds      r   
<listcomp>z<TestTriangularLatticeGraph.test_periodic.<locals>.<listcomp>   !    777$!QQAr   r   r%   rG   r.   )r   r   r'   sizerI   r_   r`   ra   )r(   r   TLGs      r   rN   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rj   rk   rl   rm   r   r>   rC   rN   r
   r   r   r   r      s^        LLH H H# # #2 2 2
B 
B 
B 
B 
Br   r   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.)rr   )r-   r-   )r-   rP   r   r   rq   r.   rF   r   ))r   r   )r   rF   r   r.   )rF   r   rF   rF   rF   r.   )r   )r   rP   )r   r-   r   rF   rP   )rF   r-   )r   r   r   r   r   r   ))r.   r   r   r   )rP   r   )rP   rF   r   )r   r   )r.   r-   r   r   r   N)r   r   r'   rJ   rh   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.rP   r%   r5   r   rF   r   N)r   r   r   r8   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.rP   r%   r5   N)r   r   r   rA   rB   r   rX   s      r   rC   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   TrE   0   H   c                 $    g | ]\  }}|d k    |S )rP   r
   r   s      r   r   z;TestHexagonalLatticeGraph.test_periodic.<locals>.<listcomp>  r   r   r   r%   r/   r.   rG   rF   )r   r   r'   r   rI   r_   r`   ra   )r(   r   HLGs      r   rN   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   r
   r   r   r   r      s[        KK> > > 	- 	- 	-2 2 2
B 
B 
B 
B 
Br   r   )rm   	itertoolsr   r_   networkxr   networkx.utilsr   r   markparametrizer   r   r    r"   ro   r   r   r   r
   r   r   <module>r      s   C C            & & & & & &> > > b123MN @ @ @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   