o
    ˷eb                     @   s  d dl Z e dZe dZd dlZd dlmZmZm	Z	 d dl
mZ dd Zdd	 Zd
d ZG dd dZG dd dZe jdd Zdd Zdd Zdd Zdd Ze jdd Zdd Ze jddd gd!fd"d"gd#ffd$d% Ze jd&d' Ze jd(ed)fed*fed+ffd,d- Z d.d/ Z!e jd0e" ej#d d1gd1d gge$d2fe% ej#d d1gd d gge$d2fgd3d4 Z&d5d6 Z'e jd7ed8fed9fed:fej(d;fej)dffd<d= Z*e jd0e" d>d?gd?d>ggfe% d>d?gd>d>ggfgd@dA Z+dBdC Z,e jdDdEdFgdGdH Z-e jdIej"ej%fe jdJdKd d"dLd9ifd d"dMdNdOfd d"dPd9dQdRfgdSdT Z.e jdUe" e% fdVdW Z/e jdUe" e% fdXdY Z0dZd[ Z1e jdIej2ej3fd\d] Z4dS )^    Nnumpyznumpy.testing)barbell_graphcycle_graph
path_graph)graphs_equalc                   C      t tjt  d S N)pytestdeprecated_callnxto_numpy_matrixGraph r   r   X/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/tests/test_convert_numpy.py test_to_numpy_matrix_deprecation      r   c                   C   s   t tjtd d S )N   )r	   r
   r   from_numpy_matrixnpeyer   r   r   r   "test_from_numpy_matrix_deprecation   s   r   c                   C   r   r   )r	   r
   r   to_numpy_recarrayr   r   r   r   r   "test_to_numpy_recarray_deprecation   r   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1S )2TestConvertNumpyMatrixc                 C   @   t dd| _tdtjd| _| t | _| t | _	d S N
      create_using
r   G1r   r   DiGraphG2create_weightedr   G3G4selfr   r   r   setup_method   s   z#TestConvertNumpyMatrix.setup_methodc                 C   s    t d}ttjtj| d S )Na)r   arrayr	   raisesr   NetworkXErrorto_networkx_graph)r(   Gr   r   r   test_exceptions!   s   
z&TestConvertNumpyMatrix.test_exceptionsc                 C   .   t d}|| |dd | D  |S )N   c                 s   "    | ]\}}||d | fV  qdS r   Nr   .0uvr   r   r   	<genexpr>(        z9TestConvertNumpyMatrix.create_weighted.<locals>.<genexpr>r   add_nodes_fromadd_weighted_edges_fromedgesr(   r/   gr   r   r   r$   %      
z&TestConvertNumpyMatrix.create_weightedc                 C   <   t | t | ksJ t | t | ksJ d S r   sortednodesr>   r(   r!   r#   r   r   r   assert_equal+       z#TestConvertNumpyMatrix.assert_equalc                 C   f   |  dksJ tj||d}| || tj||d}| || td||}| || d S Nr   r   )sumr   r   rG   r.   empty_graph	__class__r(   r/   Ar   GGGWGIr   r   r   identity_conversion/      z*TestConvertNumpyMatrix.identity_conversionc                 C   ,   t g dg dg}ttjtj| dS z!Conversion from non-square array.)   r   r   )r2         N)r   r+   r	   r,   r   r-   r   r(   rO   r   r   r   
test_shape8      z!TestConvertNumpyMatrix.test_shapec                 C   $   t | j}| | j|t   dS )z)Conversion from graph to matrix to graph.N)r   r   r!   rS   r   rZ   r   r   r   test_identity_graph_matrix=      z1TestConvertNumpyMatrix.test_identity_graph_matrixc                 C   .   t | j}t|}| | j|t   dS z(Conversion from graph to array to graph.N)r   r   r!   r   asarrayrS   r   rZ   r   r   r   test_identity_graph_arrayB      
z0TestConvertNumpyMatrix.test_identity_graph_arrayc                 C   r]   )z-Conversion from digraph to matrix to digraph.N)r   r   r#   rS   r"   rZ   r   r   r   test_identity_digraph_matrixH   r_   z3TestConvertNumpyMatrix.test_identity_digraph_matrixc                 C   r`   z,Conversion from digraph to array to digraph.N)r   r   r#   r   rb   rS   r"   rZ   r   r   r   test_identity_digraph_arrayM   rd   z2TestConvertNumpyMatrix.test_identity_digraph_arrayc                 C   r]   )z;Conversion from weighted graph to matrix to weighted graph.N)r   r   r%   rS   r   rZ   r   r   r   #test_identity_weighted_graph_matrixS   r_   z:TestConvertNumpyMatrix.test_identity_weighted_graph_matrixc                 C   r`   z:Conversion from weighted graph to array to weighted graph.N)r   r   r%   r   rb   rS   r   rZ   r   r   r   "test_identity_weighted_graph_arrayX   rd   z9TestConvertNumpyMatrix.test_identity_weighted_graph_arrayc                 C   r]   )z?Conversion from weighted digraph to matrix to weighted digraph.N)r   r   r&   rS   r"   rZ   r   r   r   %test_identity_weighted_digraph_matrix^   r_   z<TestConvertNumpyMatrix.test_identity_weighted_digraph_matrixc                 C   r`   z>Conversion from weighted digraph to array to weighted digraph.N)r   r   r&   r   rb   rS   r"   rZ   r   r   r   $test_identity_weighted_digraph_arrayc   rd   z;TestConvertNumpyMatrix.test_identity_weighted_digraph_arrayc                 C   s   t d}t d}t|}tj||d}t|}| || tj|g djdks*J |dg }tjtj	tj||d g d}tjtj	tj||d dS )z7Conversion from graph to matrix to graph with nodelist.r2   r   nodelistr   r   r   )r   rW   r   N)
r   listr   r   r   rG   shaper	   r,   r-   )r(   P4P3ro   rO   GAlong_nodelistnonnodelistr   r   r   test_nodelisti   s   

z$TestConvertNumpyMatrix.test_nodelistc                 C      t  }|dd tdD  td}t |}tj|t j|d d tjd| t | tjd| t j|dd d S )	Nc                 s   &    | ]}||d  t dddfV  qdS rW         ?333333?)weightotherNdictr6   nr   r   r   r9   }      $ z=TestConvertNumpyMatrix.test_weight_keyword.<locals>.<genexpr>r   r2   r   r}   r~   r   )	r   r   add_edges_fromranger   r   r   testingrG   r(   WP4rt   rO   r   r   r   test_weight_keyword{      
 z*TestConvertNumpyMatrix.test_weight_keywordc                 C   s  t d tdgg}t|}t|d d d tksJ tdggt	}t|}t|d d d t	ks<J tdggt
}t|}t|d d d t
ksYJ tdggt}t|}t|d d d tksvJ tdggt}t|}t|d d d tksJ tdggt}t ttj| td}t| }t|}tdd | D sJ t|}tdd | D sJ d S )	NscipyrW   r   r   r   c                 s   ,    | ]\}}t |tkot |tkV  qd S r   typeintr6   mr   r   r   r   r9         * zETestConvertNumpyMatrix.test_from_numpy_matrix_type.<locals>.<genexpr>c                 s   r   r   r   r   r   r   r   r9      r   )r	   importorskipr   matrixr   r   r   r   astypefloatstrboolcomplexobjectr,   	TypeErrorr   adjacency_matrixtodenseallr>   from_numpy_array)r(   rO   r/   Hr   r   r   test_from_numpy_matrix_type   s0   








z2TestConvertNumpyMatrix.test_from_numpy_matrix_typec                 C      dt fdtfg}tjdgg|d}t|}t|d d d t ks$J t|d d d tks2J |d d d dks>J |d d d dksJJ d S Nr   cost)      ?r   dtyper   r   r   )r   r   r   r   r   r   r   r(   dtrO   r/   r   r   r   test_from_numpy_matrix_dtype      
z3TestConvertNumpyMatrix.test_from_numpy_matrix_dtypec                 C   s   t  }|jddddd t j|dtfdtfgd}t|jjddgks&J |j	d	 dks/J |j	d
 dks8J |j
d	 dksAJ |j
d
 dksJJ d S )NrW   r         @rX   r   r   r   r   r   r   rW   rp           r   )r   r   add_edger   r   r   rD   r   namesr   r   r(   r/   rO   r   r   r   test_to_numpy_recarray   s   z-TestConvertNumpyMatrix.test_to_numpy_recarrayc                 C   s   t  }|jdddd |jdddd t |}|d dks!J t j|td}|d dks0J t j|td}|d dks?J d S )	NrW   r      r   F   rW   r   M   multigraph_weight)r   
MultiGraphr   r   minmaxr   r   r   r   test_numpy_multigraph   s   
z,TestConvertNumpyMatrix.test_numpy_multigraphc                 C      t ddgddgg}t }g d}|dd |D  |jdddd tj|dtjd}t||s5J tj|d	tjd}t||sEJ g d
}t }|dd |D  tj|dtjd}t||sgJ t }|j	t
|dd d|d d d d< tj|d	tjd}t||sJ dS )zTests that the :func:`networkx.from_numpy_matrix` function
        interprets integer weights as the number of parallel edges when
        creating a multigraph.

        rW   r   rp   r   r   c                 S      g | ]	\}}||d fqS rW   r   r5   r   r   r   
<listcomp>       zPTestConvertNumpyMatrix.test_from_numpy_matrix_parallel_edges.<locals>.<listcomp>r   Tparallel_edgesr   Frp   r   r   rW   rW   r   c                 S   r   r   r   r5   r   r   r   r      r   r   r   N)r   r   r   r"   r=   r   r   r   MultiDiGraphr   setr(   rO   expectedr>   actualr   r   r   %test_from_numpy_matrix_parallel_edges   .   z<TestConvertNumpyMatrix.test_from_numpy_matrix_parallel_edgesc                 C   P   t ddgddgg}tj|tjd}t }|jdddd t||s&J dS )zTests that a symmetric matrix has edges added only once to an
        undirected multigraph when using :func:`networkx.from_numpy_matrix`.

        r   rW   r   r   N)r   r   r   r   r   r   r   r(   rO   r/   r   r   r   r   test_symmetric   
   z%TestConvertNumpyMatrix.test_symmetricc                 C   *   t d}t j|td}|jtksJ dS zTest that setting dtype int actually gives an integer matrix.

        For more information, see GitHub pull request #1363.

        r   r   N)r   complete_graphr   r   r   r   r   r   r   test_dtype_int_graph      
z+TestConvertNumpyMatrix.test_dtype_int_graphc                 C   0   t t d}t j|td}|jtksJ dS r   )r   r   r   r   r   r   r   r   r   r   test_dtype_int_multigraph      z0TestConvertNumpyMatrix.test_dtype_int_multigraphN)__name__
__module____qualname__r)   r0   r$   rG   rS   r[   r^   rc   re   rg   rh   rj   rk   rm   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s2    		!	
$
r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$TestConvertNumpyArrayc                 C   r   r   r    r'   r   r   r   r)     s   z"TestConvertNumpyArray.setup_methodc                 C   r1   )Nr2   c                 s   r3   r4   r   r5   r   r   r   r9     r:   z8TestConvertNumpyArray.create_weighted.<locals>.<genexpr>r;   r?   r   r   r   r$     rA   z%TestConvertNumpyArray.create_weightedc                 C   rB   r   rC   rF   r   r   r   rG     rH   z"TestConvertNumpyArray.assert_equalc                 C   rI   rJ   )rK   r   r   rG   r.   rL   rM   rN   r   r   r   rS     rT   z)TestConvertNumpyArray.identity_conversionc                 C   rU   rV   )r   r+   r	   r,   r   r-   r   rZ   r   r   r   r[   !  r\   z TestConvertNumpyArray.test_shapec                 C   r]   ra   )r   to_numpy_arrayr!   rS   r   rZ   r   r   r   rc   &  r_   z/TestConvertNumpyArray.test_identity_graph_arrayc                 C   r]   rf   )r   r   r#   rS   r"   rZ   r   r   r   rg   +  r_   z1TestConvertNumpyArray.test_identity_digraph_arrayc                 C   r]   ri   )r   r   r%   rS   r   rZ   r   r   r   rj   0  r_   z8TestConvertNumpyArray.test_identity_weighted_graph_arrayc                 C   r]   rl   )r   r   r&   rS   r"   rZ   r   r   r   rm   5  r_   z:TestConvertNumpyArray.test_identity_weighted_digraph_arrayc                 C   sd   t d}t d}t|}tj||d}t|}| || ||d g7 }tjtjtj||d dS )z6Conversion from graph to array to graph with nodelist.r2   r   rn   r   N)	r   rr   r   r   r   rG   r	   r,   r-   )r(   rt   ru   ro   rO   rv   r   r   r   ry   :  s   
z#TestConvertNumpyArray.test_nodelistc                 C   rz   )	Nc                 s   r{   r|   r   r   r   r   r   r9   I  r   z<TestConvertNumpyArray.test_weight_keyword.<locals>.<genexpr>r   r2   r   r}   r~   r   )	r   r   r   r   r   r   r   r   rG   r   r   r   r   r   G  r   z)TestConvertNumpyArray.test_weight_keywordc                 C   sD  t dgg}t|}t|d d d tksJ t dggt}t|}t|d d d tks7J t dggt}t|}t|d d d tksTJ t dggt	}t|}t|d d d t	ksqJ t dggt
}t|}t|d d d t
ksJ t dggt}tttj| d S )NrW   r   r   )r   r+   r   r   r   r   r   r   r   r   r   r   r	   r,   r   )r(   rO   r/   r   r   r   test_from_numpy_array_typeP  s"   




z0TestConvertNumpyArray.test_from_numpy_array_typec                 C   r   r   )r   r   r   r+   r   r   r   r   r   r   r   test_from_numpy_array_dtypeh  r   z1TestConvertNumpyArray.test_from_numpy_array_dtypec                 C   r   )zTests that the :func:`networkx.from_numpy_array` function
        interprets integer weights as the number of parallel edges when
        creating a multigraph.

        rW   r   r   c                 S   r   r   r   r5   r   r   r   r   |  r   zNTestConvertNumpyArray.test_from_numpy_array_parallel_edges.<locals>.<listcomp>r   Tr   Fr   c                 S   r   r   r   r5   r   r   r   r     r   r   r   N)r   r+   r   r"   r=   r   r   r   r   r   r   r   r   r   r   $test_from_numpy_array_parallel_edgesq  r   z:TestConvertNumpyArray.test_from_numpy_array_parallel_edgesc                 C   r   )zTests that a symmetric array has edges added only once to an
        undirected multigraph when using :func:`networkx.from_numpy_array`.

        r   rW   r   r   N)r   r+   r   r   r   r   r   r   r   r   r   r     r   z$TestConvertNumpyArray.test_symmetricc                 C   r   zTest that setting dtype int actually gives an integer array.

        For more information, see GitHub pull request #1363.

        r   r   N)r   r   r   r   r   r   r   r   r   r     r   z*TestConvertNumpyArray.test_dtype_int_graphc                 C   r   r   )r   r   r   r   r   r   r   r   r   r   r     r   z/TestConvertNumpyArray.test_dtype_int_multigraphN)r   r   r   r)   r$   rG   rS   r[   rc   rg   rj   rm   ry   r   r   r   r   r   r   r   r   r   r   r   r     s$    			$
r   c                  C   s   t  } | jddddd | S )NrW   r   r   rX   r   )r   r   r   r/   r   r   r   recarray_test_graph  s   r   c                 C   s   t j| dtfdtfgd}t|jjddgksJ |jd dks"J |jd dks+J |jd dks4J |jd d	ks=J t	j
td
d |jd  W d    d S 1 sUw   Y  d S )Nr   r   r   r   r   rp   r   rX   r   has no attributematch)r   r   r   r   rD   r   r   r   r   r	   r,   AttributeErrorcolorr   rO   r   r   r   r     s   "r   c                 C   s|   t | }|jjdksJ |jd dksJ |jd dksJ tjtdd |jd  W d    d S 1 s7w   Y  d S )Nr   rp   r   r   r   r   r   )	r   r   r   r   r   r	   r,   r   r   r   r   r   r   $test_to_numpy_recarray_default_dtype  s   
"r   c                 C   sv   |   }|dd tj|dtfdtfgd}tj|j	t
ddgddgg tj|jt
ddgddgg d S )	Nr   rW   r   r   r   r   r   rX   )to_directedremove_edger   r   r   r   r   r   assert_array_equalr   r+   r   )r   r/   rO   r   r   r   test_to_numpy_recarray_directed  s
   "&r   c                  C   sr   t  } | jdddd tt t | }W d    n1 s!w   Y  t j| dgd}|jd dks7J d S )Nr   rW   red)r   )r   U8r   r   )r   r   r   r	   r,   KeyErrorr   r   )r/   rO   r   r   r   .test_to_numpy_recarray_default_dtype_no_weight  s   r   c                  C   s:   t  } | ddddifddddifddddifg | S )Nr   rW   r   r   r          @r}   )r   r   r   r   r   r   r   recarray_nodelist_test_graph  s
   &r   c                 C   s8   t j| ddgd}tj|jtddgddgg d S )Nr   rW   rn   )r   r   r   r   r   r   r+   )r   rO   r   r   r   test_to_numpy_recarray_nodelist  s   &r   )ro   errmsgr   r   zin nodelist is not in GrW   znodelist contains duplicatesc                 C   sD   t jtj|d tj| |d}W d    d S 1 sw   Y  d S )Nr   rn   )r	   r,   r   r-   r   )r   ro   r   rO   r   r   r   #test_to_numpy_recarray_bad_nodelist  s   "r   c                  C   s,   t  } | jdddd | jdddd | S )NrW   r   r   r   r   )r   r   r   r   r   r   r   multigraph_test_graph  s   r   )operatorr   r   r   r   c                 C   s"   t j| |d}|d |ksJ d S )Nr   r   )r   r   )r   r   r   rO   r   r   r   r     s   r   c                 C   sH   | }|j dddd tj|ddgd}|jdksJ |d d	ks"J d S )
Nr   rW   r   r   r   rn   )r   r   r   r   )r   r   r   rs   )r   r/   rO   r   r   r   'test_to_numpy_array_multigraph_nodelist  s
   r   zG, expected      ?       @r   c                 C   s.   | j dddd tj| td}t|| d S )Nr   rW   r   r   r   )r   r   r   r   nptr   )r/   r   rO   r   r   r   #test_to_numpy_array_complex_weights  s   r  c                  C   s   t  } d}| jdddd t j| td}tjd|gddggtd}t|| t j| 	 td}tjd|g|dggtd}t|| d S )Nl   F}r   rW   r   r   )
r   r"   r   r   r   r   r+   r  r   to_undirected)r/   wrO   r   r   r   r   %test_to_numpy_array_arbitrary_weights  s   r  zfunc, expectedrq   r      gUUUUUU@c                 C   s   t  }g d}|D ]
}|jdd|d q
t j|| td}t|d|gddggs+J t j| | td}t|d|g|dggsCJ dS )z6Test various functions for reducing multiedge weights.)rq   r   g      $@r   rW   r   )r   r   N)r   r   r   r   r   r   allcloser  )funcr   r/   weightsr  rO   r   r   r   )test_to_numpy_array_multiweight_reduction+  s    r
  rp   )r   rX   c                 C   sV   | j ddddd tdtfdtfg}tj| |dd	}tj||d
}t|| dS )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   rW   r   g      @r   r   r   Nr   r   r   )	r   r   r   r   r   r   rb   r  r   )r/   r   r   rO   r   r   r   6test_to_numpy_array_structured_dtype_attrs_from_fields=  s
   
r  c                  C   s^   t d} tdtfg}t j| |d d}tjg dg dg dgtd}t|d | d S )Nr   r   r  )r   rW   r   )rW   r   rW   r   )	r   r   r   r   r   r   r+   r  r   )r/   r   rO   r   r   r   r   8test_to_numpy_array_structured_dtype_single_attr_defaultN  s
   
 r  )
field_nameexpected_attr_val)r   rW   )r   r   c                 C   sf   t  }|jdddd t| tfg}t j||d d}tjd|g|dggtd}t	||  | d S )Nr   rW   r   )r   r  r   )
r   r   r   r   r   r   r   r+   r  r   )r  r  r/   r   rO   r   r   r   r   0test_to_numpy_array_structured_dtype_single_attrV  s   r  
graph_typeedger   r   rX   )r   flowr   i)r   r   r  c                 C   sf   | |g}t dtfdtfdtfg}tj||d d}|jD ]}tj|t|d}t|| | qd S )Nr   r   r  r  )r   r   r   r   r   r   r  r   )r  r  r/   r   rO   attrr   r   r   r   4test_to_numpy_array_structured_dtype_multiple_fieldsf  s   

r  r/   c                 C   sn   | j dddd tdtfdtfg}tj| |d tjd}|jD ]}tj| t|tjd}t	|| | q d S )Nr   rW   r   r   r   r   r   r   nonedge)
r   r   r   r   r   r   nanr   r  r   )r/   r   rO   r  r   r   r   r   3test_to_numpy_array_structured_dtype_scalar_nonedgey  s   
r  c                 C   s   | j dddd tdtfdtfg}tjdtjfg|d}tj| |d|d	}|jD ]}|| }tj| t||d	}t	
|| | q*dS )
z[Similar to the scalar case, except has a different non-edge value for
    each named field.r   rW   r   r   r   r   r   Nr  )r   r   r   r   r+   infr   r   r   r  r   )r/   r   nonedgesrO   r  r  r   r   r   r   0test_to_numpy_array_structured_dtype_nonedge_ary  s   
r  c                  C   s   t d} tdtfdtfg}d}tjt|d t j| |d W d   n1 s+w   Y  tjt|d t j| |dd W d   dS 1 sKw   Y  dS )	zgUsing both a structured dtype (with named fields) and specifying a `weight`
    parameter is ambiguous.r   r   r   z7Specifying `weight` not supported for structured dtypesr   r   Nr  )	r   r   r   r   r   r	   r,   
ValueErrorr   )r/   r   exception_msgr   r   r   7test_to_numpy_array_structured_dtype_with_weight_raises  s   
"r   c                 C   sj   t jd| d}tdtfdtfg}tjt jdd t j||d d W d    d S 1 s.w   Y  d S )Nr   r   r   r   z#Structured arrays are not supportedr   r  )	r   r   r   r   r   r	   r,   r-   r   )r  r/   r   r   r   r   0test_to_numpy_array_structured_multigraph_raises  s
   "r!  )5r	   r   r   r  networkxr   networkx.generators.classicr   r   r   networkx.utilsr   r   r   r   r   r   fixturer   r   r   r   r   r   r   markparametrizer   r   rK   r   r   r   r   r   r+   r   r"   r  r  meanmedianr
  r  r  r  r  r  r  r   r   r   r!  r   r   r   r   <module>   s    

 q /
		



  
$



			
	
