o
    ˷e-                     @   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	   create_using)nx
path_graphDiGraphGreverse_viewrvself r   ]/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/classes/tests/test_graphviews.pysetup
   s   zTestReverseView.setupc                 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   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 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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__rD   rI   r   rG   r   r   rH   '       rH      r$   zRM classz	RMC classrC   )
r
   r   add_edger   print	__class__copyr'   has_edgerD   )r   MRMRMCr   rG   r   test_subclass&   s   

zTestReverseView.test_subclassN)	rL   rM   rN   r   r!   r(   r7   r?   rY   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   rQ   r   r   r   r   r   r   r   :   s   zTestMultiReverseView.setupc                 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   )r\   r[   rP   )r[   r\   rP   r&   r   r   r   r   r(   H   s   z"TestMultiReverseView.test_containsc                 C   r*   )Nc                 s   s     | ]\}}}|||fV  qd S r+   r   )r0   uvkr   r   r   r2   Q   s    z1TestMultiReverseView.test_iter.<locals>.<genexpr>r3   r5   r   r   r   r7   P   r8   zTestMultiReverseView.test_iterc                 C   s(   t j}t | j}tt j|j| d S r+   )r
   r9   
MultiGraphr   r;   r<   r=   r   )r   r>   MGr   r   r   r?   T   s   z$TestMultiReverseView.test_exceptionsN)rL   rM   rN   r   r!   r(   r7   r?   r   r   r   r   rZ   9   s    	rZ   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)rP   r$   r   )	r
   r9   r   r;   r<   NetworkXErrorgeneric_graph_viewra   r]   )r>   r   r   r   r   test_generic_multitypeZ   s   "re   c                   @   r   )TestToDirectedc                 C   s@   t d| _t | j| _t jdt  d| _t | j| _d S r   )r
   r   r   to_directeddvra   rb   Mdvr   r   r   r   r   e   s   zTestToDirected.setupc                 C   s    | j  rJ | j sJ d S r+   )r   is_directedrh   r   r   r   r   test_directedk      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
   rg   rh   ri   r   r'   )r   ddMddr   r   r   test_already_directedo      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   rh   r   r   r   _succ_predr   )r   r   rh   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 sJ d| jjv s J d S r#   )r   r'   rh   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'   r4   listrh   )r   revdr6   r   r   r   r7      s   zTestToDirected.test_iterN	rL   rM   rN   r   rk   rp   r!   r(   r7   r   r   r   r   rf   d       
rf   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uvr]   MDGMuvr   r   r   r   r      s   zTestToUndirected.setupc                 C   s    | j  sJ | j rJ d S r+   )r{   rj   r}   r   r   r   r   rk      rl   zTestToUndirected.test_directedc                 C   rm   r+   )r
   r|   r}   r   r   r'   )r   uuMuur   r   r   rp      rq   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   r}   r   r   r   r   r   hasattr)r   r   r}   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#   )r{   r'   r}   r   r   r   r   r(      r)   zTestToUndirected.test_containsc                 C   s$   t | jj}t | jj|ksJ d S r+   )r4   r{   r'   r}   r5   r   r   r   r7      s   zTestToUndirected.test_iterNrx   r   r   r   r   rz      ry   rz   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   r{   ra   rb   r]   r~   r|   Gvrg   DGvMGvMDGvreverseRvMRvgraphsr'   nodes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   r   r   r   r   r'   r   r   )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%      r[   r\      r   )r
   subgraphr   ranger{   rb   r~   r   induced_subgraphrv   r   )r   SGvSDGvSMGv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%   r[   r\   )r   r   )r[   r\   r   r      )r   rP   r$   r%   N)r
   restricted_viewr   r   r   r   r   r'   rT   remove_nodes_fromremove_edges_from)
r   
hide_nodes
hide_edgesRGr   r   r   CGSSSG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   )r   r
   OrderedGraphr   rT   typer   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   )r[   r\   r\   r[   r\   r   )r   r\   )r
   r   r   rg   r4   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   r|   rv   r4   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rT   r   r   r   )r{   r   r   r|   rv   r4   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)r{   r   r   r'   r~   )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   r[   r\   )r   rT   r   edge_subgraphr|   rv   r4   r'   )r   r   r   r   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as_viewFr   )r   rT   r   r   r   r   r   CSGDCSGr   r   r   test_copy_subgraph,     
z$TestChainsOfViews.test_copy_subgraphc                 C   r   r   )r{   rT   r   r   r   r   r   r   test_copy_disubgraph4  r   z&TestChainsOfViews.test_copy_disubgraphc                 C   r   r   )r~   rT   r   r   r   r   r   r   test_copy_multidisubgraph<  r   z+TestChainsOfViews.test_copy_multidisubgraphc                 C   r   r   )rb   rT   r   r   r   r   r   r   test_copy_multisubgraphD  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 )NOrderedMultiGraphTr   )r
   r   r   rS   rL   rT   )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 ]+} |}|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   rA   rB   r   r   r   r   r   rD   T  rE   z:TestChainsOfViews.test_subclass.<locals>.MyGraph.my_methodc                    rF   r+   r   r   rG   r   r   rI   W  rJ   zBTestChainsOfViews.test_subclass.<locals>.MyGraph.to_directed_classNrK   r   rG   r   r   rH   S  rO   rH   r   rC   r%   )r
   r   r   r   rT   rD   r   r   rG   r   rY   R  s   
zTestChainsOfViews.test_subclassN)rL   rM   rN   classmethodr   r!   r   r   r   r   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   r      s$    

r   )r;   networkxr
   networkx.utilsr   r   r   rZ   re   rf   rz   r   r   r   r   r   <module>   s    0!
'&