o
    3ήc                     @   s:   d dl mZ d dlmZmZ d dlmZ G dd dZdS )    )approx)is_connected	neighbors)random_internet_as_graphc                   @   sX   e Zd Zedd Zedd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )TestInternetASTopologyc                 C   s   d| _ d| _t| j | j| _g | _g | _g | _g | _i | _i | _	| j
 D ]T}| jj
| d dkr8| j| n7| jj
| d dkrI| j| n&| jj
| d dkrZ| j| n| jj
| d dkrk| j| ntd| | | | q%d S )	Ni  *   typeTMCCPzEInconsistent data in the graph                        node attributes)nseedr   Gr	   r
   r   r   	customers	providersnodesappend
ValueErrorset_customersset_providers)clsi r   X/tmp/pip-target-vg8gfxp4/lib/python/networkx/generators/tests/test_internet_as_graphs.pysetup_class   s0   
z"TestInternetASTopology.setup_classc                 C   s   || j vrPt | j |< t| j|D ]@}| jj||f }|d dkrOt|d }||krG| | | j | | j | | j |< | j | | q||krOt	dqd S d S Nr   transitcustomerzMInconsistent data in the graph                                edge attributes)
r   setr   r   edgesintr   unionaddr   r   r   jer   r   r   r   r   %   "   

z$TestInternetASTopology.set_customersc                 C   s   || j vrPt | j |< t| j|D ]@}| jj||f }|d dkrOt|d }||krG| | | j | | j | | j |< | j | | q||krOt	dqd S d S r   )
r   r   r   r   r    r!   r   r"   r#   r   r$   r   r   r   r   7   r'   z$TestInternetASTopology.set_providersc                 C   sX   t d}t| dksJ t d}t| dksJ t d}t| dks*J d S )Nr      )r   lenr   )selfr   r   r   r   test_wrong_inputI   s   z'TestInternetASTopology.test_wrong_inputc                 C   s   t | j | jksJ t | jdk sJ t | jt| jd ks#J t | jt| jd ks1J | jt | j t | j t | j }t | j|ksLJ d S )N   g333333?皙?)	r*   r   r   r   r	   r
   roundr   r   )r+   numbr   r   r   test_node_numbersS   s   $z(TestInternetASTopology.test_node_numbersc                 C   s   t | jsJ d S )N)r   r   )r+   r   r   r   test_connectivity[   s   z(TestInternetASTopology.test_connectivityc                 C   s  | j D ]}t| j| dksJ q| jD ]}t| j| dks!J q| jD ]}t| j| dks2J q%| j D ]}t| j| | j| dksKJ q8| j	 D ]4\}}| jj	||f d dkr|| j| vsjJ || j| vssJ || j| vs|J || j| vsJ qQd S )Nr   r   peer)
r	   r*   r   r   r   r   r   r   intersectionr    )r+   r   r%   r   r   r   test_relationships^   s    


$z)TestInternetASTopology.test_relationshipsc                 C   sN  d}d}d}d}d}d}d}d}d}	| j  D ]\}
}| j j|
|f }|d dkrt|d }|
|kr6|}n||kr=|
}ntd|| jv rY|d7 }| j j| d dkrX|d7 }q|| jv rq|d7 }| j j| d dkrp|	d7 }	q|| jv r|d7 }| j j| d dkr|d7 }qtd|d dkr| j j|
 d d	kr| j j| d d	kr|d7 }| j j|
 d d
kr| j j| d d
kr|d7 }| j j|
 d d	kr| j j| d d
ks| j j|
 d d
kr| j j| d d	kr|d7 }qtd|t| j t	dd| j
 d  ddksJ |t| j t	dd| j
 d  ddks"J |t| j t	dd| j
 d  ddks9J |t| j t	dd| j
 d  ddksPJ |t| j t	dd| j
 d  ddksgJ |t| j t	dd| j
 d  ddks~J || t	dddksJ || t	dddksJ |	| t	dddksJ d S )Nr   r   r   r   zIInconsistent data in the graph edge                            attributesr)   r	   r3   r
   r   zCUnexpected data in the graph edge                        attributes   g      @i'  g      ?)absg      ?   i g?r.   g      ?g?g      ?)r   r    r!   r   r
   r   r   r   r*   r   r   )r+   d_md_cpd_cp_m_mp_cp_mp_cp_cpt_mt_cpt_cr   r%   r&   custprovr   r   r   test_degree_valuesw   s   


((.....z)TestInternetASTopology.test_degree_valuesN)__name__
__module____qualname__classmethodr   r   r   r,   r1   r2   r5   rD   r   r   r   r   r      s    



r   N)pytestr   networkxr   r   &networkx.generators.internet_as_graphsr   r   r   r   r   r   <module>   s    