U
    ¹mœd-  ã                   @   sr   d dl Z d dlZd dlmZmZ G dd„ dƒZG dd„ dƒZdd„ ZG d	d
„ d
ƒZ	G dd„ dƒZ
G dd„ dƒZdS )é    N)Úedges_equalÚnodes_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S )ÚTestReverseViewc                 C   s&   t jdt  ¡ d�| _t  | j¡| _d S ©Né	   ©Zcreate_using)ÚnxÚ
path_graphÚDiGraphÚGÚreverse_viewÚrv©Úself© r   ú_/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/networkx/classes/tests/test_graphviews.pyÚsetup_method
   s    zTestReverseView.setup_methodc                 C   sT   dd l }| j}| | |d¡¡}|j|jks0t‚|j|jks@t‚|j|jksPt‚d S ©Nr   éÿÿÿÿ©Úpickler   ÚloadsÚdumpsÚ_nodeÚAssertionErrorÚ_adjÚgraph©r   r   r   Zprvr   r   r   Útest_pickle   s    zTestReverseView.test_picklec                 C   sD   d| j jkst‚d| j jks t‚d| jjks0t‚d| jjks@t‚d S ©N)é   é   )r!   r    ©r   Úedgesr   r   r   r   r   r   Útest_contains   s    zTestReverseView.test_containsc                 C   s.   t dd„ | jjD ƒƒ}t | jjƒ|ks*t‚d S )Nc                 s   s   | ]}t t|ƒƒV  qd S ©N©ÚtupleÚreversed©Ú.0Úer   r   r   Ú	<genexpr>   s     z,TestReverseView.test_iter.<locals>.<genexpr>©Úsortedr   r#   r   r   ©r   Úexpectedr   r   r   Ú	test_iter   s    zTestReverseView.test_iterc                 C   s$   t j}t  ¡ }t t j|j|¡ d S r%   )r   Ú
graphviewsÚGraphÚpytestÚraisesÚNetworkXNotImplementedr   )r   Únxgr   r   r   r   Útest_exceptions!   s    zTestReverseView.test_exceptionsc                    s€   G ‡ fdd„dt jƒ‰ ˆ ƒ }| dd¡ t  |¡}td|jƒ | ¡ }td|jƒ t|jƒ | dd¡slt	‚| 
¡ dks|t	‚d S )Nc                       s    e Zd Zdd„ Z‡ fdd„ZdS )z.TestReverseView.test_subclass.<locals>.MyGraphc                 S   s   dS ©NÚmer   r   r   r   r   Ú	my_method(   s    z8TestReverseView.test_subclass.<locals>.MyGraph.my_methodc                    s   ˆ ƒ S r%   r   r   ©ÚMyGraphr   r   Úto_directed_class+   s    z@TestReverseView.test_subclass.<locals>.MyGraph.to_directed_classN©Ú__name__Ú
__module__Ú__qualname__r;   r>   r   r<   r   r   r=   '   s   r=   é   r    zRM classz	RMC classr:   )r   r
   Úadd_edger   ÚprintÚ	__class__Úcopyr#   Zhas_edger   r;   )r   ÚMZRMZRMCr   r<   r   Útest_subclass&   s    

zTestReverseView.test_subclassN)	r@   rA   rB   r   r   r$   r1   r8   rI   r   r   r   r   r   	   s   	r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestMultiReverseViewc                 C   s4   t jdt  ¡ d�| _| j dd¡ t  | j¡| _d S )Nr   r   é   é   )r   r	   ÚMultiDiGraphr   rD   r   r   r   r   r   r   r   :   s    z!TestMultiReverseView.setup_methodc                 C   sT   dd l }| j}| | |d¡¡}|j|jks0t‚|j|jks@t‚|j|jksPt‚d S r   r   r   r   r   r   r   ?   s    z TestMultiReverseView.test_picklec                 C   sd   d| j jkst‚d| j jks t‚d| jjks0t‚d| jjks@t‚d| jjksPt‚d| jjks`t‚d S )N)r    r!   r   )r!   r    r   )rL   rK   rC   )rK   rL   rC   r"   r   r   r   r   r$   H   s    z"TestMultiReverseView.test_containsc                 C   s.   t dd„ | jjD ƒƒ}t | jjƒ|ks*t‚d S )Nc                 s   s   | ]\}}}|||fV  qd S r%   r   )r*   ÚuÚvÚkr   r   r   r,   Q   s     z1TestMultiReverseView.test_iter.<locals>.<genexpr>r-   r/   r   r   r   r1   P   s    zTestMultiReverseView.test_iterc                 C   s(   t j}t  | j¡}t t j|j|¡ d S r%   )r   r2   Ú
MultiGraphr   r4   r5   r6   r   )r   r7   ÚMGr   r   r   r8   T   s    z$TestMultiReverseView.test_exceptionsN)r@   rA   rB   r   r   r$   r1   r8   r   r   r   r   rJ   9   s
   	rJ   c               	   C   sr   t j} t  dg¡}t t j¡� | j|t jd� W 5 Q R X t  dg¡}t t j¡� | j|t jd� W 5 Q R X d S )N)rC   r    r   )	r   r2   r
   r4   r5   ZNetworkXErrorZgeneric_graph_viewrQ   rM   )r7   r   r   r   r   Útest_generic_multitypeZ   s    rS   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S )ÚTestToDirectedc                 C   s@   t  d¡| _t  | j¡| _t jdt  ¡ d�| _t  | j¡| _d S r   )r   r	   r   Úto_directedÚdvrQ   rR   ÚMdvr   r   r   r   r   e   s    zTestToDirected.setup_methodc                 C   s    | j  ¡ rt‚| j ¡ st‚d S r%   )r   Úis_directedr   rV   r   r   r   r   Útest_directedk   s    zTestToDirected.test_directedc                 C   sD   t  | j¡}t  | j¡}t|j| jjƒs,t‚t|j| jjƒs@t‚d S r%   )r   rU   rV   rW   r   r#   r   )r   ÚddZMddr   r   r   Útest_already_directedo   s    z$TestToDirected.test_already_directedc                 C   sd   dd l }| j}| | |d¡¡}|j|jks0t‚|j|jks@t‚|j|jksPt‚|j|jks`t‚d S r   )	r   rV   r   r   r   r   Z_succZ_predr   )r   r   rV   Zpdvr   r   r   r   u   s    zTestToDirected.test_picklec                 C   sD   d| j jkst‚d| j jks t‚d| jjks0t‚d| jjks@t‚d S r   )r   r#   r   rV   r   r   r   r   r$      s    zTestToDirected.test_containsc                 C   s>   dd„ | j jD ƒ}tt| j jƒ| ƒ}t| jjƒ|ks:t‚d S )Nc                 S   s   g | ]}t t|ƒƒ‘qS r   r&   r)   r   r   r   Ú
<listcomp>†   s     z,TestToDirected.test_iter.<locals>.<listcomp>)r   r#   r.   ÚlistrV   r   )r   Zrevdr0   r   r   r   r1   …   s    zTestToDirected.test_iterN©	r@   rA   rB   r   rY   r[   r   r$   r1   r   r   r   r   rT   d   s   
rT   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S )ÚTestToUndirectedc                 C   sH   t jdt  ¡ d�| _t  | j¡| _t jdt  ¡ d�| _t  | j¡| _d S r   )	r   r	   r
   ÚDGÚto_undirectedÚuvrM   ÚMDGÚMuvr   r   r   r   r   Œ   s    zTestToUndirected.setup_methodc                 C   s    | j  ¡ st‚| j ¡ rt‚d S r%   )r`   rX   r   rb   r   r   r   r   rY   ’   s    zTestToUndirected.test_directedc                 C   sD   t  | j¡}t  | j¡}t|j| jjƒs,t‚t|j| jjƒs@t‚d S r%   )r   ra   rb   rd   r   r#   r   )r   ÚuuZMuur   r   r   r[   –   s    z&TestToUndirected.test_already_directedc                 C   sb   dd l }| j}| | |d¡¡}|j|jks0t‚|j|jks@t‚|j|jksPt‚t|dƒs^t‚d S )Nr   r   Ú_graph)	r   rb   r   r   r   r   r   r   Úhasattr)r   r   rb   Zpuvr   r   r   r   œ   s    zTestToUndirected.test_picklec                 C   sD   d| j jkst‚d| j jks t‚d| jjks0t‚d| jjks@t‚d S r   )r`   r#   r   rb   r   r   r   r   r$   ¦   s    zTestToUndirected.test_containsc                 C   s$   t | jjƒ}t | jjƒ|ks t‚d S r%   )r.   r`   r#   rb   r   r/   r   r   r   r1   ¬   s    zTestToUndirected.test_iterNr^   r   r   r   r   r_   ‹   s   
r_   c                   @   s�   e Zd Ze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 )"ÚTestChainsOfViewsc              
   C   sæ   t  d¡| _t jdt  ¡ d�| _t jdt  ¡ d�| _t jdt  ¡ d�| _t  	| j¡| _
t  | j¡| _t  	| j¡| _t  | j¡| _| j ¡ | _| j ¡ | _| j| j| j| j| j
| j| j| j| j| jg
| _| jD ]}|j|j|jf qÌd S r   )r   r	   r   r
   r`   rQ   rR   rM   rc   ra   ZGvrU   ZDGvÚMGvZMDGvÚreverseZRvZMRvÚgraphsr#   ÚnodesZdegree)Úclsr   r   r   r   Úsetup_class²   s.    ö
zTestChainsOfViews.setup_classc                 C   sN   dd l }| jD ]:}| | |d¡¡}t|j|jƒs6t‚t|j|jƒst‚qd S r   )	r   rk   r   r   r   r#   r   r   rl   )r   r   r   ÚHr   r   r   r   Í   s
    
zTestChainsOfViews.test_picklec                 C   sÂ   t  | jtddƒ¡}t  | jtddƒ¡}t  | jtddƒ¡}t  | jtddƒ¡}| j||||g D ]Z}t  |dddg¡}t	|ƒdddgksŽt
‚| ddg¡}t	|ƒdgks®t
‚|j|ksbt
‚qbd S )Nr!   é   rK   rL   é   )r   Úsubgraphr   Úranger`   rR   rc   rk   Úinduced_subgraphr]   r   rf   )r   ZSGvZSDGvZSMGvZSMDGvr   ÚSGÚSSGr   r   r   Útest_subgraph_of_subgraphÕ   s    z+TestChainsOfViews.test_subgraph_of_subgraphc           
      C   s   dddg}dg}t  | j||¡}dddddg}t  ||¡}| |¡}|j| jksTt‚|j| jksdt‚|j|ksrt‚t|j|jƒs„t‚| j 	¡ }| 
|¡ | |¡ t| |¡|jƒs¸t‚| 
dd	d
dg¡ t|j|jƒsÜt‚| j |¡}t  |||¡}	|	j| jk	�st‚t|	j|jƒ�st‚dS )a&  Test subgraph chains that both restrict and show nodes/edges.

        A restricted_view subgraph should allow induced subgraphs using
        G.subgraph that automagically without a chain (meaning the result
        is a subgraph view of the original graph not a subgraph-of-subgraph.
        r!   rK   rL   )rq   rp   rq   rp   é   r   rC   r    N)r   Zrestricted_viewr   rt   rr   rf   r   r   r#   rG   Zremove_nodes_fromZremove_edges_from)
r   Z
hide_nodesZ
hide_edgesZRGrl   ru   rv   ZCGZSSSGZRSGr   r   r   Ú'test_restricted_induced_subgraph_chainsâ   s(    




z9TestChainsOfViews.test_restricted_induced_subgraph_chainsc                 C   sF   | j D ]:}t |¡}| dddg¡}| ¡ }t|ƒt|ƒkst‚qd S )NrK   rL   rq   )rk   r   r3   rr   rG   Útyper   ©r   ZorigGr   ru   ro   r   r   r   Útest_subgraph_copy   s
    

z$TestChainsOfViews.test_subgraph_copyc                 C   sP   t  | jdddg¡}| ¡ }t|ƒdddgks2t‚t|jƒddddgksLt‚d S )NrK   rL   rq   ©rK   rL   ©rL   rK   ©rL   rq   )rq   rL   )r   rt   r   rU   r.   r   r#   ©r   ru   rv   r   r   r   Útest_subgraph_todirected  s    z*TestChainsOfViews.test_subgraph_todirectedc                 C   sL   t  | jdddg¡}| ¡ }t|ƒdddgks2t‚t|jƒddgksHt‚d S )NrK   rL   rq   r}   r   )r   rt   r   ra   r]   r   r.   r#   r€   r   r   r   Útest_subgraph_toundirected  s    z,TestChainsOfViews.test_subgraph_toundirectedc                 C   sV   | j jdd�}| dddg¡}| ¡ }t|ƒdddgks<t‚t|jƒddgksRt‚d S )NF©rG   rK   rL   rq   r}   r   )r`   rj   rr   ra   r]   r   r.   r#   )r   r   ru   rv   r   r   r   Ú"test_reverse_subgraph_toundirected  s
    z4TestChainsOfViews.test_reverse_subgraph_toundirectedc                 C   s€   | j jdd�}|jdd�}|j| j jks,t‚|j| j jks>t‚| jjdd�}|jdd�}|j| jjksjt‚|j| jjks|t‚d S )NFrƒ   T)r`   rj   rl   r   r#   rc   )r   r   ro   r   r   r   Útest_reverse_reverse_copy  s    z+TestChainsOfViews.test_reverse_reverse_copyc                 C   s\   | j  ¡ }| dddg¡}| ddg¡}| ¡ }t|ƒddgksDt‚t|jƒdgksXt‚d S )NrK   rL   rq   r}   r~   )	r   rG   rr   Zedge_subgraphra   r]   r   r.   r#   )r   r   ru   rv   ZUSSGr   r   r   Ú'test_subgraph_edgesubgraph_toundirected$  s    
z9TestChainsOfViews.test_subgraph_edgesubgraph_toundirectedc                 C   sR   | j  ¡ }| dddg¡}|jdd�}|jdd�}t|dƒs@t‚t|dƒrNt‚d S ©NrK   rL   rq   T©Zas_viewFrf   )r   rG   rr   rg   r   ©r   r   ru   ZCSGZDCSGr   r   r   Útest_copy_subgraph,  s    
z$TestChainsOfViews.test_copy_subgraphc                 C   sR   | j  ¡ }| dddg¡}|jdd�}|jdd�}t|dƒs@t‚t|dƒrNt‚d S r‡   )r`   rG   rr   rg   r   r‰   r   r   r   Útest_copy_disubgraph4  s    
z&TestChainsOfViews.test_copy_disubgraphc                 C   sR   | j  ¡ }| dddg¡}|jdd�}|jdd�}t|dƒs@t‚t|dƒrNt‚d S r‡   )rc   rG   rr   rg   r   r‰   r   r   r   Útest_copy_multidisubgraph<  s    
z+TestChainsOfViews.test_copy_multidisubgraphc                 C   sR   | j  ¡ }| dddg¡}|jdd�}|jdd�}t|dƒs@t‚t|dƒrNt‚d S r‡   )rR   rG   rr   rg   r   r‰   r   r   r   Útest_copy_multisubgraphD  s    
z)TestChainsOfViews.test_copy_multisubgraphc                 C   s<   t  | j¡}|jjdkst‚|jdd�}|jjdks8t‚d S )NrQ   Trˆ   )r   rQ   ri   rF   r@   r   rG   )r   r   r   r   r   Útest_copy_of_viewL  s    z#TestChainsOfViews.test_copy_of_viewc                    sz   G ‡ fdd„dt jƒ‰ | jD ]X}ˆ |ƒ}| dddg¡}| ¡ }| ¡ dksPt‚| ¡ dks`t‚d|ksd|kst‚qd S )Nc                       s    e Zd Zdd„ Z‡ fdd„ZdS )z0TestChainsOfViews.test_subclass.<locals>.MyGraphc                 S   s   dS r9   r   r   r   r   r   r;   T  s    z:TestChainsOfViews.test_subclass.<locals>.MyGraph.my_methodc                    s   ˆ ƒ S r%   r   r   r<   r   r   r>   W  s    zBTestChainsOfViews.test_subclass.<locals>.MyGraph.to_directed_classNr?   r   r<   r   r   r=   S  s   r=   rK   rL   rq   r:   r!   )r   r
   rk   rr   rG   r;   r   r{   r   r<   r   rI   R  s    
zTestChainsOfViews.test_subclassN)r@   rA   rB   Úclassmethodrn   r   rw   ry   r|   r�   r‚   r„   r…   r†   rŠ   r‹   rŒ   r�   rŽ   rI   r   r   r   r   rh   ±   s"   

rh   )r4   Znetworkxr   Znetworkx.utilsr   r   r   rJ   rS   rT   r_   rh   r   r   r   r   Ú<module>   s   0!
'&