B
    `@                 @   sb   d dl Z e dZejjZd dlZd dlm	Z	m
Z
mZ d dlmZ G dd dZG dd dZdS )	    Nnumpy)barbell_graphcycle_graph
path_graph)assert_graphs_equalc               @   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TestConvertNumpyc             C   s@   t dd| _tdtjd| _| t | _| t | _	d S )N
      )create_using)
r   G1r   nxDiGraphG2create_weightedGraphG3G4)self r   P/home/dcms/DCMS/lib/python3.7/site-packages/networkx/tests/test_convert_numpy.pysetup_method   s    zTestConvertNumpy.setup_methodc             C   s    t d}ttjtj| d S )Na)nparraypytestraisesr   NetworkXErrorto_networkx_graph)r   Gr   r   r   test_exceptions   s    
z TestConvertNumpy.test_exceptionsc             C   s.   t d}|| |dd | D  |S )N   c             s   s    | ]\}}||d | fV  qdS )r   Nr   ).0uvr   r   r   	<genexpr>   s    z3TestConvertNumpy.create_weighted.<locals>.<genexpr>)r   add_nodes_fromadd_weighted_edges_fromedges)r   r   gr   r   r   r      s    
z TestConvertNumpy.create_weightedc             C   s<   t | t | kstt | t | ks8td S )N)sortednodesAssertionErrorr'   )r   r   r   r   r   r   assert_equal   s    zTestConvertNumpy.assert_equalc             C   sf   |  dksttj||d}| || tj||d}| || td||}| || d S )Nr   )r
   )sumr+   r   from_numpy_matrixr,   r   empty_graph	__class__)r   r   Ar
   GGGWGIr   r   r   identity_conversion!   s    z$TestConvertNumpy.identity_conversionc             C   s0   t dddgdddgg}ttjtj| dS )z!Conversion from non-square array.      r	   r          N)r   r   r   r   r   r   r.   )r   r1   r   r   r   
test_shape*   s    zTestConvertNumpy.test_shapec             C   s$   t | j}| | j|t   dS )z)Conversion from graph to matrix to graph.N)r   to_numpy_matrixr   r5   r   )r   r1   r   r   r   test_identity_graph_matrix/   s    z+TestConvertNumpy.test_identity_graph_matrixc             C   s.   t | j}t|}| | j|t   dS )z(Conversion from graph to array to graph.N)r   r;   r   r   asarrayr5   r   )r   r1   r   r   r   test_identity_graph_array4   s    
z*TestConvertNumpy.test_identity_graph_arrayc             C   s$   t | j}| | j|t   dS )z-Conversion from digraph to matrix to digraph.N)r   r;   r   r5   r   )r   r1   r   r   r   test_identity_digraph_matrix:   s    z-TestConvertNumpy.test_identity_digraph_matrixc             C   s.   t | j}t|}| | j|t   dS )z,Conversion from digraph to array to digraph.N)r   r;   r   r   r=   r5   r   )r   r1   r   r   r   test_identity_digraph_array?   s    
z,TestConvertNumpy.test_identity_digraph_arrayc             C   s$   t | j}| | j|t   dS )z;Conversion from weighted graph to matrix to weighted graph.N)r   r;   r   r5   r   )r   r1   r   r   r   #test_identity_weighted_graph_matrixE   s    z4TestConvertNumpy.test_identity_weighted_graph_matrixc             C   s.   t | j}t|}| | j|t   dS )z:Conversion from weighted graph to array to weighted graph.N)r   r;   r   r   r=   r5   r   )r   r1   r   r   r   "test_identity_weighted_graph_arrayJ   s    
z3TestConvertNumpy.test_identity_weighted_graph_arrayc             C   s$   t | j}| | j|t   dS )z?Conversion from weighted digraph to matrix to weighted digraph.N)r   r;   r   r5   r   )r   r1   r   r   r   %test_identity_weighted_digraph_matrixP   s    z6TestConvertNumpy.test_identity_weighted_digraph_matrixc             C   s.   t | j}t|}| | j|t   dS )z>Conversion from weighted digraph to array to weighted digraph.N)r   r;   r   r   r=   r5   r   )r   r1   r   r   r   $test_identity_weighted_digraph_arrayU   s    
z5TestConvertNumpy.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 )z7Conversion from graph to matrix to graph with nodelist.r    r	   )nodelistr   N)	r   listr   r;   r   r,   r   r   r   )r   P4P3rE   r1   GAr   r   r   test_nodelist[   s    
zTestConvertNumpy.test_nodelistc             C   sv   t  }|dd tdD  td}t |}t|t j|d d td| t | td| t j|dd d S )	Nc             s   s$   | ]}||d  t dddfV  qdS )r6   g      ?g333333?)weightotherN)dict)r!   nr   r   r   r$   j   s    z7TestConvertNumpy.test_weight_keyword.<locals>.<genexpr>r	   r    )rK   g      ?g333333?rL   )r   r   add_edges_fromranger   r;   np_assert_equal)r   WP4rG   r1   r   r   r   test_weight_keywordh   s    
z$TestConvertNumpy.test_weight_keywordc             C   s  t dgg}t|}t|d d d tks4tt dggt j}t|}t|d d d tksptt dggt j	}t|}t|d d d t	kstt dggt j
}t|}t|d d d t
kstt dggt j}t|}t|d d d tks&tt dggt j}tttj| td}t| }t|}tdd | D stt|}tdd | D std S )Nr6   r   rK   r	   c             s   s*   | ]"\}}t |tko t |tkV  qd S )N)typeint)r!   mrN   r   r   r   r$      s    z?TestConvertNumpy.test_from_numpy_matrix_type.<locals>.<genexpr>c             s   s*   | ]"\}}t |tko t |tkV  qd S )N)rT   rU   )r!   rV   rN   r   r   r   r$      s    )r   matrixr   r.   rT   rU   r+   astypefloatstrboolcomplexobjectr   r   	TypeErrorr   Z
adj_matrixZtodenseallr'   from_numpy_array)r   r1   r   Hr   r   r   test_from_numpy_matrix_typeq   s.    







z,TestConvertNumpy.test_from_numpy_matrix_typec             C   s   dt fdtfg}tjdgg|d}t|}t|d d d t ksHtt|d d d tksdt|d d d dks|t|d d d dkstd S )NrK   cost)g      ?r7   )dtyper   r7   g      ?)rY   rU   r   rW   r   r.   rT   r+   )r   dtr1   r   r   r   r   test_from_numpy_matrix_dtype   s    
z-TestConvertNumpy.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sLt	|j
d	 dks^t	|j
d
 dkspt	|jd	 dkst	|jd
 dkst	d S )Nr6   r7   g      @r8   )rK   rc   rK   rc   )rd   )r   r6   )r   r   g        r   )r   r   add_edgeto_numpy_recarrayrY   rU   r)   rd   namesr+   rK   rc   )r   r   r1   r   r   r   test_to_numpy_recarray   s    z'TestConvertNumpy.test_to_numpy_recarrayc             C   s   t  }|jdddd |jdddd t |}|d dksBtt j|td}|d dks`tt j|td}|d dks~td S )	Nr6   r7      )rK   F   )r6   r   M   )multigraph_weight)r   
MultiGraphrg   r;   r+   minmax)r   r   r1   r   r   r   test_numpy_multigraph   s    
z&TestConvertNumpy.test_numpy_multigraphc             C   s  t ddgddgg}t }dddg}|dd |D  |jdddd tj|d	tjd
}t|| tj|dtjd
}t|| dddddg}t }|dd |D  tj|d	tjd
}t|| t }|j	t
|dd d|d d d d< tj|dtjd
}t|| dS )zTests that the :func:`networkx.from_numpy_matrix` function
        interprets integer weights as the number of parallel edges when
        creating a multigraph.

        r6   r7   )r   r   )r   r6   )r6   r   c             S   s   g | ]\}}||d fqS )r6   r   )r!   r"   r#   r   r   r   
<listcomp>   s    zJTestConvertNumpy.test_from_numpy_matrix_parallel_edges.<locals>.<listcomp>)rK   T)parallel_edgesr
   F)r6   r6   c             S   s   g | ]\}}||d fqS )r6   r   )r!   r"   r#   r   r   r   rs      s    r   rK   N)r   rW   r   r   r&   rg   r.   r   MultiDiGraphrO   set)r   r1   expectedr'   actualr   r   r   %test_from_numpy_matrix_parallel_edges   s*    



z6TestConvertNumpy.test_from_numpy_matrix_parallel_edgesc             C   sL   t ddgddgg}tj|tjd}t }|jdddd t|| dS )zTests that a symmetric matrix has edges added only once to an
        undirected multigraph when using :func:`networkx.from_numpy_matrix`.

        r   r6   )r
   )rK   N)r   rW   r   r.   ro   rg   r   )r   r1   r   rw   r   r   r   test_symmetric   s
    zTestConvertNumpy.test_symmetricc             C   s*   t d}t j|td}|jtks&tdS )zTest that setting dtype int actually gives an integer matrix.

        For more information, see GitHub pull request #1363.

        r	   )rd   N)r   complete_graphr;   rU   rd   r+   )r   r   r1   r   r   r   test_dtype_int_graph   s    
z%TestConvertNumpy.test_dtype_int_graphc             C   s0   t t d}t j|td}|jtks,tdS )zTest that setting dtype int actually gives an integer matrix.

        For more information, see GitHub pull request #1363.

        r	   )rd   N)r   ro   r{   r;   rU   rd   r+   )r   r   r1   r   r   r   test_dtype_int_multigraph   s    z*TestConvertNumpy.test_dtype_int_multigraphN)__name__
__module____qualname__r   r   r   r,   r5   r:   r<   r>   r?   r@   rA   rB   rC   rD   rJ   rS   rb   rf   rj   rr   ry   rz   r|   r}   r   r   r   r   r      s0   			
$
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'S )(TestConvertNumpyArrayc             C   s@   t dd| _tdtjd| _| t | _| t | _	d S )Nr   r	   )r
   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r      s    z"TestConvertNumpyArray.setup_methodc             C   s.   t d}|| |dd | D  |S )Nr    c             s   s    | ]\}}||d | fV  qdS )r   Nr   )r!   r"   r#   r   r   r   r$      s    z8TestConvertNumpyArray.create_weighted.<locals>.<genexpr>)r   r%   r&   r'   )r   r   r(   r   r   r   r      s    
z%TestConvertNumpyArray.create_weightedc             C   s<   t | t | kstt | t | ks8td S )N)r)   r*   r+   r'   )r   r   r   r   r   r   r,      s    z"TestConvertNumpyArray.assert_equalc             C   sf   |  dksttj||d}| || tj||d}| || td||}| || d S )Nr   )r
   )r-   r+   r   r`   r,   r   r/   r0   )r   r   r1   r
   r2   r3   r4   r   r   r   r5     s    z)TestConvertNumpyArray.identity_conversionc             C   s0   t dddgdddgg}ttjtj| dS )z!Conversion from non-square array.r6   r7   r	   r    r8   r9   N)r   r   r   r   r   r   r`   )r   r1   r   r   r   r:     s    z TestConvertNumpyArray.test_shapec             C   s$   t | j}| | j|t   dS )z(Conversion from graph to array to graph.N)r   to_numpy_arrayr   r5   r   )r   r1   r   r   r   r>     s    z/TestConvertNumpyArray.test_identity_graph_arrayc             C   s$   t | j}| | j|t   dS )z,Conversion from digraph to array to digraph.N)r   r   r   r5   r   )r   r1   r   r   r   r@     s    z1TestConvertNumpyArray.test_identity_digraph_arrayc             C   s$   t | j}| | j|t   dS )z:Conversion from weighted graph to array to weighted graph.N)r   r   r   r5   r   )r   r1   r   r   r   rB     s    z8TestConvertNumpyArray.test_identity_weighted_graph_arrayc             C   s$   t | j}| | j|t   dS )z>Conversion from weighted digraph to array to weighted digraph.N)r   r   r   r5   r   )r   r1   r   r   r   rD      s    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.r    r	   )rE   r   N)	r   rF   r   r   r   r,   r   r   r   )r   rG   rH   rE   r1   rI   r   r   r   rJ   %  s    
z#TestConvertNumpyArray.test_nodelistc             C   sv   t  }|dd tdD  td}t |}t|t j|d d td| t | td| t j|dd d S )	Nc             s   s$   | ]}||d  t dddfV  qdS )r6   g      ?g333333?)rK   rL   N)rM   )r!   rN   r   r   r   r$   4  s    z<TestConvertNumpyArray.test_weight_keyword.<locals>.<genexpr>r	   r    )rK   g      ?g333333?rL   )r   r   rO   rP   r   r   rQ   )r   rR   rG   r1   r   r   r   rS   2  s    
z)TestConvertNumpyArray.test_weight_keywordc             C   sP  t dgg}t|}t|d d d tks4tt dggt j}t|}t|d d d tksptt dggt j	}t|}t|d d d t	kstt dggt j
}t|}t|d d d t
kstt dggt j}t|}t|d d d tks&tt dggt j}tttj| d S )Nr6   r   rK   )r   r   r   r`   rT   rU   r+   rX   rY   rZ   r[   r\   r]   r   r   r^   )r   r1   r   r   r   r   test_from_numpy_array_type;  s"    




z0TestConvertNumpyArray.test_from_numpy_array_typec             C   s   dt fdtfg}tjdgg|d}t|}t|d d d t ksHtt|d d d tksdt|d d d dks|t|d d d dkstd S )NrK   rc   )g      ?r7   )rd   r   r7   g      ?)rY   rU   r   r   r   r`   rT   r+   )r   re   r1   r   r   r   r   test_from_numpy_array_dtypeS  s    
z1TestConvertNumpyArray.test_from_numpy_array_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sLt	|j
d	 dks^t	|j
d
 dkspt	|jd	 dkst	|jd
 dkst	d S )Nr6   r7   g      @r8   )rK   rc   rK   rc   )rd   )r   r6   )r   r   g        r   )r   r   rg   rh   rY   rU   r)   rd   ri   r+   rK   rc   )r   r   r1   r   r   r   rj   \  s    z,TestConvertNumpyArray.test_to_numpy_recarrayc             C   s   t  }|jdddd |jdddd t |}|d dksBtt j|td}|d dks`tt j|td}|d dks~td S )	Nr6   r7   rk   )rK   rl   )r6   r   rm   )rn   )r   ro   rg   r   r+   rp   rq   )r   r   r1   r   r   r   rr   f  s    
z+TestConvertNumpyArray.test_numpy_multigraphc             C   s  t ddgddgg}t }dddg}|dd |D  |jdddd tj|d	tjd
}t|| tj|dtjd
}t|| dddddg}t }|dd |D  tj|d	tjd
}t|| t }|j	t
|dd d|d d d d< tj|dtjd
}t|| dS )zTests that the :func:`networkx.from_numpy_array` function
        interprets integer weights as the number of parallel edges when
        creating a multigraph.

        r6   r7   )r   r   )r   r6   )r6   r   c             S   s   g | ]\}}||d fqS )r6   r   )r!   r"   r#   r   r   r   rs   |  s    zNTestConvertNumpyArray.test_from_numpy_array_parallel_edges.<locals>.<listcomp>)rK   T)rt   r
   F)r6   r6   c             S   s   g | ]\}}||d fqS )r6   r   )r!   r"   r#   r   r   r   rs     s    r   rK   N)r   r   r   r   r&   rg   r`   r   ru   rO   rv   )r   r1   rw   r'   rx   r   r   r   $test_from_numpy_array_parallel_edgesq  s*    



z:TestConvertNumpyArray.test_from_numpy_array_parallel_edgesc             C   sL   t ddgddgg}tj|tjd}t }|jdddd t|| dS )zTests that a symmetric array has edges added only once to an
        undirected multigraph when using :func:`networkx.from_numpy_array`.

        r   r6   )r
   )rK   N)r   r   r   r`   ro   rg   r   )r   r1   r   rw   r   r   r   rz     s
    z$TestConvertNumpyArray.test_symmetricc             C   s*   t d}t j|td}|jtks&tdS )zTest that setting dtype int actually gives an integer array.

        For more information, see GitHub pull request #1363.

        r	   )rd   N)r   r{   r   rU   rd   r+   )r   r   r1   r   r   r   r|     s    
z*TestConvertNumpyArray.test_dtype_int_graphc             C   s0   t t d}t j|td}|jtks,tdS )zTest that setting dtype int actually gives an integer array.

        For more information, see GitHub pull request #1363.

        r	   )rd   N)r   ro   r{   r   rU   rd   r+   )r   r   r1   r   r   r   r}     s    z/TestConvertNumpyArray.test_dtype_int_multigraphN)r~   r   r   r   r   r,   r5   r:   r>   r@   rB   rD   rJ   rS   r   r   rj   rr   r   rz   r|   r}   r   r   r   r   r      s&   			
$
r   )r   Zimportorskipr   Ztestingr,   rQ   Znetworkxr   Znetworkx.generators.classicr   r   r   Znetworkx.testing.utilsr   r   r   r   r   r   r   <module>   s   
 h