o
    3ήc#                     @   s   d dl Z d dlZd dlmZ d dlmZm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G dd dZdS )    N)k_components)
_AntiGraph_samec                 C   s:   i }t |  D ]\}}|D ]}|D ]}|||< qqq|S N)sorteditems)r   k_numkcompscompnode r   _/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/approximation/tests/test_kcomponents.pybuild_k_number_dict	   s   
r   c            	      C   sf  t jt ddgdd} t | d}dd | D }|d |d f|d |d	 f|d
 |d f|d |d ffD ]w}|  d }t  }t | |} | |d |d  | ||d  t 	d}t | |} | |d |d  | |d |d  | |d |d  t | |} | |d  }| 
|d  |D ]
}| |d | q| |d |d  q9| S )N   labelslabel_attributec                 S      i | ]\}}||qS r   r   .0r	   vr   r   r   
<dictcomp>       z#graph_example_1.<locals>.<dictcomp>r   r      r   r      r   r      r   r   r   r!   r   r   r   r   r         r!      r      
         nxconvert_node_labels_to_integers
grid_graphget_node_attributesr   orderpetersen_graphdisjoint_unionadd_edgecomplete_graphremove_node)	Grlabelsr   nodesnew_nodePKnbrsnbrr   r   r   graph_example_1   s6   
r?   c            
      C   s~  t jt ddgdd} t | d}dd | D }|d |d f|d |d	 ffD ]w}|  d
 }t  }t | |} | |d
 |d  | ||d
  t 	d}t | |} | |d |d  | |d |d  | |d |d  t | |} | |d  }| 
|d  |D ]
}| |d | q| |d |d  q+|d |d f|d |d ffD ]}|  d
 }t  }t | |} | |d
 |d  | ||d
  t 	d}t | |} | |d |d  | |d |d  | |d |d  t | |} | |d  }| 
|d  |D ]}| |d | q| |d  }	| 
|d  |	D ]}| |d | q0q| S )Nr   r   r   c                 S   r   r   r   r   r   r   r   r   A   r   z.torrents_and_ferraro_graph.<locals>.<dictcomp>r   r   r#   r$   r   r   r%   r&   r!   r'   r   r(   r)   r*   r+      r   r   r    r"   	      r,   )
r7   r8   r   r9   r:   r;   r<   r=   r>   nbrs2r   r   r   torrents_and_ferraro_graph<   sX   $
$
rD   c                 C   sR   t | }| D ]\}}|dk rq|D ]}| |}t|}||ks%J qqd S )Nr!   )r   r   subgraphr-   node_connectivity)r7   resultr	   
components	componentCr<   r   r   r   _check_connectivity{   s   

rK   c                  C      t  } t|  d S r   )rD   rK   r7   r   r   r   test_torrents_and_ferraro_graph      rN   c                  C   rL   r   )r?   rK   rM   r   r   r   test_example_1   rO   rP   c                  C   s   t  } t|  d S r   )r-   karate_club_graphrK   rM   r   r   r   test_karate_0   s   rR   c                  C   s  i ddddddddddddddddd	dd
dddddddddddddddi ddddddddddddddddddddddddddddd dd!dd"d} |   }d|d< d|d< t }t|}t|}|| |fv sJ d S )#Nr   r   r   r%   r!   r         r@   rA   r)   r&   r'   r(         r+   r*   rB                                              !   )copyr-   rQ   r   r   )karate_k_numapprox_karate_k_numr7   k_compsr   r   r   r   test_karate_1   s   	
 !"$rj   c                  C   s   t  } t| }t|d dksJ tdd |d D dks J tdd |d D dks/J t|d dks9J tdd |d D sFJ | D ]\}}|dk rSqJ|D ]}t| |}||kseJ qUqJd S )	Nr!   r@   c                 S      g | ]
}t |d kr|qS )rV   lenr   cr   r   r   
<listcomp>       z1test_example_1_detail_3_and_4.<locals>.<listcomp>r   c                 S   rk   )r   rl   rn   r   r   r   rp      rq   c                 s   s    | ]	}t |d kV  qdS )r   Nrl   rn   r   r   r   	<genexpr>   s    z0test_example_1_detail_3_and_4.<locals>.<genexpr>)r?   r   rm   allr   r-   rF   rE   )r7   rG   r	   rH   rI   r<   r   r   r   test_example_1_detail_3_and_4   s   rt   c                  C   sJ   t tj tjdddd} t| }W d    d S 1 sw   Y  d S )Nr)   g?T)directed)pytestraisesr-   NetworkXNotImplementedgnp_random_graphr   )r7   kcr   r   r   test_directed   s   
"r{   c                  C   sl   dddd} dddd}dddd}t | sJ t |rJ t |dds&J t |r,J t |ddr4J d S )Nr%   )ABrJ   r   r@   rB   )tolr   )r   )equalslightly_different	differentr   r   r   	test_same   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S )TestAntiGraphc                 C   s   t dd| _tt | j| _t  | _tt | j| _t 	 | _
tt | j
| _| j| jf| j| jf| j
| jfg| _d S )NrX   g?)r-   ry   Gnpr   
complementAnpdavis_southern_women_graphGdAdrQ   GkAkGA)clsr   r   r   setup_class   s   

(zTestAntiGraph.setup_classc                 C   sT   | j D ]$\}}| }tt| tt|  }|||d  d ks'J qd S )Nr   r%   )r   r1   rm   listedges)selfr7   r|   nsr   r   r   	test_size   s
    zTestAntiGraph.test_sizec                 C   s0   | j D ]\}}t| t| ksJ qd S r   )r   r   degreer   r7   r|   r   r   r   test_degree   s   zTestAntiGraph.test_degreec                 C   s,   | j D ]\}}t|t|ksJ qd S r   )r   r-   core_numberr   r   r   r   test_core_number   s   zTestAntiGraph.test_core_numberc                 C   sR   | j D ]#\}}dd t|D }dd t|D }|D ]}||v s%J qqd S )Nc                 S      g | ]}t |qS r   setrn   r   r   r   rp         z;TestAntiGraph.test_connected_components.<locals>.<listcomp>c                 S   r   r   r   rn   r   r   r   rp     r   )r   r-   connected_components)r   r7   r|   gcacr   r   r   r   test_connected_components  s   z'TestAntiGraph.test_connected_componentsc                 C   sd   | j D ],\}}|j D ]"\}}tdd |j D }tdd |j D }||ks.J qqd S )Nc                 s        | ]\}}|t |fV  qd S r   r   r   r   adr   r   r   rr         z)TestAntiGraph.test_adj.<locals>.<genexpr>c                 s   r   r   r   r   r   r   r   rr     r   )r   adjr   r   )r   r7   r|   r   r=   a_adjg_adjr   r   r   test_adj	  s   zTestAntiGraph.test_adjc                 C   sF   | j D ]\}}t| }| D ]\}}|t|f|v sJ qqd S r   )r   r   	adjacencyr   )r   r7   r|   r   r   r=   r   r   r   test_adjacency  s   zTestAntiGraph.test_adjacencyc                 C   sD   | j D ]\}}t| d }t||t||ksJ qd S )Nr   )r   r   r9   r   	neighborsr   r7   r|   r   r   r   r   test_neighbors  s   "zTestAntiGraph.test_neighborsc                 C   s<   | j D ]\}}d}ttj|j| ttj|j| qd S )Nnon_existent_node)r   rv   rw   r-   NetworkXErrorr   r   r   r   r   test_node_not_in_graph  s
   z$TestAntiGraph.test_node_not_in_graphc                 C   s   | j D ]n\}}t| d }t| dd }||||ks%J tdd | D tdd | D ks=J tdd | D tdd |jddD ksWJ td	d ||D td	d ||D ksqJ qd S )
Nr   r   r   c                 s       | ]\}}|V  qd S r   r   r   r   dr   r   r   rr   &      z6TestAntiGraph.test_degree_thingraph.<locals>.<genexpr>c                 s   r   r   r   r   r   r   r   rr   (  r   weight)r   c                 s   r   r   r   r   r   r   r   rr   +  r   )r   r   r9   r   sum)r   r7   r|   r   r9   r   r   r   test_degree_thingraph!  s   0
z#TestAntiGraph.test_degree_thingraphN)__name__
__module____qualname__classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    
	r   )rv   networkxr-   !networkx.algorithms.approximationr   -networkx.algorithms.approximation.kcomponentsr   r   r   r?   rD   rK   rN   rP   rR   rj   rt   r{   r   r   r   r   r   r   <module>   s    %?.