o
    ]Zh"4                     @   sb   d dl Z d dlZd dlmZmZmZ e dZe dZ	G dd dZ
dd Zd	d
 Zdd ZdS )    N)edges_equalgraphs_equalnodes_equalnumpyZpandasc                   @   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ejdejejgd d! Zd"d# Zejd$d%d&gd'gd(d) Zd*d+ Zd,d- Zd.d/ Zd0S )1TestConvertPandasc                 C   s   t jjdd| _| jjdddd}g d}g d}tj|d	d
gd}||d< ||d< || _tjg dgg dd}t||g| _	d S )N   )seed      )      )sizeABC)Dr   Eweightcostcolumnsr   b)      r   r   )r   r   r   r   )
nprandomZRandomStaterngrandintpd	DataFramedfconcatmdf)selfZintsar   r!   r#    r&   Q/var/www/auris/lib/python3.10/site-packages/networkx/tests/test_convert_pandas.pysetup_method   s   zTestConvertPandas.setup_methodc                 C   sz   t dg}ttjtj| t ddg}ttjtj| t jddgddggtddgddgd}ttjtj| d S )Nr%   g        r	   r   r   r   dtypeindexr   )	r   r    pytestraisesnxNetworkXErrorto_networkx_graphintfrom_pandas_adjacency)r$   Gr!   r&   r&   r'   test_exceptions   s   &z!TestConvertPandas.test_exceptionsc              	   C   s   t dddddfdddd	dfdd
d	ddfg}t | jddd}t||s*J t |}|jdd
ddd t | jdddt  }t||sKJ d S )Nr   r   	   
   r   r   r   r   r	      r   r   r   r   Tr   )r.   Graphfrom_pandas_edgelistr!   r   
MultiGraphadd_edger#   )r$   Gtruer3   ZMGtrueZMGr&   r&   r'   test_from_edgelist_all_attr    s   
z-TestConvertPandas.test_from_edgelist_all_attrc              	   C   s\   t dddddfdddd	dfdd
d	ddfg}t | jddddg}t||s,J d S )Nr   r   r5   r6   r7   r   r   r	   r8   r   r   r   r   r   r   r.   r9   r:   r!   r   r$   r=   r3   r&   r&   r'   test_from_edgelist_multi_attr0      z/TestConvertPandas.test_from_edgelist_multi_attrc              
   C   sb   t ddddddfddddddfddddd	dfg}t | jd
dg d}t||s/J d S )Nr   r   r6   )r   r   r   r   r   r8   r   r   r   r   r?   r@   r&   r&   r'   )test_from_edgelist_multi_attr_incl_target;   s   z;TestConvertPandas.test_from_edgelist_multi_attr_incl_targetc                 C   s.  ddddddfddddddfdddd	d
dfddddddfddddddfddddddfddddddfddddddfddddddfddddd
dfg
}t |}g dg dg dg dg dd}tj|}t j|dddt jd }t j|ddg d!t jd }t||sJ t||sJ d S )"NX1X4zAr   )CoMiStzB6   X21   X3,   Y1Y3zC"   Y2      Z1Z3zD   )
rD   rD   rD   rD   rP   rP   rP   rP   rW   rW   )
rE   rE   rE   rE   rQ   rQ   rQ   rQ   rX   rX   )
rD   rL   rN   rE   rP   rT   rL   rQ   rW   rN   )
rF   rJ   rJ   rJ   rR   rR   rR   rR   rY   rY   )
r   rK   rM   rO   r   rS   rU   rV   r   rZ   )Or   rI   rG   rH   r[   r   T)sourcetarget	edge_attrcreate_using)rI   rG   rH   )r.   ZMultiDiGraphr   r    	from_dictr:   r   )r$   edgesr=   datar!   ZG1ZG2r&   r&   r'   -test_from_edgelist_multidigraph_and_edge_attrF   s>   
z?TestConvertPandas.test_from_edgelist_multidigraph_and_edge_attrc                 C   sR   t ddddifddddifdddd	ifg}t | jd
dd}t||s'J d S )Nr   r   r   r6   r   r   r8   r   r   r   r   r?   r@   r&   r&   r'   test_from_edgelist_one_attrj   s   z-TestConvertPandas.test_from_edgelist_one_attrc                 C   sR   t ddddifddddifddddifg}t | jddd}t||s'J d S )Nr   r   r   r   r   r   r   r?   r@   r&   r&   r'    test_from_edgelist_int_attr_nameu   s
   &z2TestConvertPandas.test_from_edgelist_int_attr_namec              	   C   s   t tjtj| jddd t tjtj| jddd tjddgddgddggddgd}t tjtj|ddd	 t tjtj|ddd
 t tjtj|ddd
dg d S )Nr   r   Zmisspellr	   r   str   Tr   r   )r,   r-   r.   r/   r:   r!   r   r    )r$   Z	edgeframer&   r&   r'   test_from_edgelist_invalid_attr}   s&   $z1TestConvertPandas.test_from_edgelist_invalid_attrc                 C   sD   t ddi fddi fddi fg}t | jdd}t||s J d S )Nr   r   r   r   r   r   r   r?   r@   r&   r&   r'   test_from_edgelist_no_attr   s   "z,TestConvertPandas.test_from_edgelist_no_attrc           	      C   s   t d}|dd t|jD  t |}dd |D }dd |D }dd |D }t|||d}t j|d	d
}t	|
 |
 sGJ t| | sRJ t j|t jd}t	|
 |
 seJ t| | spJ d S )Nr6   c                 s       | ]
\}}|||fV  qd S Nr&   .0uvr&   r&   r'   	<genexpr>       z7TestConvertPandas.test_from_edgelist.<locals>.<genexpr>c                 S   s   g | ]\}}}|qS r&   r&   rm   rf   rg   dr&   r&   r'   
<listcomp>       z8TestConvertPandas.test_from_edgelist.<locals>.<listcomp>c                 S   s   g | ]\}}}|qS r&   r&   rr   r&   r&   r'   rt      ru   c                 S   s   g | ]	\}}}|d  qS r   r&   rr   r&   r&   r'   rt      s    )r\   r]   r   r   )r^   r_   )r.   Zcycle_graphadd_weighted_edges_fromlistra   Zto_edgelistr   r    r:   r   nodesr   r0   r9   )	r$   r3   Zedgelistr\   r]   r   ra   ZGGZGWr&   r&   r'   test_from_edgelist   s   

z$TestConvertPandas.test_from_edgelistc                 C   s   t d}|dd t|jD  t j|ddd tt jt j	| |jddD ]\}}}|
dd  q)t j|dd	d tt jt j	| d S )
Nr6   c                 s   rj   rk   r&   rl   r&   r&   r'   rp      rq   zYTestConvertPandas.test_to_edgelist_default_source_or_target_col_exists.<locals>.<genexpr>r   r\   nameTrb   r]   r.   
path_graphrx   ry   ra   set_edge_attributesr,   r-   r/   to_pandas_edgelistpopr$   r3   rn   ro   rs   r&   r&   r'   4test_to_edgelist_default_source_or_target_col_exists   s   
zFTestConvertPandas.test_to_edgelist_default_source_or_target_col_existsc                 C   s   t d}|dd t|jD  t j|ddd tjt jt j	|dd |jdd	D ]\}}}|
dd  q+t j|dd
d tjt jt j	|d
d d S )Nr6   c                 s   rj   rk   r&   rl   r&   r&   r'   rp      rq   zXTestConvertPandas.test_to_edgelist_custom_source_or_target_col_exists.<locals>.<genexpr>r   Zsource_col_namer|   )r\   Tr~   Ztarget_col_name)r]   r   r   r&   r&   r'   3test_to_edgelist_custom_source_or_target_col_exists   s   

zETestConvertPandas.test_to_edgelist_custom_source_or_target_col_existsc                 C   sV   t jdt jd}|dd t| D  t j|ddd tjt j	t j
|dd d S )	Nr6   rw   c                 s   rj   rk   r&   rl   r&   r&   r'   rp      rq   zITestConvertPandas.test_to_edgelist_edge_key_col_exists.<locals>.<genexpr>r   Zedge_key_namer|   edge_key)r.   r   r;   rx   ry   ra   r   r,   r-   r/   r   )r$   r3   r&   r&   r'   $test_to_edgelist_edge_key_col_exists   s   
z6TestConvertPandas.test_to_edgelist_edge_key_col_existsc                 C   sT   ddg}t jddgddggt||d}tddg}tj|td}t j|| d S )Nr	   r   r   r)   r	   r	   r	   r   r*   )r   r    r1   r.   r9   to_pandas_adjacencytestingassert_frame_equal)r$   nodelistdftruer3   r!   r&   r&   r'   test_from_adjacency   s   z%TestConvertPandas.test_from_adjacencygraphc                 C   s   |ddg}t |}t j||d}t||sJ ddiddiddddiid}||}t j|td}t j||d}t||sBJ d S )Nr   r   rw   r   r	   r   )r.   r   r:   r   r   r1   r2   )r$   r   r=   r!   r3   Zadjr&   r&   r'   test_roundtrip   s   
 z TestConvertPandas.test_roundtripc                 C   st   ddddddddddddd}t j|tjd}|g d }tj|t d}tj|tjd}t j	|| d S )Nr   r   r	   r   )r   r   r   rw   )
r   r    r   Zintpr.   r2   DiGraphr   r   r   )r$   rb   r   r!   r3   r&   r&   r'   test_from_adjacency_named   s   


z+TestConvertPandas.test_from_adjacency_namedr^   attr2attr3Tc                 C   s   t dddddddddddddddd	d
d
d
dd
d	d
d	dd}tdddd	d
dfdddd
d	dfdddd
d
dfdddd
d	dfg}tj|dd|dt d}t||s]J tj|dd}|d}g d|_t j	
||g d  d S )NZN1ZN2)r   r   r   r   ZN3ZF1ZF2ZF3ZF4r	   r   )r\   r]   attr1r   r   )r   r   r\   r]   r   )r\   r]   r^   r   r_   r   )r   r    r.   r;   r:   r   r   Zsort_valuesr+   r   r   )r$   r^   r!   r=   r3   Zdf_roundtripr&   r&   r'   test_edgekey_with_multigraph   s<   		

z.TestConvertPandas.test_edgekey_with_multigraphc              	   C   s\   t dddddfdddd	dfdd
d	ddfg}t j| jddddd}t||s,J d S )Nr   r   r5   r6   r7   r   r   r	   r8   r   r   r   r   Tr   r   r?   r@   r&   r&   r'   (test_edgekey_with_normal_graph_no_action  rB   z:TestConvertPandas.test_edgekey_with_normal_graph_no_actionc              	   C   sP   t tjj tj| jddddt d W d    d S 1 s!w   Y  d S )Nr\   r]   ZNot_realT)r\   r]   r   r^   r_   )r,   r-   r.   	exceptionr/   r:   r!   r;   )r$   r&   r&   r'   test_nonexisting_edgekey_raises$  s   "z1TestConvertPandas.test_nonexisting_edgekey_raisesc                 C   s   t  }|jdddd |jdddd t j|dd}tddgddgddgd}tj|| t j|dt jd}t	||sAJ d S )	Nr   r	   )keyr   r   r   )r\   r]   r   )r   r_   )
r.   r;   r<   r   r   r    r   r   r:   r   )r$   r=   r!   expectedr3   r&   r&   r'   )test_multigraph_with_edgekey_no_edgeattrs/  s   z;TestConvertPandas.test_multigraph_with_edgekey_no_edgeattrsN)__name__
__module____qualname__r(   r4   r>   rA   rC   rc   rd   re   rh   ri   r{   r   r   r   r   r,   markZparametrizer.   r9   r;   r   r   r   r   r   r   r&   r&   r&   r'   r   
   s0    $	

$r   c                  C   sN   t d} ddg}tjddgddggt||d}tj|t j| |td d S )Nr   r	   r   r   r)   r   )r.   Zcomplete_graphr   r    r1   r   r   r   )r3   r   r   r&   r&   r'   &test_to_pandas_adjacency_with_nodelist:  s   
r   c                  C   sh   t  } | jg ddd | jdddd t j| ddgd	}d|d
  vs(J d|d  vs2J d S )N))r   r	   r   )r	   r   g       @rv   r   r   d   r	   r   )r   r\   r   )r.   r9   Zadd_edges_fromr<   r   Zto_numpy)r3   r!   r&   r&   r'   %test_to_pandas_edgelist_with_nodelistE  s   r   c                  C   sv   t jg dg dg dg dgg dg dd} tj| tjd}tg d}t|j|js0J t|j|js9J d	S )
zSee gh-7407)r   r	   r   r   )r   r   r	   r   )r   r   r   r	   )r   r   r   r   )Qi r   r	   Ri )r+   r   rw   ))r   r   )r   r	   )r	   r   N)	r   r    r.   r2   r   r   rz   r   ra   )r!   r3   r   r&   r&   r'   0test_from_pandas_adjacency_with_index_collisionsN  s   
r   )r,   Znetworkxr.   Znetworkx.utilsr   r   r   Zimportorskipr   r   r   r   r   r   r&   r&   r&   r'   <module>   s    

  2	