
    wgyJ                        d dl Z d dlZ ej                  d      Z ej                  d      Zd dlZd dlmZm	Z	m
Z
 d dlmZ  G d d      Zej                  d        Zej                   j#                  d	ed
fedfedff      d        Zd Zej                   j#                  d ej.                         ej1                  d dgdd gge      f ej4                         ej1                  d dgd d gge      fg      d        Zd Zej                   j#                  dedfedfedfej:                  dfej<                  dff      d        Zej                   j#                  d ej.                         ddgddggf ej4                         ddgddggfg      d        Z d Z!ej                   j#                  dd d!g      d"        Z"ej                   j#                  d#ej.                  ej4                  f      ej                   j#                  d$d%d d&d'difd d&d(d)d*fd d&d+dd,d-fg      d.               Z#ej                   j#                  d/ ej.                          ej4                         f      d0        Z$ej                   j#                  d/ ej.                          ej4                         f      d1        Z%d2 Z&ej                   j#                  d#ejN                  ejP                  f      d3        Z)d4 Z*ej                   j#                  d5g d6g d7g d8g d9g d:f      d;        Z+ej                   j#                  d5g d6g d7g d8g d9g d:f      d<        Z,ej                   j#                  d5g d6g d7g d8g d9g d:f      d=        Z-ej                   j#                  d5g d6g d7g d8g d9g d:f      ej                   j#                  d>ej\                  ej                  ej^                  f      d?               Z0y)@    Nnumpyznumpy.testing)barbell_graphcycle_graph
path_graph)graphs_equalc            	           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 Zd Zd Zej$                  j'                  ddeej-                  ddg      f      d        Zd Zd Zd Zd Zd Zy)TestConvertNumpyArrayc                    t        dd      | _        t        dt        j                        | _        | j                  t        j                               | _        | j                  t        j                               | _	        y )N
      create_using)
r   G1r   nxDiGraphG2create_weightedGraphG3G4)selfs    f/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/networkx/tests/test_convert_numpy.pysetup_methodz"TestConvertNumpyArray.setup_method   sR    A&brzz:&&rxxz2&&rzz|4    c                     t        d      }|j                  |       |j                  d |j                         D               |S )N   c              3   2   K   | ]  \  }}||d |z   f  yw)r   N ).0uvs      r   	<genexpr>z8TestConvertNumpyArray.create_weighted.<locals>.<genexpr>   s     !GTQ1aa.!G   )r   add_nodes_fromadd_weighted_edges_fromedges)r   Ggs      r   r   z%TestConvertNumpyArray.create_weighted   s8    N		!!!GQWWY!GGr   c                     t        |j                               t        |j                               k(  sJ t        |j                               t        |j                               k(  sJ y )N)sortednodesr&   )r   r   r   s      r   assert_equalz"TestConvertNumpyArray.assert_equal   sJ    bhhj!VBHHJ%7777bhhj!VBHHJ%7777r   c                 @   |j                         dkD  sJ t        j                  ||      }| j                  ||       t        j                  ||      }| j                  ||       t        j
                  d|      j                  |      }| j                  ||       y )Nr   r   )sumr   from_numpy_arrayr,   to_networkx_graphempty_graph	__class__)r   r'   Ar   GGGWGIs          r   identity_conversionz)TestConvertNumpyArray.identity_conversion   s    uuw{{  >!R !!!,?!R ^^A|,66q9!R r   c                     t         j                  g dg dg      }t        j                  t        j
                  t        j                  |       y)z!Conversion from non-square array.)      r   )r         N)nparraypytestraisesr   NetworkXErrorr/   r   r3   s     r   
test_shapez TestConvertNumpyArray.test_shape'   s1    HHi+,b&&(;(;Q?r   c                     t        j                  | j                        }| j                  | j                  |t        j                                y)z(Conversion from graph to array to graph.N)r   to_numpy_arrayr   r7   r   rB   s     r   test_identity_graph_arrayz/TestConvertNumpyArray.test_identity_graph_array,   2    dgg&  !RXXZ8r   c                     t        j                  | j                        }| j                  | j                  |t        j                                y)z,Conversion from digraph to array to digraph.N)r   rE   r   r7   r   rB   s     r   test_identity_digraph_arrayz1TestConvertNumpyArray.test_identity_digraph_array1   2    dgg&  !RZZ\:r   c                     t        j                  | j                        }| j                  | j                  |t        j                                y)z:Conversion from weighted graph to array to weighted graph.N)r   rE   r   r7   r   rB   s     r   "test_identity_weighted_graph_arrayz8TestConvertNumpyArray.test_identity_weighted_graph_array6   rG   r   c                     t        j                  | j                        }| j                  | j                  |t        j                                y)z>Conversion from weighted digraph to array to weighted digraph.N)r   rE   r   r7   r   rB   s     r   $test_identity_weighted_digraph_arrayz:TestConvertNumpyArray.test_identity_weighted_digraph_array;   rJ   r   c                 
   t        d      }t        d      }t        |      }t        j                  ||      }t        j                  |      }| j                  ||       ||d   gz  }t        j                  t        j                  t        j                  ||       g d}t        j                  t        j                  d||j                  z
   d      5  t        j                  ||       d	d	d	       y	# 1 sw Y   y	xY w)
z6Conversion from graph to array to graph with nodelist.r   r   nodelistr   )r   r9   zNodes z in nodelist is not in GmatchN)
r   listr   rE   r   r,   r?   r@   rA   r+   )r   P4P3rQ   r3   GAs         r   test_nodelistz#TestConvertNumpyArray.test_nodelist@   s    ]]8b84XXa["b! 	Xa[M!b&&(9(92Q ]]8bhh.//GH
 	5 b84		5 	5 	5s   C99Dc                    t        j                         }|j                  d t        d      D               t	        d      }t        j
                  |      }t        j                  j                  |t        j
                  |d              t        j                  j                  d|z  t        j
                  |             t        j                  j                  d|z  t        j
                  |d             y )Nc              3   2   K   | ]  }||d z   dddf  yw)r9         ?333333?)weightotherNr   )r   ns     r   r"   z<TestConvertNumpyArray.test_weight_keyword.<locals>.<genexpr>W   s      WAq1us&CDWr#   r   r   r^   r\   r]   r_   )	r   r   add_edges_fromranger   rE   r=   testingr,   )r   WP4rV   r3   s       r   test_weight_keywordz)TestConvertNumpyArray.test_weight_keywordU   s    hhjWeTUhWW]b!


2#4#4S#FG


a):):3)?@


a):):3w)OPr   c                    t         j                  dgg      }t        j                  |      }t	        |d   d   d         t
        k(  sJ t         j                  dgg      j                  t              }t        j                  |      }t	        |d   d   d         t        k(  sJ t         j                  dgg      j                  t              }t        j                  |      }t	        |d   d   d         t        k(  sJ t         j                  dgg      j                  t              }t        j                  |      }t	        |d   d   d         t        k(  sJ t         j                  dgg      j                  t              }t        j                  |      }t	        |d   d   d         t        k(  sJ t         j                  dgg      j                  t              }t        j                  t        t        j                  |       t         j                  g dg dgg dg dgg      }t        j                  t        j                  d|j                          5  t        j                  |      }d d d        y # 1 sw Y   y xY w)Nr9   r   r^   )r9   r9   r9   zInput array must be 2D, not rS   )r=   r>   r   r/   typeintastypefloatstrboolcomplexobjectr?   r@   	TypeErrorrA   ndim)r   r3   r'   r(   s       r   test_from_numpy_array_typez0TestConvertNumpyArray.test_from_numpy_array_type^   s   HHqcUO"AaDGH%&#---HHqcUO""5)"AaDGH%&%///HHqcUO""3'"AaDGH%&#---HHqcUO""4("AaDGH%&$...HHqcUO""7+"AaDGH%&'111HHqcUO""6*i!4!4a8HHy),y).DEF]]&B166($K
 	' ##A&A	' 	' 	's   "JJ
c                 4   dt         fdt        fg}t        j                  dgg|      }t	        j
                  |      }t        |d   d   d         t         k(  sJ t        |d   d   d         t        k(  sJ |d   d   d   dk(  sJ |d   d   d   dk(  sJ y )Nr^   cost)      ?r:   dtyper   r:   ru   )rk   ri   r=   r>   r   r/   rh   r   dtr3   r'   s       r   test_from_numpy_array_dtypez1TestConvertNumpyArray.test_from_numpy_array_dtype|   s    &#/HHxj\H,"AaDGH%&%///AaDGFO$+++tAwv!###tAwx C'''r   c           	         t         j                  ddgddgg      }t        j                         }g d}|j	                  |D cg c]
  \  }}||df c}}       |j                  ddd       t        j                  |dt        j                        }t        ||      sJ t        j                  |dt        j                        }t        ||      sJ g d}t        j                         }|j	                  |D cg c]
  \  }}||df c}}       t        j                  |dt        j                        }t        ||      sJ t        j                         }|j                  t        |      d       d|d   d   d	   d
<   t        j                  |dt        j                        }t        ||      sJ yc c}}w c c}}w )zTests that the :func:`networkx.from_numpy_array` function
        interprets integer weights as the number of parallel edges when
        creating a multigraph.

        r9   r:   )r   r   r   r9   r9   r   ra   T)parallel_edgesr   F)r|   r}   r~   r9   r9   r   r   r^   N)r=   r>   r   r   r%   add_edger/   r   MultiDiGraphrb   set)r   r3   expectedr&   r    r!   actuals          r   $test_from_numpy_array_parallel_edgesz:TestConvertNumpyArray.test_from_numpy_array_parallel_edges   s    HHq!fq!f%& ::<(((%)HA1a))HI!Qq)$$Qt"**UFH---$$Qu2::VFH--- 9??$((%)HA1a))HI$$d
 FH---??$E
15&'Aq(#$$e"//
 FH---/ *I *Is   F=
?G
ry   N)r^   f8)colori1c                     t         j                  ddgddgg|      }t        j                  |d       }d|j                  d   vsJ t        |j                  d         dk(  sJ y )Nr   r9   rv   	edge_attrr^   r}   )r=   r>   r   r/   r&   lenrx   s       r   "test_from_numpy_array_no_edge_attrz8TestConvertNumpyArray.test_from_numpy_array_no_edge_attr   sf     HHq!fq!f%RH0T2qwwt},,,1774=!Q&&&r   c                    t         j                  ddgddgg      }t        j                  |t        j                  d       }t        d |d   d   j                         D              sJ t        |d   d   d         dk(  sJ y )Nr   r:   )r   r   c              3   *   K   | ]  \  }}d |v  yw)r^   Nr   )r   _es      r   r"   zUTestConvertNumpyArray.test_from_numpy_array_multiedge_no_edge_attr.<locals>.<genexpr>   s     AA81$As   r9   )r=   r>   r   r/   r   allitemsr   r   r3   r'   s      r   ,test_from_numpy_array_multiedge_no_edge_attrzBTestConvertNumpyArray.test_from_numpy_array_multiedge_no_edge_attr   su    HHq!fq!f%&4PA1aAAAA1Q471:!###r   c                     t         j                  ddgddgg      }t        j                  |d      }d|j                  d   vsJ |j                  d   d   dk(  sJ y )Nr   r:   r   rt   r   r^   r}   )r=   r>   r   r/   r&   r   s      r   &test_from_numpy_array_custom_edge_attrz<TestConvertNumpyArray.test_from_numpy_array_custom_edge_attr   s`    HHq!fq!f%&V4qwwt},,,wwt}V$)))r   c                     t         j                  ddgddgg      }t        j                  |t        j                        }t        j                         }|j                  ddd       t        ||      sJ y)zTests that a symmetric array has edges added only once to an
        undirected multigraph when using :func:`networkx.from_numpy_array`.

        r   r9   r   ra   N)r=   r>   r   r/   
MultiGraphr   r   )r   r3   r'   r   s       r   test_symmetricz$TestConvertNumpyArray.test_symmetric   se    
 HHq!fq!f%&>==?!Qq)Ax(((r   c                     t        j                  d      }t        j                  |t              }|j                  t        k(  sJ yzTest that setting dtype int actually gives an integer array.

        For more information, see GitHub pull request #1363.

        r   rv   N)r   complete_graphrE   ri   rw   r   r'   r3   s      r   test_dtype_int_graphz*TestConvertNumpyArray.test_dtype_int_graph   s6     a as+ww#~~r   c                     t        j                  t        j                  d            }t        j                  |t              }|j
                  t        k(  sJ yr   )r   r   r   rE   ri   rw   r   s      r   test_dtype_int_multigraphz/TestConvertNumpyArray.test_dtype_int_multigraph   s?     MM"++A./as+ww#~~r   )__name__
__module____qualname__r   r   r,   r7   rC   rF   rI   rL   rN   rY   rf   rr   rz   r   r?   markparametrizeri   r=   rw   r   r   r   r   r   r   r   r   r   r	   r	      s    58!@
9
;
9
;
5*Q'<(".H [[HH!?3	
	'	'$*	)r   r	   c                  ~    t        j                         } | j                  ddd       | j                  ddd       | S )Nr9   r:      ra   F   )r   r   r   )r'   s    r   multigraph_test_graphr      s6    
AJJq!AJJJq!BJHr   )operatorr   M   r   r   c                 F    t        j                  | |      }|d   |k(  sJ y )N)multigraph_weightr~   )r   rE   )r   r   r   r3   s       r   test_numpy_multigraphr      s'    
/8LAT7hr   c                     | }|j                  ddd       t        j                  |ddg      }|j                  dk(  sJ |d   d	k(  sJ y )
Nr   r9   r   ra   r:   rP   )r:   r:   r~   r   )r   r   rE   shape)r   r'   r3   s      r   'test_to_numpy_array_multigraph_nodelistr      sQ    AJJq!AJ
!q!f-A77fT7b==r   zG, expected      ?       @rv   c                     | j                  ddd       t        j                  | t              }t        j                  ||       y )Nr   r9   r   ra   rv   )r   r   rE   rn   nptassert_array_equal)r'   r   r3   s      r   #test_to_numpy_array_complex_weightsr      s8     JJq!FJ#
!7+A1h'r   c                     t        j                         } d}| j                  ddd       t        j                  | t              }t
        j                  d|gddggt              }t        j                  ||       t        j                  | j                         t              }t
        j                  d|g|dggt              }t        j                  ||       y )Nl   F}r   r9   ra   rv   )
r   r   r   rE   ro   r=   r>   r   r   to_undirected)r'   wr3   r   s       r   %test_to_numpy_array_arbitrary_weightsr     s    


AAJJq!1J2
!6*Axx!Q!Q(x7H1h' 	!//+6:Axx!Q!Q(x7H1h'r   zfunc, expectedrR   r      gUUUUUU@r:   c                 n   t        j                         }g d}|D ]  }|j                  dd|        t        j                  || t              }t
        j                  |d|gddgg      sJ t        j                  |j                         | t              }t
        j                  |d|g|dgg      sJ y)z6Test various functions for reducing multiedge weights.)rR   r:   g      $@r   r9   ra   )r   rw   N)r   r   r   rE   rk   r=   allcloser   )funcr   r'   weightsr   r3   s         r   )test_to_numpy_array_multiweight_reductionr     s     	AG #	

1a
"#
!t5AA;;qAx=1a&1222 	!//+t5QA;;qAx=8Q-8999r   r|   )r   r;   c                     | j                  dddd       t        j                  dt        fdt        fg      }t	        j
                  | |d	      }t        j                  ||
      }t        j                  ||       y)zWhen `dtype` is structured (i.e. has names) and `weight` is None, use
    the named fields of the dtype to look up edge attributes.r   r9   r   g      @)r^   rt   r^   rt   Nrw   r^   rv   )	r   r=   rw   ri   r   rE   asarrayr   r   )r'   r   rw   r3   s       r   6test_to_numpy_array_structured_dtype_attrs_from_fieldsr   (  si     JJq!BSJ)HHxo}56E
!56Azz(%z0H1h'r   c                     t        j                  d      } t        j                  dt        fg      }t        j
                  | |d       }t        j                  g dg dg dgt              }t        j                  |d   |       y )Nr   r^   r   )r   r9   r   )r9   r   r9   rv   )	r   r   r=   rw   rk   rE   r>   r   r   )r'   rw   r3   r   s       r   8test_to_numpy_array_structured_dtype_single_attr_defaultr   9  sg    
aAHHx'()E
!56AxxIy9xGH1X;1r   )
field_nameexpected_attr_val)r^   r9   )rt   r   c                 0   t        j                         }|j                  ddd       t        j	                  | t
        fg      }t        j                  ||d       }t        j                  d|g|dggt
              }t        j                  ||    |       y )Nr   r9   r   )rt   r   rv   )
r   r   r   r=   rw   rk   rE   r>   r   r   )r   r   r'   rw   r3   r   s         r   0test_to_numpy_array_structured_dtype_single_attrr   A  s     	
AJJq!!JHHz5)*+E
!56Axx!./2CQ1GHPUxVH1Z=(3r   
graph_typeedger}   r9   r^   r;   )r^   flowg       @i)r^   rt   r   c                 &    | |g      }t         j                  dt        fdt        fdt        fg      }t        j                  ||d       }|j
                  D ]7  }t        j                  |t        |      }t        j                  ||   |       9 y )Nr^   rt   r   r   )r=   rw   rk   r   rE   namesr   r   )r   r   r'   rw   r3   attrr   s          r   4test_to_numpy_array_structured_dtype_multiple_fieldsr   Q  s     	D6AHHx'&%65/JKE
!56A 2$$QeDAqw12r   r'   c                 j   | j                  ddd       t        j                  dt        fdt        fg      }t	        j
                  | |d t        j                        }|j                  D ]F  }t	        j
                  | t        |t        j                        }t        j                  ||   |       H y )Nr   r9   r   ra   r^   rt   rw   r^   nonedge)
r   r=   rw   rk   r   rE   nanr   r   r   )r'   rw   r3   r   r   s        r   3test_to_numpy_array_structured_dtype_scalar_nonedger   d  s    JJq!BJHHx'&%9:E
!5rvvFA 2$$QeD"&&Qqw12r   c                    | j                  ddd       t        j                  dt        fdt        fg      }t        j	                  dt        j
                  fg|      }t        j                  | |d|	      }|j                  D ]=  }||   }t        j                  | t        ||	      }t        j                  ||   |       ? y)
z[Similar to the scalar case, except has a different non-edge value for
    each named field.r   r9   r   ra   r^   rt   rv   Nr   )r   r=   rw   rk   r>   infr   rE   r   r   r   )r'   rw   nonedgesr3   r   r   r   s          r   0test_to_numpy_array_structured_dtype_nonedge_aryr   n  s     JJq!BJHHx'&%9:Exx!RVVUx3H
!5xHA 24.$$QeD'Rqw12r   c                     t        j                  d      } t        j                  dt        fdt        fg      }d}t        j                  t        |      5  t        j                  | |       ddd       t        j                  t        |      5  t        j                  | |d       ddd       y# 1 sw Y   FxY w# 1 sw Y   yxY w)	zgUsing both a structured dtype (with named fields) and specifying a `weight`
    parameter is ambiguous.r   r^   rt   z7Specifying `weight` not supported for structured dtypesrS   rv   Nr   )	r   r   r=   rw   ri   r?   r@   
ValueErrorrE   )r'   rw   exception_msgs      r   7test_to_numpy_array_structured_dtype_with_weight_raisesr   |  s     	aAHHxo}56EMM	z	7 *
!5)*	z	7 9
!589 9* *9 9s   B3B?3B<?Cc                    t        j                  d|       }t        j                  dt        fdt        fg      }t        j                  t         j                  d      5  t        j                  ||d        d d d        y # 1 sw Y   y xY w)Nr   r   r^   rt   z#Structured arrays are not supportedrS   r   )	r   r   r=   rw   ri   r?   r@   rA   rE   )r   r'   rw   s      r   0test_to_numpy_array_structured_multigraph_raisesr     si    
aj1AHHxo}56E	r''/T	U 7
!567 7 7s    BBc                     d} t         j                  t         j                  | dz
        d      }t        j                  |       }t        t        j                  |d      |      sJ t        t        |             }t        t        j                  |d|      |      sJ t        t        | dz               }t        j                  t        d      5  t        j                  ||	       ddd       t        t        | dz
              }t        j                  t        d      5  t        j                  ||	       ddd       y# 1 sw Y   \xY w# 1 sw Y   yxY w)
z:An exception is raised when `len(nodelist) != A.shape[0]`.r;   r9   kNr   r   rQ   z'nodelist must have the same length as ArS   rP   )r=   diagonesr   r   r   r/   rU   rc   r?   r@   r   )r`   r3   r   r+   s       r   'test_from_numpy_array_nodelist_bad_sizer     s   	A
A!$A}}QH++A>IIIqNE
A>  
 q1uE	z)R	S /
A./ q1uE	z)R	S /
A./ // /
/ /s   E$EEEr+   )r   r   r:   r9   r   )	   r   r9   r:      )abcdr   )r|   r   r:   r   )r   r:   )r   r9   )r3   r:   r   spam)r9   r   c                    t         j                  t         j                  d      d      }t        j                  t        j
                  d      t        t        |             d      }t        j                  |d |       }t        ||      sJ t        j                  |dd	
       t        j                  ||       }t        ||      sJ y )Nr   r9   r   r;   Tmappingcopyr   ru   r^   namerP   )r=   r   r   r   relabel_nodesr   dict	enumerater/   r   set_edge_attributes)r+   r3   r   r'   s       r   test_from_numpy_array_nodelistr     s     	
a A
a$y'7"8tH 	A>A8$$$ 8Sx8
A.A8$$$r   c                    t         j                  t         j                  d      d      }t        j                  g d      }t        j
                  |t        t        |             d      }t        j                  |t        j                  d |       }t        ||      sJ t        j                  |dd	
       t        j                  |t        j                  |       }t        ||      sJ y )Nr   r9   r   r}   )r9   r:   r   )r   r   Tr   )r   r   rQ   ru   r^   r   )r   rQ   )r=   r   r   r   r   r   r   r   r/   r   r   )r+   r3   Hr   r'   s        r   'test_from_numpy_array_nodelist_directedr    s     	
a A


34A4	%0@+AMH
ABJJ$QVWA8$$$ 8Sx8
ABJJGA8$$$r   c                    t         j                  g dg dg dg dg dg      }t        j                         }t	        d      D ]-  \  }}|j                  t        j                  ||dz                / t        j                  |t        t	        |             d	      }t        j                  |dt        j                  d | 
      }t        ||      sJ y )N)r   r9   r   r   r   )r9   r   r:   r   r   )r   r:   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   r9   Tr   )r   r   r   rQ   )r=   r>   r   r   r   rb   	itertoolsrepeatr   r   r/   r   )r+   r3   r   ir   r   r'   s          r   )test_from_numpy_array_nodelist_multigraphr    s     		
	A 	A=> 84	))$A6784	%0@+AMH
	]]	A 8$$$r   graphc           	          | d      }t        j                  |      }t        j                  |t        t	        |            d      }t        j
                  |d |      }t        ||      sJ  | d      }|j                  d       t        j                  |      }t        j                  |t        t        |j                  |            d      }t        j
                  |d |      }t        ||      sJ y )Nr;   Tr   r   r   foo)
r   rE   r   r   r   r/   r   add_nodezipr+   )r  r+   r'   r3   r   r   s         r   'test_from_numpy_array_nodelist_rountripr    s     	aA
!A4	%0@+AMH
A>A8$$$ 	aAJJu
!A4AGGU0C+D4PH
A>A8$$$r   )1r  r?   importorskipr=   r   networkxr   networkx.generators.classicr   r   r   networkx.utilsr   r	   fixturer   r   r   r.   minmaxr   r   r   r>   rn   r   r   r   meanmedianr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   wheel_graphr  r   r   r   <module>r     s_    V!f/*  N N 'U Up   1S"IQx#r3ST U
 	RXX6{VQK8XHI	rxx!Vq!f 5WxEF((( 	2Yb	C9rww&7"))QH:	: 	vw''6):;<	)FF+;<=((2 '44 "**'=>
	
A"~	
A!R()	
A#r378	2 ?2 xrxxz:2::<892 :2 xrxxz:2::<89
2 :
2	9 r'GH7 I7/. !0#	%	% !0#	%	% !0#	%	%4 !0#	 2#4#4bnnbnn"UV% W	%r   