
    Vh                     @    d Z ddlZddlZ G d d      Z G d d      Zy)zIUnit tests for the :mod:`networkx.algorithms.centrality.reaching` module.    Nc                   X    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)TestGlobalReachingCentralityz7Unit tests for the global reaching centrality function.c                     t        j                  t        j                        5  t        j                         }t        j
                  |d       d d d        y # 1 sw Y   y xY w)Nweightr   )pytestraisesnxNetworkXErrorDiGraphglobal_reaching_centralityselfGs     b/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/test_reaching.pytest_non_positive_weightsz6TestGlobalReachingCentrality.test_non_positive_weights   sD    ]]2++, 	>

A))!H=	> 	> 	>s   ,AA"c                     t        j                  t        j                        5  t        j                         }|j                  ddg       t        j                  |d       d d d        y # 1 sw Y   y xY w)Nr      r      r   r   r   )r   r	   r
   r   Graphadd_weighted_edges_fromr   r   s     r   test_negatively_weightedz5TestGlobalReachingCentrality.test_negatively_weighted   sW    ]]2++, 	>
A%%z:&>?))!H=	> 	> 	>   ?A,,A5c                     t        j                         }|j                  ddg       t         j                  } ||dd      dk(  sJ  ||      dk(  sJ y )N)r   r         ?)r      r   Fr   
normalizedr   r   r   r
   r   r   r   r   r   grcs      r   test_directed_starz/TestGlobalReachingCentrality.test_directed_star   sR    JJL	!!;"<=++1x8C???1v{{    c                 n    t        j                  d      }t         j                  } ||dd       dk(  sJ y )Nr   Fr          ?)r
   
star_graphr   r#   s      r   test_undirected_unweighted_starz<TestGlobalReachingCentrality.test_undirected_unweighted_star   s2    MM!++1t4<<<r&   c                     t        j                         }|j                  ddg       t         j                  } ||dd      dk(  sJ y )Nr   r   r   r   Fr   r    g      ?)r
   r   r   r   r#   s      r   test_undirected_weighted_starz:TestGlobalReachingCentrality.test_undirected_weighted_star"   sB    HHJ	!!9i"89++1x8EAAAr&   c                     t        j                         }|j                  dd       |j                  dd       t        j                  |d       dk(  sJ y Nr   r   r   r   )r
   r   add_edger   r   s     r   test_cycle_directed_unweightedz;TestGlobalReachingCentrality.test_cycle_directed_unweighted(   sD    JJL	

1a	

1a,,Qt<AAAr&   c                     t        j                         }|j                  dd       t        j                  |d       dk(  sJ y r/   r
   r   r0   r   r   s     r    test_cycle_undirected_unweightedz=TestGlobalReachingCentrality.test_cycle_undirected_unweighted.   s6    HHJ	

1a,,Qt<AAAr&   c                     t        j                         }|j                  ddg       t        j                  |      dk(  sJ y )Nr   )r   r   r   r   r"   r   s     r   test_cycle_directed_weightedz9TestGlobalReachingCentrality.test_cycle_directed_weighted3   s9    JJL	!!9i"89,,Q/1444r&   c                     t        j                         }|j                  ddd       t         j                  } ||d      dk(  sJ y )Nr   r   r   F)r!   r   r3   r#   s      r   test_cycle_undirected_weightedz;TestGlobalReachingCentrality.test_cycle_undirected_weighted8   s?    HHJ	

1a
"++1'1,,,r&   c                    t        j                         }|j                  ddd       |j                  ddd       |j                  ddd       |j                  dd	d       t        |      dz
  }t	        g d
      |z  }t	        g d      |z  }d}t	        dg      |z  }d}|||||g}t        |      t	        fd|D              |z  }	t         j                  }
 |
|dd      }|	t        j                  |d      k(  sJ y )NAB   r   Cr   Dr(   E)r<   r   g      @g` @)r   r(   g      ?r   c              3   (   K   | ]	  }|z
    y w)N ).0lrc	max_locals     r   	<genexpr>zFTestGlobalReachingCentrality.test_directed_weighted.<locals>.<genexpr>N   s     C3y3Cs   Fr   r    gHz>)abs)	r
   r   r0   lensummaxr   r   approx)r   r   denomA_localB_localC_localD_localE_locallocal_reach_ctrsexpectedr$   actualrD   s               @r   test_directed_weightedz3TestGlobalReachingCentrality.test_directed_weighted>   s   JJL	

3A
&	

3A
&	

3D
)	

3A
&A
45=&'%/qc(U"#WgwH()	C2BCCeK++Q5:6==T::::r&   c                     t        j                  dg      }t        j                  t         j                  d      5  t        j
                  |       d d d        y # 1 sw Y   y xY w)Nr   r   local_reaching_centralitymatch)r
   r   r   r	   r   r   r   s     r   test_single_node_with_cyclez8TestGlobalReachingCentrality.test_single_node_with_cycleS   sJ    JJx ]]2++3NO 	-))!,	- 	- 	-s   AA$c                     t        j                         }|j                  dg       t        j                  t         j
                  d      5  t        j                  |d       d d d        y # 1 sw Y   y xY w)Nr   r   r   rW   rX   r   r   )r
   r   r   r   r	   r   r   r   s     r   $test_single_node_with_weighted_cyclezATestGlobalReachingCentrality.test_single_node_with_weighted_cycleX   sW    JJL	!!9+.]]2++3NO 	>))!H=	> 	> 	>s   A--A6N)__name__
__module____qualname____doc__r   r   r%   r*   r-   r1   r4   r6   r8   rT   rZ   r]   rA   r&   r   r   r      sD    A>
>=
BBB
5
-;*-
>r&   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
TestLocalReachingCentralityz6Unit tests for the local reaching centrality function.c                     t        j                  t        j                        5  t        j                         }|j                  dg       t        j                  |dd       d d d        y # 1 sw Y   y xY w)N)r   r   r   r   r   r   )r   r	   r
   r   r   r   rW   r   s     r   r   z5TestLocalReachingCentrality.test_non_positive_weightsb   sZ    ]]2++, 	@

A%%yk2((Ah?	@ 	@ 	@r   c                     t        j                  t        j                        5  t        j                         }|j                  ddg       t        j                  |dd       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   )r   r	   r
   r   r   r   rW   r   s     r   r   z4TestLocalReachingCentrality.test_negatively_weightedh   s]    ]]2++, 	@
A%%z:&>?((Ah?	@ 	@ 	@s   A A--A6c                 p    t        j                  d      }t         j                  } ||dd d      dk(  sJ y )Nr   r   F)r   r!   g      ?)r
   r)   rW   r#   s      r   r*   z;TestLocalReachingCentrality.test_undirected_unweighted_starn   s4    MM!**1a74???r&   c                     t        j                         }|j                  ddg       t        j                  |ddd      }|dk(  sJ y )Nr   r,   r   Fr   r    g      ?r
   r   r   rW   r   r   
centralitys      r   r-   z9TestLocalReachingCentrality.test_undirected_weighted_stars   sI    HHJ	!!9i"8911qU8

 S   r&   c                     t        j                         }|j                  ddg       t        j                  |ddd      }|dk(  sJ y )Nr   r,   r   Tr   r    g      ?rh   ri   s      r   #test_undirected_weighted_normalizedz?TestLocalReachingCentrality.test_undirected_weighted_normalized{   sI    HHJ	!!9i"8911qT(

 S   r&   c                     t        j                  dg      }t        j                  t         j                  d      5  t        j
                  |d       d d d        y # 1 sw Y   y xY w)NrV   rW   rX   r   )r
   r   r   r	   r   rW   r   s     r   rZ   z7TestLocalReachingCentrality.test_single_node_with_cycle   sL    JJx ]]2++3NO 	/((A.	/ 	/ 	/s   AA%c                     t        j                         }|j                  dg       t        j                  t         j
                  d      5  t        j                  |dd       d d d        y # 1 sw Y   y xY w)Nr\   rW   rX   r   r   r   )r
   r   r   r   r	   r   rW   r   s     r   r]   z@TestLocalReachingCentrality.test_single_node_with_weighted_cycle   s]    JJL	!!9+.]]2++3NO 	@((Ah?	@ 	@ 	@s   A..A7N)r^   r_   r`   ra   r   r   r*   r-   rl   rZ   r]   rA   r&   r   rc   rc   _   s,    @@@@
!!/
@r&   rc   )ra   r   networkxr
   r   rc   rA   r&   r   <module>rp      s'    O  T> T>n-@ -@r&   