o
    ]Zh,                     @   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                   @   <   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   U/var/www/auris/lib/python3.10/site-packages/networkx/classes/tests/test_graphviews.pysetup_method
   s   zTestReverseView.setup_methodc                 C   T   dd l }| j}|||d}|j|jksJ |j|jks J |j|jks(J d S Nr   pickler   loadsdumps_node_adjgraphr   r   r   Zprvr   r   r   test_pickle      zTestReverseView.test_picklec                 C   sD   d| j jv sJ d| j jvsJ d| jjvsJ d| jjv s J d S N)      )r#   r"   r   edgesr   r   r   r   r   test_contains      zTestReverseView.test_containsc                 C   .   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>   s    z,TestReverseView.test_iter.<locals>.<genexpr>sortedr   r%   r   r   expectedr   r   r   	test_iter      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s6J |	 dks>J d S )Nc                           e Zd Zdd Z fddZdS )z.TestReverseView.test_subclass.<locals>.MyGraphc                 S      dS Nmer   r   r   r   r   	my_method'      z8TestReverseView.test_subclass.<locals>.MyGraph.my_methodc                         S r)   r   r   MyGraphr   r   to_directed_class*      z@TestReverseView.test_subclass.<locals>.MyGraph.to_directed_classN__name__
__module____qualname__rA   rF   r   rD   r   r   rE   &       rE      r"   zRM classz	RMC classr@   )
r	   r   add_edger   print	__class__copyr%   Zhas_edgerA   )r   MZRMZRMCr   rD   r   test_subclass%   s   

zTestReverseView.test_subclassN)	rI   rJ   rK   r   r   r&   r5   r<   rS   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   rN   r   r   r   r   r   r   r   9   s   z!TestMultiReverseView.setup_methodc                 C   r   r   r   r   r   r   r   r   >   r    z TestMultiReverseView.test_picklec                 C   sd   d| j jv sJ d| j jvsJ d| jjvsJ d| jjv s J d| jjv s(J d| jjvs0J d S )N)r"   r#   r   )r#   r"   r   )rV   rU   rM   )rU   rV   rM   r$   r   r   r   r   r&   G   s   z"TestMultiReverseView.test_containsc                 C   r(   )Nc                 s   s     | ]\}}}|||fV  qd S r)   r   )r.   uvkr   r   r   r0   P   s    z1TestMultiReverseView.test_iter.<locals>.<genexpr>r1   r3   r   r   r   r5   O   r6   zTestMultiReverseView.test_iterc                 C   s"   t | j}tt jt j| d S r)   )r	   
MultiGraphr   r8   r9   r:   r   )r   MGr   r   r   r<   S   s   z$TestMultiReverseView.test_exceptionsN)rI   rJ   rK   r   r   r&   r5   r<   r   r   r   r   rT   8   s    	rT   c                  C   s   t j} t dg}tt j | j|t jd W d    n1 s"w   Y  t dg}tt j | j|t jd W d    d S 1 sGw   Y  d S )N)rM   r"   r   )	r	   Z
graphviewsr   r8   r9   ZNetworkXErrorZgeneric_graph_viewr[   rW   )Znxgr   r   r   r   test_generic_multitypeX   s   "r]   c                   @   r   )TestToDirectedc                 C   s@   t d| _t | j| _t jdt  d| _t | j| _d S r   )r	   r
   r   to_directeddvr[   r\   Mdvr   r   r   r   r   c   s   zTestToDirected.setup_methodc                 C   s    | j  rJ | j sJ d S r)   )r   is_directedr`   r   r   r   r   test_directedi      zTestToDirected.test_directedc                 C   D   t | j}t | j}t|j| jjsJ t|j| jjs J d S r)   )r	   r_   r`   ra   r   r%   )r   ddZMddr   r   r   test_already_directedm      z$TestToDirected.test_already_directedc                 C   sd   dd l }| j}|||d}|j|jksJ |j|jks J |j|jks(J |j|jks0J d S r   )r   r`   r   r   r   Z_succZ_predr   )r   r   r`   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 sJ d| jjv s J d S r!   )r   r%   r`   r   r   r   r   r&   }   r'   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>   s    z,TestToDirected.test_iter.<locals>.<listcomp>)r   r%   r2   listr`   )r   Zrevdr4   r   r   r   r5      s   zTestToDirected.test_iterN	rI   rJ   rK   r   rc   rg   r   r&   r5   r   r   r   r   r^   b       
r^   c                   @   r   )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uvrW   MDGMuvr   r   r   r   r      s   zTestToUndirected.setup_methodc                 C   s    | j  sJ | j rJ d S r)   )rn   rb   rp   r   r   r   r   rc      rd   zTestToUndirected.test_directedc                 C   re   r)   )r	   ro   rp   rr   r   r%   )r   uuZMuur   r   r   rg      rh   z&TestToUndirected.test_already_directedc                 C   sb   dd l }| j}|||d}|j|jksJ |j|jks J |j|jks(J t|ds/J d S )Nr   r   _graph)r   rp   r   r   r   r   r   hasattr)r   r   rp   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 sJ d| jjv s J d S r!   )rn   r%   rp   r   r   r   r   r&      r'   zTestToUndirected.test_containsc                 C   s$   t | jj}t | jj|ksJ d S r)   )r2   rn   r%   rp   r3   r   r   r   r5      s   zTestToUndirected.test_iterNrk   r   r   r   r   rm      rl   rm   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 qfd S r   )r	   r
   r   r   rn   r[   r\   rW   rq   ro   ZGvr_   ZDGvMGvZMDGvreverseZRvZMRvgraphsr%   nodesZdegree)clsr   r   r   r   setup_class   s0   
zTestChainsOfViews.setup_classc                 C   sN   dd l }| jD ]}|||d}t|j|jsJ t|j|js$J qd S r   )r   ry   r   r   r   r%   r   rz   )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 ]+}t |g d}t	|g dksEJ |ddg}t	|dgksUJ |j
|u s\J q1d S )Nr#      rU   rV      r   )r	   subgraphr   rangern   r\   rq   ry   induced_subgraphrj   rt   )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 s&J |j| ju s.J |j|u s5J t|j|js>J | j }|	| |
| t|||jsXJ |	g d t|j|jshJ | j|}t |||}	|	j| jus}J t|	j|jsJ 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#   rU   rV   )r   r~   )rU   rV   r   r~      )r   rM   r"   r#   N)r	   Zrestricted_viewr   r   r   rt   r   r%   rQ   Zremove_nodes_fromZremove_edges_from)
r   Z
hide_nodesZ
hide_edgesZRGrz   r   r   ZCGZSSSGZRSGr   r   r   'test_restricted_induced_subgraph_chains   s(   



z9TestChainsOfViews.test_restricted_induced_subgraph_chainsc                 C   sD   | j D ]}t|}|g d}| }t|t|ksJ qd S )Nr   )ry   r	   r7   r   rQ   typer   ZorigGr   r   r}   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s"J d S )Nr   )rU   rV   rV   rU   rV   r   )r   rV   )r	   r   r   r_   r2   r%   r   r   r   r   r   r   test_subgraph_todirected     z*TestChainsOfViews.test_subgraph_todirectedc                 C   sH   t | jg d}| }t|g dksJ t|jddgks"J d S )Nr   r   r   )r	   r   r   ro   rj   r2   r%   r   r   r   r   test_subgraph_toundirected  r   z,TestChainsOfViews.test_subgraph_toundirectedc                 C   sR   | j jdd}|g d}| }t|g dksJ t|jddgks'J d S )NFrQ   r   r   r   )rn   rx   r   ro   rj   r2   r%   )r   r   r   r   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s5J |j| jjks>J d S )NFr   T)rn   rx   rz   r%   rq   )r   r   r}   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s!J t|jdgks+J d S )Nr   r   r   rU   rV   )r   rQ   r   Zedge_subgraphro   rj   r2   r%   )r   r   r   r   ZUSSGr   r   r   'test_subgraph_edgesubgraph_toundirected"  s   
z9TestChainsOfViews.test_subgraph_edgesubgraph_toundirectedc                 C   P   | j  }|g d}|jdd}|jdd}t|dsJ t|dr&J d S Nr   TZas_viewFrt   )r   rQ   r   ru   r   r   r   ZCSGZDCSGr   r   r   test_copy_subgraph*     
z$TestChainsOfViews.test_copy_subgraphc                 C   r   r   )rn   rQ   r   ru   r   r   r   r   test_copy_disubgraph2  r   z&TestChainsOfViews.test_copy_disubgraphc                 C   r   r   )rq   rQ   r   ru   r   r   r   r   test_copy_multidisubgraph:  r   z+TestChainsOfViews.test_copy_multidisubgraphc                 C   r   r   )r\   rQ   r   ru   r   r   r   r   test_copy_multisubgraphB  r   z)TestChainsOfViews.test_copy_multisubgraphc                 C   s<   t | j}|jjdksJ |jdd}|jjdksJ d S )Nr[   Tr   )r	   r[   rw   rP   rI   rQ   r;   r   r   r   test_copy_of_viewJ  s   z#TestChainsOfViews.test_copy_of_viewc                    sx   G  fdddt j | jD ]+} |}|g d}| }| dks'J | dks/J d|vs9d|v s9J qd S )Nc                       r=   )z0TestChainsOfViews.test_subclass.<locals>.MyGraphc                 S   r>   r?   r   r   r   r   r   rA   R  rB   z:TestChainsOfViews.test_subclass.<locals>.MyGraph.my_methodc                    rC   r)   r   r   rD   r   r   rF   U  rG   zBTestChainsOfViews.test_subclass.<locals>.MyGraph.to_directed_classNrH   r   rD   r   r   rE   Q  rL   rE   r   r@   r#   )r	   r   ry   r   rQ   rA   r   r   rD   r   rS   P  s   
zTestChainsOfViews.test_subclassN)rI   rJ   rK   classmethodr|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   rv      s$    

rv   )r8   Znetworkxr	   Znetworkx.utilsr   r   r   rT   r]   r^   rm   rv   r   r   r   r   <module>   s    / 
'&