U
    9vf-                     @   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   J/tmp/pip-unpacked-wheel-_lngutwb/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 qd 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st
|ddg}t	|dgkst
|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st| j	 }|
| || t|||jst|
dd	d
dg t|j|jst| 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!
'&