a
    h,                     @   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   T/var/www/auris/lib/python3.9/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s0J |j|jks@J |j|jksPJ d S Nr   pickler   loadsdumps_node_adjgraphr   r   r   Zprvr   r   r   test_pickle   s    zTestReverseView.test_picklec                 C   sD   d| j jv sJ d| j jvs J d| jjvs0J d| jjv s@J d S N)      )r    r   r   edgesr   r   r   r   r   test_contains   s    zTestReverseView.test_containsc                 C   s.   t dd | jjD }t | jj|ks*J d S )Nc                 s   s   | ]}t t|V  qd S Ntuplereversed.0er   r   r   	<genexpr>       z,TestReverseView.test_iter.<locals>.<genexpr>sortedr   r"   r   r   expectedr   r   r   	test_iter   s    zTestReverseView.test_iterc                 C   s   t  }tt jt j| d S r$   )r   GraphpytestraisesNetworkXNotImplementedr   r   r   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slJ |	 dks|J 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 classr9   )
r   r
   add_edger   print	__class__copyr"   Zhas_edger:   )r   MZRMZRMCr   r;   r   test_subclass%   s    

zTestReverseView.test_subclassN)	r?   r@   rA   r   r   r#   r1   r7   rH   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   rC   r   r   r   r   r   r   r   9   s    z!TestMultiReverseView.setup_methodc                 C   sT   dd l }| j}|||d}|j|jks0J |j|jks@J |j|jksPJ d S r   r   r   r   r   r   r   >   s    z TestMultiReverseView.test_picklec                 C   sd   d| j jv sJ d| j jvs J d| jjvs0J d| jjv s@J d| jjv sPJ d| jjvs`J d S )N)r   r    r   )r    r   r   )rK   rJ   rB   )rJ   rK   rB   r!   r   r   r   r   r#   G   s    z"TestMultiReverseView.test_containsc                 C   s.   t dd | jjD }t | jj|ks*J d S )Nc                 s   s   | ]\}}}|||fV  qd S r$   r   )r)   uvkr   r   r   r+   P   r,   z1TestMultiReverseView.test_iter.<locals>.<genexpr>r-   r/   r   r   r   r1   O   s    zTestMultiReverseView.test_iterc                 C   s"   t | j}tt jt j| d S r$   )r   
MultiGraphr   r3   r4   r5   r   )r   MGr   r   r   r7   S   s    z$TestMultiReverseView.test_exceptionsN)r?   r@   rA   r   r   r#   r1   r7   r   r   r   r   rI   8   s
   	rI   c                  C   s   t j} t dg}tt j  | j|t jd W d    n1 sD0    Y  t dg}tt j  | j|t jd W d    n1 s0    Y  d S )N)rB   r   r   )	r   Z
graphviewsr
   r3   r4   ZNetworkXErrorZgeneric_graph_viewrP   rL   )Znxgr   r   r   r   test_generic_multitypeX   s    .rR   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dvrP   rQ   Mdvr   r   r   r   r   c   s    zTestToDirected.setup_methodc                 C   s    | j  rJ | j sJ d S r$   )r   is_directedrU   r   r   r   r   test_directedi   s    zTestToDirected.test_directedc                 C   sD   t | j}t | j}t|j| jjs,J t|j| jjs@J d S r$   )r   rT   rU   rV   r   r"   )r   ddZMddr   r   r   test_already_directedm   s    z$TestToDirected.test_already_directedc                 C   sd   dd l }| j}|||d}|j|jks0J |j|jks@J |j|jksPJ |j|jks`J d S r   )r   rU   r   r   r   Z_succZ_predr   )r   r   rU   Zpdvr   r   r   r   s   s    zTestToDirected.test_picklec                 C   sD   d| j jv sJ d| j jv s J d| jjv s0J d| jjv s@J d S r   )r   r"   rU   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:J d S )Nc                 S   s   g | ]}t t|qS r   r%   r(   r   r   r   
<listcomp>   r,   z,TestToDirected.test_iter.<locals>.<listcomp>)r   r"   r.   listrU   )r   Zrevdr0   r   r   r   r1      s    zTestToDirected.test_iterN	r?   r@   rA   r   rX   rZ   r   r#   r1   r   r   r   r   rS   b   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 )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uvrL   MDGMuvr   r   r   r   r      s    zTestToUndirected.setup_methodc                 C   s    | j  sJ | j rJ d S r$   )r_   rW   ra   r   r   r   r   rX      s    zTestToUndirected.test_directedc                 C   sD   t | j}t | j}t|j| jjs,J t|j| jjs@J d S r$   )r   r`   ra   rc   r   r"   )r   uuZMuur   r   r   rZ      s    z&TestToUndirected.test_already_directedc                 C   sb   dd l }| j}|||d}|j|jks0J |j|jks@J |j|jksPJ t|ds^J d S )Nr   r   _graph)r   ra   r   r   r   r   r   hasattr)r   r   ra   Zpuvr   r   r   r      s    zTestToUndirected.test_picklec                 C   sD   d| j jv sJ d| j jvs J d| jjv s0J d| jjv s@J d S r   )r_   r"   ra   r   r   r   r   r#      s    zTestToUndirected.test_containsc                 C   s$   t | jj}t | jj|ks J d S r$   )r.   r_   r"   ra   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_   rP   rQ   rL   rb   r`   ZGvrT   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s6J t|j|jsJ qd S r   )r   rj   r   r   r   r"   r   rk   )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 ]V}t |g d}t	|g dksJ |ddg}t	|dgksJ |j
|u sbJ qbd S )Nr       rJ   rK      rq   )r   subgraphr   ranger_   rQ   rb   rj   induced_subgraphr\   re   )r   ZSGvZSDGvZSMGvZSMDGvr   SGSSGr   r   r   test_subgraph_of_subgraph   s    z+TestChainsOfViews.test_subgraph_of_subgraphc           
      C   s  g d}dg}t | j||}g d}t ||}||}|j| ju sLJ |j| ju s\J |j|u sjJ t|j|js|J | j }|	| |
| t|||jsJ |	g d t|j|jsJ | j|}t |||}	|	j| jusJ t|	j|jsJ 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    rJ   rK   )rq   ro   )rJ   rK   rq   ro      )r   rB   r   r    N)r   Zrestricted_viewr   rt   rr   re   r   r"   rF   Zremove_nodes_fromZremove_edges_from)
r   Z
hide_nodesZ
hide_edgesZRGrk   ru   rv   ZCGZSSSGZRSGr   r   r   'test_restricted_induced_subgraph_chains   s(    



z9TestChainsOfViews.test_restricted_induced_subgraph_chainsc                 C   sD   | j D ]8}t|}|g d}| }t|t|ksJ qd S )Nrp   )rj   r   r2   rr   rF   typer   ZorigGr   ru   rn   r   r   r   test_subgraph_copy   s
    

z$TestChainsOfViews.test_subgraph_copyc                 C   sH   t | jg d}| }t|g dks.J t|jg dksDJ d S )Nrp   )rJ   rK   rK   rJ   rK   rq   )rq   rK   )r   rt   r   rT   r.   r"   r   ru   rv   r   r   r   test_subgraph_todirected  s    z*TestChainsOfViews.test_subgraph_todirectedc                 C   sH   t | jg d}| }t|g dks.J t|jddgksDJ d S )Nrp   r}   r   )r   rt   r   r`   r\   r.   r"   r   r   r   r   test_subgraph_toundirected  s    z,TestChainsOfViews.test_subgraph_toundirectedc                 C   sR   | j jdd}|g d}| }t|g dks8J t|jddgksNJ d S )NFrF   rp   r}   r   )r_   ri   rr   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,J |j| j jks>J | jjdd}|jdd}|j| jjksjJ |j| jjks|J d S )NFr   T)r_   ri   rk   r"   rb   )r   r   rn   r   r   r   test_reverse_reverse_copy  s    z+TestChainsOfViews.test_reverse_reverse_copyc                 C   sZ   | j  }|g d}|ddg}| }t|ddgksBJ t|jdgksVJ d S )Nrp   r}   r~   rJ   rK   )r   rF   rr   Zedge_subgraphr`   r\   r.   r"   )r   r   ru   rv   ZUSSGr   r   r   'test_subgraph_edgesubgraph_toundirected"  s    
z9TestChainsOfViews.test_subgraph_edgesubgraph_toundirectedc                 C   sP   | j  }|g d}|jdd}|jdd}t|ds>J t|drLJ d S Nrp   TZas_viewFre   )r   rF   rr   rf   r   r   ru   ZCSGZDCSGr   r   r   test_copy_subgraph*  s    
z$TestChainsOfViews.test_copy_subgraphc                 C   sP   | j  }|g d}|jdd}|jdd}t|ds>J t|drLJ d S r   )r_   rF   rr   rf   r   r   r   r   test_copy_disubgraph2  s    
z&TestChainsOfViews.test_copy_disubgraphc                 C   sP   | j  }|g d}|jdd}|jdd}t|ds>J t|drLJ d S r   )rb   rF   rr   rf   r   r   r   r   test_copy_multidisubgraph:  s    
z+TestChainsOfViews.test_copy_multidisubgraphc                 C   sP   | j  }|g d}|jdd}|jdd}t|ds>J t|drLJ d S r   )rQ   rF   rr   rf   r   r   r   r   test_copy_multisubgraphB  s    
z)TestChainsOfViews.test_copy_multisubgraphc                 C   s<   t | j}|jjdksJ |jdd}|jjdks8J d S )NrP   Tr   )r   rP   rh   rE   r?   rF   r6   r   r   r   test_copy_of_viewJ  s    z#TestChainsOfViews.test_copy_of_viewc                    sx   G  fdddt j | jD ]V} |}|g d}| }| dksNJ | dks^J d|vsd|v sJ 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 r8   r   r   r   r   r   r:   R  s    z:TestChainsOfViews.test_subclass.<locals>.MyGraph.my_methodc                    s     S r$   r   r   r;   r   r   r=   U  s    zBTestChainsOfViews.test_subclass.<locals>.MyGraph.to_directed_classNr>   r   r;   r   r   r<   Q  s   r<   rp   r9   r    )r   r
   rj   rr   rF   r:   r{   r   r;   r   rH   P  s    
zTestChainsOfViews.test_subclassN)r?   r@   rA   classmethodrm   r   rw   ry   r|   r   r   r   r   r   r   r   r   r   r   rH   r   r   r   r   rg      s"   

rg   )r3   Znetworkxr   Znetworkx.utilsr   r   r   rI   rR   rS   r^   rg   r   r   r   r   <module>   s   / 
'&