a
    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   o/var/www/html/stable-diffusion-webui/venv/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 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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 classr:   )
r   r
   add_edger   print	__class__copyr"   Zhas_edger;   )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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   )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*J d S )Nc                 s   s   | ]\}}}|||fV  qd S r$   r   )r)   uvkr   r   r   r+   Q   r,   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   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)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J | j sJ d S r$   )r   is_directedrV   r   r   r   r   test_directedk   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   rU   rV   rW   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s0J |j|jks@J |j|jksPJ |j|jks`J d S r   )r   rV   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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"   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: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.   listrV   )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J | j rJ d S r$   )r`   rX   rb   r   r   r   r   rY      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   ra   rb   rd   r   r"   )r   uuZMuur   r   r   r[      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   rb   r   r   r   r   r   hasattr)r   r   rb   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"   rb   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"   rb   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s6J t|j|jsJ qd S r   )r   rk   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 ]V}t |g d}t	|g dksJ |ddg}t	|dgksJ |j
|u sbJ qbd S )Nr       rK   rL      rr   )r   subgraphr   ranger`   rR   rc   rk   induced_subgraphr]   rf   )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    rK   rL   )rr   rp   )rK   rL   rr   rp      )r   rC   r   r    N)r   Zrestricted_viewr   ru   rs   rf   r   r"   rG   Zremove_nodes_fromZremove_edges_from)
r   Z
hide_nodesZ
hide_edgesZRGrl   rv   rw   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 )Nrq   )rk   r   r3   rs   rG   typer   ZorigGr   rv   ro   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 )Nrq   )rK   rL   rL   rK   rL   rr   )rr   rL   )r   ru   r   rU   r.   r"   r   rv   rw   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 )Nrq   r~   r   )r   ru   r   ra   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rG   rq   r~   r   )r`   rj   rs   ra   r]   r.   r"   )r   r   rv   rw   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`   rj   rl   r"   rc   )r   r   ro   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 )Nrq   r~   r   rK   rL   )r   rG   rs   Zedge_subgraphra   r]   r.   r"   )r   r   rv   rw   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 Nrq   TZas_viewFrf   )r   rG   rs   rg   r   r   rv   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`   rG   rs   rg   r   r   r   r   test_copy_disubgraph4  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   )rc   rG   rs   rg   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   )rR   rG   rs   rg   r   r   r   r   test_copy_multisubgraphD  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 )NrQ   Tr   )r   rQ   ri   rF   r@   rG   )r   r   r   r   r   test_copy_of_viewL  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 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=   rq   r:   r    )r   r
   rk   rs   rG   r;   r|   r   r<   r   rI   R  s    
zTestChainsOfViews.test_subclassN)r@   rA   rB   classmethodrn   r   rx   rz   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!
'&