o
    3ήc                     @   s4   d Z ddlZddlZG dd dZG dd dZdS )zIUnit tests for the :mod:`networkx.algorithms.centrality.reaching` module.    Nc                   @   s`   e Zd Z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 )TestGlobalReachingCentralityz7Unit tests for the global reaching centrality function.c                 C   sH   t tj t }tj|dd W d    d S 1 sw   Y  d S )Nweightr   )pytestraisesnxNetworkXErrorDiGraphglobal_reaching_centralityselfG r   Y/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/centrality/tests/test_reaching.pytest_non_positive_weights
   s   "z6TestGlobalReachingCentrality.test_non_positive_weightsc                 C   sV   t tj t }|ddg tj|dd W d    d S 1 s$w   Y  d S )Nr      r      r   r   r   )r   r   r   r   Graphadd_weighted_edges_fromr
   r   r   r   r   test_negatively_weighted   s
   "z5TestGlobalReachingCentrality.test_negatively_weightedc                 C   sF   t  }|ddg t j}||ddddksJ ||dks!J d S )N)r   r         ?)r      r   Fr   
normalizedr   r   r   r   r	   r   r
   r   r   grcr   r   r   test_directed_star   s
   z/TestGlobalReachingCentrality.test_directed_starc                 C   s*   t d}t j}||dd ddksJ d S )Nr   Fr         ?)r   
star_graphr
   r   r   r   r   test_undirected_unweighted_star   s   
z<TestGlobalReachingCentrality.test_undirected_unweighted_starc                 C   s6   t  }|ddg t j}||ddddksJ d S )Nr   r   r   r   Fr   r   g      ?)r   r   r   r
   r   r   r   r   test_undirected_weighted_star!   s   z:TestGlobalReachingCentrality.test_undirected_weighted_starc                 C   s:   t  }|dd |dd t j|d ddksJ d S Nr   r   r   r   )r   r	   add_edger
   r   r   r   r   test_cycle_directed_unweighted'   s   z;TestGlobalReachingCentrality.test_cycle_directed_unweightedc                 C   s.   t  }|dd t j|d ddksJ d S r&   r   r   r'   r
   r   r   r   r    test_cycle_undirected_unweighted-   s   z=TestGlobalReachingCentrality.test_cycle_undirected_unweightedc                 C   s,   t  }|ddg t |dksJ d S )Nr   )r   r   r   r   r   r   r   r   r   test_cycle_directed_weighted2   s   z9TestGlobalReachingCentrality.test_cycle_directed_weightedc                 C   s6   t  }|jdddd t j}||dddksJ d S )Nr   r   r   F)r   r   r)   r   r   r   r   test_cycle_undirected_weighted7   s   z;TestGlobalReachingCentrality.test_cycle_undirected_weightedc                    s   t  }|jdddd |jdddd |jdddd |jdd	dd t|d }tg d
| }tg d| }d}tdg| }d}|||||g}t| t fdd|D | }	t j}
|
|ddd}|	tj|ddksrJ d S )NAB   r   Cr   Dr!   E)r/   r   g      @g` @)r   r!   g      ?r   c                 3   s    | ]} | V  qd S )Nr   ).0lrc	max_localr   r   	<genexpr>M   s    zFTestGlobalReachingCentrality.test_directed_weighted.<locals>.<genexpr>Fr   r   gHz>)abs)	r   r	   r'   lensummaxr
   r   approx)r   r   denomA_localB_localC_localD_localE_locallocal_reach_ctrsexpectedr   actualr   r5   r   test_directed_weighted=   s"   z3TestGlobalReachingCentrality.test_directed_weightedN)__name__
__module____qualname____doc__r   r   r    r#   r%   r(   r*   r+   r,   rF   r   r   r   r   r      s    r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestLocalReachingCentralityz6Unit tests for the local reaching centrality function.c                 C   sV   t tj t }|dg tj|ddd W d    d S 1 s$w   Y  d S )N)r   r   r   r   r   r   )r   r   r   r   r	   r   local_reaching_centralityr   r   r   r   r   V   s
   "z5TestLocalReachingCentrality.test_non_positive_weightsc                 C   sX   t tj t }|ddg tj|ddd W d    d S 1 s%w   Y  d S )Nr   r   r   r   r   )r   r   r   r   r   r   rL   r   r   r   r   r   \   s
   "z4TestLocalReachingCentrality.test_negatively_weightedc                 C   s,   t d}t j}||dd dddksJ d S )Nr   r   F)r   r   g      ?)r   r"   rL   r   r   r   r   r#   b   s   
z;TestLocalReachingCentrality.test_undirected_unweighted_starc                 C   s8   t  }|ddg t j|dddd}|dksJ d S )Nr   r$   r   Fr   r   g      ?)r   r   r   rL   )r   r   
centralityr   r   r   r%   g   s   z9TestLocalReachingCentrality.test_undirected_weighted_starN)rG   rH   rI   rJ   r   r   r#   r%   r   r   r   r   rK   S   s    rK   )rJ   r   networkxr   r   rK   r   r   r   r   <module>   s
    L