o
    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                   @   <   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   Z/var/www/vscode/kcb/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   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__rC   rH   r   rF   r   r   rG   &       rG      r$   zRM classz	RMC classrB   )
r
   r   add_edger   print	__class__copyr'   has_edgerC   )r   MRMRMCr   rF   r   test_subclass%   s   

zTestReverseView.test_subclassN)	rK   rL   rM   r   r!   r(   r7   r>   rX   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   rP   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   )r[   rZ   rO   )rZ   r[   rO   r&   r   r   r   r   r(   G   s   z"TestMultiReverseView.test_containsc                 C   r*   )Nc                 s   s     | ]\}}}|||fV  qd S r+   r   )r0   uvkr   r   r   r2   P   s    z1TestMultiReverseView.test_iter.<locals>.<genexpr>r3   r5   r   r   r   r7   O   r8   zTestMultiReverseView.test_iterc                 C   s"   t | j}tt jt j| d S r+   )r
   
MultiGraphr   r:   r;   r<   r   )r   MGr   r   r   r>   S   s   z$TestMultiReverseView.test_exceptionsN)rK   rL   rM   r   r!   r(   r7   r>   r   r   r   r   rY   8   s    	rY   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)rO   r$   r   )	r
   
graphviewsr   r:   r;   NetworkXErrorgeneric_graph_viewr`   r\   )nxgr   r   r   r   test_generic_multitypeX   s   "rf   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`   ra   Mdvr   r   r   r   r   c   s   zTestToDirected.setup_methodc                 C   s    | j  rJ | j sJ d S r+   )r   is_directedri   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
   rh   ri   rj   r   r'   )r   dd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   ri   r   r   r   _succ_predr   )r   r   ri   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'   ri   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   listri   )r   revdr6   r   r   r   r7      s   zTestToDirected.test_iterN	rK   rL   rM   r   rl   rq   r!   r(   r7   r   r   r   r   rg   b       
rg   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.setup_methodc                 C   s    | j  sJ | j rJ d S r+   )r|   rk   r~   r   r   r   r   rl      rm   zTestToUndirected.test_directedc                 C   rn   r+   )r
   r}   r~   r   r   r'   )r   uuMuur   r   r   rq      rr   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_iterNry   r   r   r   r   r{      rz   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 qfd S r   )r
   r   r   r   r|   r`   ra   r\   r   r}   Gvrh   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%      rZ   r[      r   )r
   subgraphr   ranger|   ra   r   r   induced_subgraphrw   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%   rZ   r[   )r   r   )rZ   r[   r   r      )r   rO   r$   r%   N)r
   restricted_viewr   r   r   r   r   r'   rS   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
   r9   r   rS   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   )rZ   r[   r[   rZ   r[   r   )r   r[   )r
   r   r   rh   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}   rw   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rS   r   r   r   )r|   r   r   r}   rw   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   rZ   r[   )r   rS   r   edge_subgraphr}   rw   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   rS   r   r   r   r   r   CSGDCSGr   r   r   test_copy_subgraph*     
z$TestChainsOfViews.test_copy_subgraphc                 C   r   r   )r|   rS   r   r   r   r   r   r   test_copy_disubgraph2  r   z&TestChainsOfViews.test_copy_disubgraphc                 C   r   r   )r   rS   r   r   r   r   r   r   test_copy_multidisubgraph:  r   z+TestChainsOfViews.test_copy_multidisubgraphc                 C   r   r   )ra   rS   r   r   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`   r   rR   rK   rS   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@   rA   r   r   r   r   r   rC   R  rD   z:TestChainsOfViews.test_subclass.<locals>.MyGraph.my_methodc                    rE   r+   r   r   rF   r   r   rH   U  rI   zBTestChainsOfViews.test_subclass.<locals>.MyGraph.to_directed_classNrJ   r   rF   r   r   rG   Q  rN   rG   r   rB   r%   )r
   r   r   r   rS   rC   r   r   rF   r   rX   P  s   
zTestChainsOfViews.test_subclassN)rK   rL   rM   classmethodr   r!   r   r   r   r   r   r   r   r   r   r   r   r   r   rX   r   r   r   r   r      s$    

r   )r:   networkxr
   networkx.utilsr   r   r   rY   rf   rg   r{   r   r   r   r   r   <module>   s    / 
'&