
    Vhyp                         d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d Z G d d      Z G d d	      Z G d
 d      Z G d d      Z G d d      Z G d d      Zy)    N)Random)convert_node_labels_to_integers)_extrema_boundingc                      t        j                  d      } t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   y xY w)N   zcompute must be one of)matchspam)compute)nx
path_graphpytestraises
ValueErrorr   )Gs    `/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_measures.py,test__extrema_bounding_invalid_compute_kwargr      s>    
aA	z)A	B -!V,- - -s   AAc                      e Zd Zd Zej
                  j                  d e ed                  ej
                  j                  d e edd                  ej
                  j                  d eddd      D  cg c]  }|dz  	 c}}       d	                      Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej
                  j                  d edd            ej
                  j                  d edd            d               Zd Zej
                  j                  dg d      d        Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Zy%c c}} w )&TestDistancec                 R    t        t        j                  dd      dd      | _        y )N      sorted)first_labelordering)cnltir   grid_2d_graphr   selfs    r   setup_methodzTestDistance.setup_method   s    r''1-1xP    seed
   n   probr      c                    t         j                  t         j                  t         j                  t         j                  g}g d}t        |      }t        j                  t        j                  ||      t        j                  |||            }|D ]i  } ||       ||d      k(  sJ |D ]M  }	|j                         D ]   \  }
}|j                  d|	      ||
   |   d<   "  ||d       ||dd      k(  rMJ  k y	)
a  Test for consistency of distance metrics when using usebounds=True.

        We validate consistency for `networkx.diameter`, `networkx.radius`, `networkx.periphery`
        and `networkx.center` when passing `usebounds=True`. Expectation is that method
        returns the same result whether we pass usebounds=True or not.

        For this we generate random connected graphs and validate method returns the same.
        )   r"   i  r!   T	useboundsr   wweight)r.   r+   N)r   diameterradius	peripherycenterr   composerandom_labeled_treeerdos_renyi_graphedgesrandint)r   r!   r#   r%   metrics
max_weightrngr   metricr,   uvs               r   "test_use_bounds_on_off_consistencyz/TestDistance.test_use_bounds_on_off_consistency   s     ;;		2<<C"
TlJJ""13/  Ds3
  	VF!9qD 9999 VGGI 5DAq#&;;q!#4AaDGCL5 a,qPT0UUUU	V	Vr    c                    t        j                  | j                  d      dk(  sJ t        j                  | j                        }|d   dk(  sJ t        t        j                  | j                              }t        j                  | j                  |      }|d   dk(  sJ t        j                  | j                  d      }|dk(  sJ t        j                  | j                  ddg      }|d   dk(  sJ t        j                  | j                  ddg      }|d   dk(  sJ t        j
                  d      }t        j                  |      }|d   dk(  sJ t        j                  |d      }|dk(  sJ t        j                  t         j                  t         j                  |d       t        j                         }t        j                  |      }|i k(  sJ y )Nr      sp)r=   r&   r   )
r   eccentricityr   dictshortest_path_lengthr   r   r   NetworkXErrorempty_graph)r   erB   r   s       r   test_eccentricityzTestDistance.test_eccentricity3   s{   tvvq)Q...OODFF#tqyy"))$&&12OODFFr*tqyyOODFFa(Avv OODFFq!f-tqyyOODFFq!f-tqyy MM!OOAtqyyOOA#Avvb&&A> NNOOABwwr    c                 L    t        j                  | j                        dk(  sJ y )Nr@   r   r/   r   r   s    r   test_diameterzTestDistance.test_diameterR   s    {{466"a'''r    c                     t        j                  | j                        t        j                  d      k(  sJ t        j                  t        j
                  d            t        j                  d      k(  sJ y )NgMa @r   RTU?)r   harmonic_diameterr   r   approx
star_graphr   s    r   test_harmonic_diameterz#TestDistance.test_harmonic_diameterU   sT    ##DFF+v}}=O/PPPP##BMM!$45x9PPPPr    c                 |    t        j                  t        j                  t        j                                     sJ y Nmathisnanr   rO   rG   r   s    r   test_harmonic_diameter_emptyz)TestDistance.test_harmonic_diameter_emptyY   s&    zz"..r~~/?@AAAr    c                 ~    t        j                  t        j                  t        j                  d                  sJ y )Nr   rU   r   s    r   "test_harmonic_diameter_single_nodez/TestDistance.test_harmonic_diameter_single_node\   (    zz"..r~~a/@ABBBr    c                 ~    t        j                  t        j                  t        j                  d                  sJ y )Nr   )rV   isinfr   rO   rG   r   s    r   test_harmonic_diameter_discretez,TestDistance.test_harmonic_diameter_discrete_   r[   r    c                     t        j                         }|j                  dd       t        j                  |      dk(  sJ y )Nr   r   r&   )r   DiGraphadd_edgerO   r   DGs     r   -test_harmonic_diameter_not_strongly_connectedz:TestDistance.test_harmonic_diameter_not_strongly_connectedb   s4    ZZ\
Aq##B'1,,,r    c                 P   t        j                  d      }|j                  t        |j                        D cg c]  \  }}g |d c}}d       t        j
                  |      t        j                  d      k(  sJ t        j
                  |d      t        j                  d      k(  sJ |j                  t        |j                        D cg c]  \  }}g || c}}d       t        j
                  |d      t        j                  d      k(  sJ y c c}}w c c}}w )Nr   r   r.   rN   r-   distg?)r   rQ   add_weighted_edges_from	enumerater6   rO   r   rP   )r   r   irH   s       r   %test_harmonic_diameter_weighted_pathsz2TestDistance.test_harmonic_diameter_weighted_pathsg   s    MM!	!!y7I"Jtq!7Q77"JHU##A&&--*AAAA##Ah76==;RRRR 	
!!y7I"Jtq!7Q77"JFS##Af5s9KKKK #K
 #Ks   D
D"
c                 L    t        j                  | j                        dk(  sJ y )Nr   r   r0   r   r   s    r   test_radiuszTestDistance.test_radiusr   s    yy A%%%r    c                 b    t        t        j                  | j                              h dk(  sJ y )N   r   r         setr   r1   r   r   s    r   test_peripheryzTestDistance.test_peripheryu   s"    2<<'(N:::r    c                 j    t        j                  g d      }t        j                  |      ddgk(  sJ y )N)r   r&   r   r   )r&   r   )r&   r(   r   r&   )r   Graphr2   r   r   s     r   test_center_simple_treez$TestDistance.test_center_simple_treex   s+    HH56yy|1v%%%r    rr(   hr   c                 f    t        j                  ||      }t        j                  |      dgk(  sJ y )Nr   )r   balanced_treer2   )r   r{   r|   r   s       r   test_center_balanced_treez&TestDistance.test_center_balanced_tree|   s.     Q"yy|s"""r    c                 b    t        t        j                  | j                              h dk(  sJ y )N   r@      r"      rs   r   r2   r   r   s    r   test_centerzTestDistance.test_center   s"    299TVV$%777r    )r   r&   c   d   c                     t        j                  |      }|dz
  dz  t        j                  |dz
  dz        h}t	        t        j
                  |            |k(  sJ y )Nr   r&   )r   r   rV   ceilrs   r2   )r   r#   r   expecteds       r   test_center_path_graphsz$TestDistance.test_center_path_graphs   sN    MM!UqL$))QUaK"89299Q< H,,,r    c                 P    t        j                  | j                  d      dk(  sJ y )NTr*   r@   rK   r   s    r   test_bound_diameterz TestDistance.test_bound_diameter   s    {{466T2a777r    c                 P    t        j                  | j                  d      dk(  sJ y )NTr*   r   rl   r   s    r   test_bound_radiuszTestDistance.test_bound_radius   s    yy40A555r    c                 j    h d}t        t        j                  | j                  d            |k(  sJ y )Nro   Tr*   rr   r   results     r   test_bound_peripheryz!TestDistance.test_bound_periphery   s)    2<<$78FBBBr    c                 j    h d}t        t        j                  | j                  d            |k(  sJ y )Nr   Tr*   r   r   s     r   test_bound_centerzTestDistance.test_bound_center   s)    299TVVt45???r    c                     t        j                         }|j                  dd       |j                  dd       t        j                  t         j
                  t         j                  |       y )Nr   r&   r   r   )r   rx   ra   r   r   rF   r/   ry   s     r   test_radius_exceptionz"TestDistance.test_radius_exception   sC    HHJ	

1a	

1ab&&Q7r    c                     t        j                  t        j                        5  t        j                  ddg      }t        j
                  |      }d d d        y # 1 sw Y   y xY wNrv   r   r   r   r   r   rF   rx   rC   r   r   rH   s      r   test_eccentricity_infinitez'TestDistance.test_eccentricity_infinite   sJ    ]]2++, 	#&&)*A"A	# 	# 	#   -AA#c                     t        j                  t        j                        5  t        j                  ddg      }t        j
                  |d      }d d d        y # 1 sw Y   y xY w)Nrv   r   r   rA   r   r   s      r   *test_eccentricity_undirected_not_connectedz7TestDistance.test_eccentricity_undirected_not_connected   sL    ]]2++, 	)&&)*Aa(A	) 	) 	)s   /AA%c                     t        j                  t        j                        5  t        j                  ddg      }t        j
                  |       d d d        y # 1 sw Y   y xY w)Nrv   rw   )r   r   r   rF   r`   rC   rb   s     r   +test_eccentricity_directed_weakly_connectedz8TestDistance.test_eccentricity_directed_weakly_connected   sH    ]]2++, 	 VV,-BOOB	  	  	 r   N) __name__
__module____qualname__r   r   markparametrizelistranger>   rI   rL   rR   rX   rZ   r^   rd   rj   rm   rt   rz   r   r   r   r   r   r   r   r   r   r   r   ).0xs   00r   r   r      sm   Q [[VT%)_5[[S$uR}"56[[VeAr1o%Fa"f%FGV H 7 6V4>(QBCC-
	L&;& [[S%1+.[[S%1+.# / /#8 [[S/2- 3-
86C@8#
)
 c &Gs   :Er   c                       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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d Zy)TestWeightedDistancec                 R   t        j                         }|j                  ddddd       |j                  ddddd       |j                  ddd	d	d       |j                  dd
ddd       |j                  ddddd       |j                  ddddd       || _        d | _        y )Nr   r   g333333?r@   )r.   cost	high_costr&   g?r   g?r   gffffff?r   r(   ?	   g333333?c                      yNr&    )r=   r<   rH   s      r   <lambda>z3TestWeightedDistance.setup_method.<locals>.<lambda>   s    r    )r   rx   ra   r   	weight_fnry   s     r   r   z!TestWeightedDistance.setup_method   s    HHJ	

1a#
;	

1a#
;	

1a#
;	

1a#
;	

1a#
;	

1a#
;*r    c                    t        j                  | j                  dd       dk(  sJ t        j                  | j                  d       }|d   dk(  sJ t        j                  | j                  dd       }|dk(  sJ t        j                  | j                  ddgd       }|d   dk(  sJ t        j                  | j                  ddgd       }|d   dk(  sJ y )Nr   r-   r   r=   r.   r&   r   rC   r   r   rH   s     r   test_eccentricity_weight_Nonez2TestWeightedDistance.test_eccentricity_weight_None   s    tvvq6!;;;OODFF40tqyyOODFFa5Avv OODFFq!fT:tqyyOODFFq!fT:tqyyr    c                 N   t        j                  | j                  dd      dk(  sJ t        j                  | j                  d      }|t        j                  | j                  d      cxk(  r%t        j                  | j                  d      k7  sJ  J |d   dk(  sJ t        j                  | j                  dd      }|dk(  sJ t        j                  | j                  ddgd      }|d   dk(  sJ t        j                  | j                  ddgd      }|d   dk(  sJ y )	Nr   r.   r-         ?r   r   r   r&   r   r   s     r   test_eccentricity_weight_attrz2TestWeightedDistance.test_eccentricity_weight_attr   s   tvvq:cAAAOODFF84tvvf5;tvvk:;	
;	
; ts{{OODFFa9Cxx OODFFq!fX>ts{{OODFFq!fX>ts{{r    c                    t        j                  | j                  d| j                        dk(  sJ t        j                  | j                  | j                        }|d   dk(  sJ t        j                  | j                  d| j                        }|dk(  sJ t        j                  | j                  ddg| j                        }|d   dk(  sJ t        j                  | j                  ddg| j                        }|d   dk(  sJ y )Nr   r-   r@   r   r&   )r   rC   r   r   r   s     r   test_eccentricity_weight_fnz0TestWeightedDistance.test_eccentricity_weight_fn   s    tvvq@AEEEOODFF4>>:tqyyOODFFa?Avv OODFFq!fT^^DtqyyOODFFq!fT^^Dtqyyr    c                 P    t        j                  | j                  d       dk(  sJ y )Nr-   r   rK   r   s    r   test_diameter_weight_Nonez.TestWeightedDistance.test_diameter_weight_None   s    {{466$/1444r    c                     t        j                  | j                  d      t        j                  | j                  d      cxk(  r+dcxk(  r%t        j                  | j                  d      k7  sJ  J y )Nr.   r-   r   皙?r   rK   r   s    r   test_diameter_weight_attrz.TestWeightedDistance.test_diameter_weight_attr   s`    KKx0{{466&177 {{466+67	
7	
7r    c                 d    t        j                  | j                  | j                        dk(  sJ y )Nr-   r@   r   r/   r   r   r   s    r   test_diameter_weight_fnz,TestWeightedDistance.test_diameter_weight_fn   s#    {{466$..9Q>>>r    c                 v    t        j                  t        j                  | j                  d             dk(  sJ y )Nr-   r&   r   rP   r   r0   r   r   s    r   test_radius_weight_Nonez,TestWeightedDistance.test_radius_weight_None   s(    }}RYYtvvd;<AAAr    c                 6   t        j                  t        j                  | j                  d            t        j                  t        j                  | j                  d            cxk(  r+dcxk(  r%t        j                  | j                  d      k7  sJ  J y )Nr.   r-   r   r   r   r   r   s    r   test_radius_weight_attrz,TestWeightedDistance.test_radius_weight_attr   sr    MM"))DFF8<=}}RYYtvvf=>55 yy45	
5	
5r    c                 d    t        j                  | j                  | j                        dk(  sJ y )Nr-   r   r   r0   r   r   r   s    r   test_radius_weight_fnz*TestWeightedDistance.test_radius_weight_fn  s#    yy71<<<r    c                     t        t        j                  | j                  d             D ]H  }t        j                  | j                  |d       t        j
                  | j                  d       k(  rHJ  y Nr-   rs   r   r1   r   rC   r/   r   r=   s     r   test_periphery_weight_Nonez/TestWeightedDistance.test_periphery_weight_None  s\    R\\$&&67 	A??4661T:bkkt?   	r    c                 t   t        t        j                  | j                  d            }|t        t        j                  | j                  d            cxk(  r.t        t        j                  | j                  d            k(  sJ  J |D ](  }t        j                  | j                  |d      t        j                  | j                  |d      cxk7  rt        j                  | j                  |d      cxk(  rot        j
                  | j                  d      cxk(  rJt        j
                  | j                  d      cxk(  r%t        j
                  | j                  d      k7  sJ  J t        j                  | j                  |d      t        j
                  | j                  d      k(  r)J  y Nr.   r-   r   r   r   )r   r1   r=   s      r   test_periphery_weight_attrz/TestWeightedDistance.test_periphery_weight_attr  sZ   TVVH=>	2<<v67=2<<{;<=	
=	
=  	A+>??4661X>;??4661V<; ;;tvvh7; ;;tvvf5	;
 ;;tvvk:;;; ??4661[AR[[{F   	r    c                 *   t        t        j                  | j                  | j                              D ]\  }t        j
                  | j                  || j                        t        j                  | j                  | j                        k(  r\J  y r   )rs   r   r1   r   r   rC   r/   r   s     r   test_periphery_weight_fnz-TestWeightedDistance.test_periphery_weight_fn   si    R\\$&&@A 	A??4661T^^Dt~~I   	r    c                    t        t        j                  | j                  d             D ][  }t	        j
                  t        j                  | j                  |d             t        j                  | j                  d       k(  r[J  y r   )rs   r   r2   r   r   rP   rC   r0   r   s     r   test_center_weight_Nonez,TestWeightedDistance.test_center_weight_None&  sf    RYYtvvd34 	A==4!HIRYYtN   	r    c           	         t        t        j                  | j                  d            }|t        t        j                  | j                  d            cxk(  r.t        t        j                  | j                  d            k7  sJ  J |D ]N  }t        j                  | j                  |d      t        j                  t        j                  | j                  |d            cxk7  rt        j                  t        j                  | j                  |d            cxk(  rot        j                  | j                  d      cxk(  rJt        j                  | j                  d      cxk(  r%t        j                  | j                  d      k7  sJ  J t        j                  | j                  |d      t        j                  | j                  d      k(  rOJ  y r   )rs   r   r2   r   rC   r   rP   r0   )r   r2   r=   s      r   test_center_weight_attrz,TestWeightedDistance.test_center_weight_attr,  sl   RYYtvvh78299TVVF34:299TVVK89:	
:	
:  	A+>==8!LM9==6!JK9 99TVVH59 99TVVF3	9
 99TVVK8999 ??4661[ARYY{F   	r    c                 *   t        t        j                  | j                  | j                              D ]\  }t        j
                  | j                  || j                        t        j                  | j                  | j                        k(  r\J  y r   )rs   r   r2   r   r   rC   r0   r   s     r   test_center_weight_fnz*TestWeightedDistance.test_center_weight_fn@  si    RYYtvvdnn=> 	A??4661T^^D		t~~I   	r    c                 R    t        j                  | j                  dd       dk(  sJ y )NTr+   r.   r   rK   r   s    r   test_bound_diameter_weight_Nonez4TestWeightedDistance.test_bound_diameter_weight_NoneF  s!    {{466T$?1DDDr    c                    t        j                  | j                  dd      t        j                  | j                  dd      cxk7  rRt        j                  | j                  dd      cxk(  r,dcxk(  r&t        j                  | j                  dd      k7  sJ  J t        j                  | j                  dd      t        j                  | j                  dd      k(  sJ y )NTr   r   r.   r   r   rK   r   s    r   test_bound_diameter_weight_attrz4TestWeightedDistance.test_bound_diameter_weight_attrI  s    KK${C{{466T(CG{{466T&AG G {{466T+F	G	
G	
G {{466T+F"++FFd;K
 
 	
 
r    c                 f    t        j                  | j                  d| j                        dk(  sJ y )NTr   r@   r   r   s    r   test_bound_diameter_weight_fnz2TestWeightedDistance.test_bound_diameter_weight_fnU  s%    {{466T$..IQNNNr    c                 x    t        j                  t        j                  | j                  dd             dk(  sJ y )NTr   r&   r   r   s    r   test_bound_radius_weight_Nonez2TestWeightedDistance.test_bound_radius_weight_NoneX  s+    }}RYYtvvdKLPQQQQr    c                    t        j                  | j                  dd      t        j                  t        j                  | j                  dd            cxk7  ret        j                  t        j                  | j                  dd            cxk(  r,dcxk(  r&t        j                  | j                  dd      k7  sJ  J t        j                  | j                  dd      t        j                  | j                  dd      k(  sJ y )NTr   r   r.   r   r   )r   r0   r   r   rP   r   s    r   test_bound_radius_weight_attrz2TestWeightedDistance.test_bound_radius_weight_attr[  s    IIdff[A}}RYYtvvhOPE}}RYYtvvfMNE E yy4D	E	
E	
E yy4D		FFd;I
 
 	
 
r    c                 f    t        j                  | j                  d| j                        dk(  sJ y )NTr   r   r   r   s    r   test_bound_radius_weight_fnz0TestWeightedDistance.test_bound_radius_weight_fng  s%    yy4G1LLLr    c                 l    h d}t        t        j                  | j                  dd             |k(  sJ y N>   r   r   r   Tr   rr   r   s     r    test_bound_periphery_weight_Nonez5TestWeightedDistance.test_bound_periphery_weight_Nonej  s+    2<<$tDEOOOr    c                     ddh}t        t        j                  | j                  dd            t        t        j                  | j                  dd            cxk(  r|k(  sJ  J y )Nr   r(   Tr.   r   r   rr   r   s     r    test_bound_periphery_weight_attrz5TestWeightedDistance.test_bound_periphery_weight_attrn  s^    QTVVtHEF2<<$vFG	
	
r    c                     h d}t        t        j                  | j                  d| j                              |k(  sJ y r   )rs   r   r1   r   r   r   s     r   test_bound_periphery_weight_fnz3TestWeightedDistance.test_bound_periphery_weight_fnv  s2    TVVtDNNKLPVV	
Vr    c                 l    h d}t        t        j                  | j                  dd             |k(  sJ y N>   r   r&   r(   Tr   r   r   s     r   test_bound_center_weight_Nonez2TestWeightedDistance.test_bound_center_weight_None|  s+    299TVVtDABfLLLr    c                     dh}t        t        j                  | j                  dd            t        t        j                  | j                  dd            cxk(  r|k(  sJ  J y )Nr   Tr.   r   r   r   r   s     r   test_bound_center_weight_attrz2TestWeightedDistance.test_bound_center_weight_attr  s\    		$&&DBC299TVVtFCD	
	
r    c                     h d}t        t        j                  | j                  d| j                              |k(  sJ y r   )rs   r   r2   r   r   r   s     r   test_bound_center_weight_fnz0TestWeightedDistance.test_bound_center_weight_fn  s0    299TVVtDNNKLPVVVVr    N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r      s    	+&5
?B
=((E

OR

MP

M
Wr    r   c                   |    e Zd Ze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d Zd Zd Zy)TestResistanceDistancec                 X    t        j                  d      at        j                  d      }y Nnumpyscipyr   importorskipnpclsrB   s     r   setup_classz"TestResistanceDistance.setup_class  $       )  )r    c                     t        j                         }|j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       || _        y Nr   r&   r-   r   r   r   rx   ra   r   ry   s     r   r   z#TestResistanceDistance.setup_method  s\    HHJ	

1a
"	

1a
"	

1a
"	

1a
"r    c                     t        j                         }t        j                  t         j                        5  t        j
                  |       d d d        y # 1 sw Y   y xY wrT   )r   r`   r   r   NetworkXNotImplementedresistance_distancery   s     r   'test_resistance_distance_directed_graphz>TestResistanceDistance.test_resistance_distance_directed_graph  sB    JJL]]2445 	&""1%	& 	& 	&   AA c                     t        j                         }t        j                  t         j                        5  t        j
                  |       d d d        y # 1 sw Y   y xY wrT   )r   rx   r   r   rF   r  ry   s     r   test_resistance_distance_emptyz5TestResistanceDistance.test_resistance_distance_empty  sB    HHJ]]2++, 	&""1%	& 	& 	&r  c                     t        j                  t        j                        5  | j                  j                  d       t        j                  | j                  dd       d d d        y # 1 sw Y   y xY w)Nr(   r   )r   r   r   rF   r   add_noder  r   s    r   &test_resistance_distance_not_connectedz=TestResistanceDistance.test_resistance_distance_not_connected  sO    ]]2++, 	1FFOOA""4661a0	1 	1 	1s   =A**A3c                     t        j                  t        j                        5  t        j                  | j
                  dd       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   rF   r  r   r   s    r   +test_resistance_distance_nodeA_not_in_graphzBTestResistanceDistance.test_resistance_distance_nodeA_not_in_graph  ?    ]]2++, 	1""4661a0	1 	1 	1   "AAc                     t        j                  t        j                        5  t        j                  | j
                  dd       d d d        y # 1 sw Y   y xY w)Nr   r   r  r   s    r   +test_resistance_distance_nodeB_not_in_graphzBTestResistanceDistance.test_resistance_distance_nodeB_not_in_graph  r  r  c                     t        j                  | j                  dddd      }d}t        |d      t        |d      k(  sJ y )Nr   r   r.   T433333@r(   r   r  r   roundr   rd	test_datas      r   test_resistance_distancez/TestResistanceDistance.test_resistance_distance  s>    ##DFFAq(DA3	R|uY2222r    c                     t        j                  | j                  dddd      }d}t        |d      t        |d      k(  sJ y )Nr   r   r.   FgQ?r(   r   r"  s      r   test_resistance_distance_noinvz5TestResistanceDistance.test_resistance_distance_noinv  s>    ##DFFAq(EBC	R|uY2222r    c                 h    t        j                  | j                  dd      }t        |d      dk(  sJ y Nr   r   r(   r   r   r#  s     r   "test_resistance_distance_no_weightz9TestResistanceDistance.test_resistance_distance_no_weight  s.    ##DFFAq1R|q   r    c                     d| j                   d   d   d<   t        j                  | j                   dddd      }d}t        |d      t        |d      k(  sJ y )	Nr&   r   r.   r   Tg      r(   )r   r   r  r!  r"  s      r   #test_resistance_distance_neg_weightz:TestResistanceDistance.test_resistance_distance_neg_weight  sT    !#q	!X##DFFAq(DA4	R|uY2222r    c                 .   t        j                         }|j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       t        j                  |dddd      }t        j                  |d      sJ y )	Nr   r&   r-   r   r   r.   Tr  )r   
MultiGraphra   r  r  isclose)r   r   r#  s      r   test_multigraphz&TestResistanceDistance.test_multigraph  s    MMO	

1a
"	

1a
"	

1a
"	

1a
"##Aq!Xt<zz"=>>>r    c                     t        j                  t              5  d| j                  d   d   d<   t	        j
                  | j                  ddd       d d d        y # 1 sw Y   y xY w)Nr   r   r&   r.   r   )r   r   ZeroDivisionErrorr   r   r  r   s    r   test_resistance_distance_div0z4TestResistanceDistance.test_resistance_distance_div0  sR    ]],- 	;%&DFF1IaL"""4661a:	; 	; 	;s   8AA$c                 P    t        j                  | j                  dd      dk(  sJ y )Nr   r   )r   r  r   r   s    r   "test_resistance_distance_same_nodez9TestResistanceDistance.test_resistance_distance_same_node  s#    %%dffa3q888r    c                 J   t        j                  | j                  d      }i }d|d<   d|d<   d|d<   d|d<   t        |t              sJ t        |j                               t        |j                               k(  sJ |D ]   }t        j                  ||   ||         r J  y )Nr   )nodeAr         ?r&   r   r   	r   r  r   
isinstancerD   r   keysr  r1  r   r#  r$  keys       r   #test_resistance_distance_only_nodeAz:TestResistanceDistance.test_resistance_distance_only_nodeA      ##DFF!4		!	!	!	!"d###bggi F9>>+;$<<<< 	7C::bgy~666	7r    c                 J   t        j                  | j                  d      }i }d|d<   d|d<   d|d<   d|d<   t        |t              sJ t        |j                               t        |j                               k(  sJ |D ]   }t        j                  ||   ||         r J  y )Nr   )nodeBr   r:  r&   r   r   r;  r>  s       r   #test_resistance_distance_only_nodeBz:TestResistanceDistance.test_resistance_distance_only_nodeB  rA  r    c                     t        j                  | j                        }t        |t              sJ t        |d   d   d      dk(  sJ y r)  )r   r  r   r<  rD   r!  r*  s     r   test_resistance_distance_allz3TestResistanceDistance.test_resistance_distance_all  sC    ##DFF+"d###RU1Xq!Q&&&r    N)r   r   r   classmethodr  r   r  r  r  r  r  r%  r'  r+  r.  r2  r5  r7  r@  rD  rF  r   r    r   r   r     sd    * *
&
&
1
113
3
!3?;
9
7
7'r    r   c                   d    e Zd Ze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)TestEffectiveGraphResistancec                 X    t        j                  d      at        j                  d      }y r   r  r  s     r   r  z(TestEffectiveGraphResistance.setup_class  r	  r    c                     t        j                         }|j                  ddd       |j                  ddd       |j                  ddd       || _        y r  r  ry   s     r   r   z)TestEffectiveGraphResistance.setup_method  sJ    HHJ	

1a
"	

1a
"	

1a
"r    c                     t        j                         }t        j                  t         j                        5  t        j
                  |       d d d        y # 1 sw Y   y xY wrT   )r   r`   r   r   r  effective_graph_resistancery   s     r   .test_effective_graph_resistance_directed_graphzKTestEffectiveGraphResistance.test_effective_graph_resistance_directed_graph  sB    JJL]]2445 	-))!,	- 	- 	-r  c                     t        j                         }t        j                  t         j                        5  t        j
                  |       d d d        y # 1 sw Y   y xY wrT   )r   rx   r   r   rF   rM  ry   s     r   %test_effective_graph_resistance_emptyzBTestEffectiveGraphResistance.test_effective_graph_resistance_empty	  sB    HHJ]]2++, 	-))!,	- 	- 	-r  c                     t        j                  ddg      }t        j                  |      }t        j	                  |      sJ y r   )r   rx   rM  r  r]   )r   r   RGs      r   -test_effective_graph_resistance_not_connectedzJTestEffectiveGraphResistance.test_effective_graph_resistance_not_connected  s5    HHff%&**1-xx||r    c                     t        j                  | j                  dd      }d}d}d}t        j	                  |||z   |z         sJ y )Nr.   Tgm۶m?gܶm۶m?g۶m۶m?r   rM  r   r  r1  r   rR  rd12rd13rd23s        r   test_effective_graph_resistancez<TestEffectiveGraphResistance.test_effective_graph_resistance  sF    **4668TB(((zz"dTkD0111r    c                     t        j                  | j                  dd      }d}d}d}t        j	                  |||z   |z         sJ y )Nr.   Fgm۶m?g۶m۶m?gܶm۶m?rU  rV  s        r   %test_effective_graph_resistance_noinvzBTestEffectiveGraphResistance.test_effective_graph_resistance_noinv  sF    **4668UC666zz"dTkD0111r    c                 r    t        j                  | j                        }t        j	                  |d      sJ y r   rU  )r   rR  s     r   )test_effective_graph_resistance_no_weightzFTestEffectiveGraphResistance.test_effective_graph_resistance_no_weight!  s*    **4662zz"a   r    c                     d| j                   d   d   d<   t        j                  | j                   dd      }d}d}d}t        j	                  |||z   |z         sJ y )	Nr-  r&   r   r.   Tg@g     (@g       @)r   r   rM  r  r1  rV  s        r   *test_effective_graph_resistance_neg_weightzGTestEffectiveGraphResistance.test_effective_graph_resistance_neg_weight%  s\    !#q	!X**4668TB)+)zz"dTkD0111r    c                    t        j                         }|j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       t        j                  |dd      }d}ddd|z   z  dz   z  }dd	d|z  z   z  }ddd|z   z  d
z   z  }t        j                  |||z   |z         sJ y )Nr   r&   r-   r   r.   Tr:        ?gUUUUUU?g      ?)r   r0  ra   rM  r  r1  )r   r   rR  edge23rW  rX  rY  s          r   *test_effective_graph_resistance_multigraphzGTestEffectiveGraphResistance.test_effective_graph_resistance_multigraph-  s    MMO	

1a
"	

1a
"	

1a
"	

1a
"**1h=$AV$u,-K!f*,-AV$u,-zz"dTkD0111r    c                     t        j                  t              5  d| j                  d   d   d<   t	        j
                  | j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   r&   r.   )r   r   r4  r   r   rM  r   s    r   $test_effective_graph_resistance_div0zATestEffectiveGraphResistance.test_effective_graph_resistance_div0:  sN    ]],- 	<%&DFF1IaL"))$&&(;	< 	< 	<s   6AA"c                     d}t        j                  |      }t        j                  |      }t        j	                  ||dz
        sJ y )Nr"   r   )r   complete_graphrM  r  r1  r   Nr   rR  s       r   .test_effective_graph_resistance_complete_graphzKTestEffectiveGraphResistance.test_effective_graph_resistance_complete_graph?  s?    a **1-zz"a!e$$$r    c                     d}t        j                  |      }t        j                  |      }t        j	                  ||dz
  |z  |dz   z  dz        sJ y )Nr"   r   r@   )r   r   rM  r  r1  ri  s       r   *test_effective_graph_resistance_path_graphzGTestEffectiveGraphResistance.test_effective_graph_resistance_path_graphE  sO    MM!**1-zz"q1ukQU3q8999r    N)r   r   r   rG  r  r   rN  rP  rS  rZ  r\  r^  r`  rd  rf  rk  rm  r   r    r   rI  rI    sP    * *
-
-

22!22<
%:r    rI  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestBarycenterz>Test :func:`networkx.algorithms.distance_measures.barycenter`.c                     t        j                  |fi |}t        |t              sJ t	        |      t	        |      k  sJ |j                  |      S )z2Return the subgraph induced on the barycenter of g)r   
barycenterr<  r   rs   subgraph)r   gkwargsbs       r   barycenter_as_subgraphz%TestBarycenter.barycenter_as_subgraphO  sI    MM!&v&!T"""1vQzz!}r    c                     t        j                  t        j                  t        j                  t        j
                  d             y Nr(   )r   r   r   NetworkXNoPathrq  rG   r   s    r   test_must_be_connectedz%TestBarycenter.test_must_be_connectedV  s%    b''q8IJr    c                    t        j                  d      }t        t        j                  |            }t        j                  ||      t        |      k(  sJ |j                  j                         D ]  \  }}}d|d<    t        j                  t        t         j                  ||d       |d   d= t        j                  t         j                  t         j                  ||       y )Nr(   rA   r   r.   )rB   r.   r   )r   rh  rD   rE   rq  r   r6   datar   r   r   ry  )r   K_5rB   r<   r=   r|  s         r   test_sp_kwargzTestBarycenter.test_sp_kwargY  s    ""))#./}}SR(DI555 ))..* 	JAq$DN	j"--HM qE!Hb''Cr    c                 <   t        d      }t        d      D ]  }t        j                  |j	                  dd      |      }| j                  |      }t        |      dk(  r|j                         dk(  r]J t        |      dk(  sJ |j                         dk(  rJ  y)	z_The barycenter of a tree is a single vertex or an edge.

        See [West01]_, p. 78.
        l   >[= 2   r   K   r)   r&   r   N)r   r   r   r4   r7   rv  lensize)r   prngri   RTru  s        r   
test_treeszTestBarycenter.test_treesh  s    
 j!r 	%A''Q(;$GB++B/A1v{vvx1}$}1v{"{vvx1}$}	%r    c                 L   t        j                  dgddgddgddgg ddgdgdgdgdgd
      }| j                  |d	      }t        |      dgk(  sJ |j                  rJ d
d
d
d
d
dddddd
}|j                         D ]  \  }}|j                  |   d   |k(  rJ  |j                  D ]  }d|j                  |   d<    | j                  |dd      }t        |      dgk(  sJ |j                  rJ |j                         D ]  \  }}|j                  |   d   |dz  k(  rJ  y)z9Test the tree pictured at the bottom of [West01]_, p. 78.ru  ar   yz)r  r   r   r&   r   r   )
r  ru  r   r  r  r   r   r&   r   r   barycentricity)attr   #               )
r   r   r&   r   r   r  ru  r   r  r  r&   r.   barycentricity2)r.   r  N)r   rx   rv  r   r6   itemsnodes)r   rs  ru  expected_barycentricitynoder  edges          r   test_this_one_specific_treez*TestBarycenter.test_this_one_specific_treew  s   HHU3Z3Z3Z)55555
 ''0@'AAw3%77{#
 %<$A$A$C 	E D.774=!12nDDD	E GG 	(D&'AGGDM(#	(''(AR'SAw3%77{$;$A$A$C 	J D.774=!23~7IIII	Jr    N)	r   r   r   __doc__rv  rz  r~  r  r  r   r    r   ro  ro  L  s!    HKD%)Jr    ro  c                   d    e Zd Ze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)TestKemenyConstantc                 X    t        j                  d      at        j                  d      }y r   r  r  s     r   r  zTestKemenyConstant.setup_class  r	  r    c                     t        j                         }d}d}d}|j                  dd|       |j                  dd|       |j                  dd|       || _        y )Nr&   r   r   r   r-   r  r   r   w12w13w23s        r   r   zTestKemenyConstant.setup_method  sY    HHJ	

1a
$	

1a
$	

1a
$r    c                 2   t        j                         }|j                  dd       |j                  dd       |j                  dd       t        j                  t         j
                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r&   r   )r   r`   ra   r   r   r  kemeny_constantry   s     r   test_kemeny_constant_directedz0TestKemenyConstant.test_kemeny_constant_directed  sl    JJL	

1a	

1a	

1a]]2445 	"q!	" 	" 	"s   .BBc                     | j                   j                  d       t        j                  t        j
                        5  t	        j                  | j                          d d d        y # 1 sw Y   y xY wrx  )r   r  r   r   r   rF   r  r   s    r   "test_kemeny_constant_not_connectedz5TestKemenyConstant.test_kemeny_constant_not_connected  sK    ]]2++, 	'tvv&	' 	' 	's    A((A1c                     t        j                         }t        j                  t         j                        5  t        j
                  |       d d d        y # 1 sw Y   y xY wrT   )r   rx   r   r   rF   r  ry   s     r   test_kemeny_constant_no_nodesz0TestKemenyConstant.test_kemeny_constant_no_nodes  sB    HHJ]]2++, 	"q!	" 	" 	"r  c                 N   t        j                         }d}d}d}|j                  dd|       |j                  dd|       |j                  dd|       t        j                  t         j
                        5  t        j                  |d       d d d        y # 1 sw Y   y xY w)Nr&   r   ir   r-   r.   )r   rx   ra   r   r   rF   r  r  s        r   $test_kemeny_constant_negative_weightz7TestKemenyConstant.test_kemeny_constant_negative_weight  s    HHJ	

1a
$	

1a
$	

1a
$]]2++, 	3q2	3 	3 	3s   :BB$c                 
   t        j                  | j                  d      }d}d}d}d||z   z  ||z   z  ||z   z  |dz  ||z   z  |dz  ||z   z  z   |dz  ||z   z  z   d|z  |z  |z  z   z  }t        j	                  ||      sJ y )Nr.   r-   r&   r   r   r   r   r  r   r  r1  )r   Kr  r  r  r$  s         r   test_kemeny_constantz'TestKemenyConstant.test_kemeny_constant  s    tvvh7Sy Sy Sy	 Q#)$q&C#I&'q&C#I&' c'C-#%&
 	 zz!Y'''r    c                 r    t        j                  | j                        }t        j	                  |d      sJ y )NgUUUUUU?r  )r   r  s     r   test_kemeny_constant_no_weightz1TestKemenyConstant.test_kemeny_constant_no_weight  s*    tvv&zz!U###r    c                    t        j                         }d}d}d}d}|j                  dd|       |j                  dd|       |j                  dd|       |j                  dd|       t        j                  |d      }||z   }d||z   z  ||z   z  ||z   z  |dz  ||z   z  |dz  ||z   z  z   |dz  ||z   z  z   d|z  |z  |z  z   z  }t        j                  ||      sJ y )Nr&   r   r   r   r-   r.   r   )r   r0  ra   r  r  r1  )	r   r   w12_1w12_2r  r  r  r  r$  s	            r   test_kemeny_constant_multigraphz2TestKemenyConstant.test_kemeny_constant_multigraph  s$   MMO	

1a
&	

1a
&	

1a
$	

1a
$q2emSy Sy Sy	 Q#)$q&C#I&'q&C#I&' c'C-#%&
 	 zz!Y'''r    c                    t        j                         }d}d}d}|j                  dd|       |j                  dd|       |j                  dd|       t        j                  |d      }d||z   z  ||z   z  ||z   z  |dz  ||z   z  |dz  ||z   z  z   |dz  ||z   z  z   d|z  |z  |z  z   z  }t        j                  ||      sJ y )	Nr   r   r   r   r&   r-   r.   r   r   rx   ra   r  r  r1  )r   r   r  r  r  r  r$  s          r   test_kemeny_constant_weight0z/TestKemenyConstant.test_kemeny_constant_weight0  s   HHJ	

1a
$	

1a
$	

1a
$q2Sy Sy Sy	 Q#)$q&C#I&'q&C#I&' c'C-#%&
 	 zz!Y'''r    c                    t        j                         }d}d}d}d}|j                  dd|       |j                  dd|       |j                  dd|       |j                  dd|       t        j                  |d      }d|z  d|z  z   d|z  z   ||z   z  ||z   z  ||z  ||z  z   ||z  z   |d|z  z   d|z  z   d|z  z   z  z  }t        j                  ||      sJ y )Nr   r&   r   r   r-   r.   r  )r   r   w11r  r  r  r  r$  s           r   test_kemeny_constant_selfloopz0TestKemenyConstant.test_kemeny_constant_selfloop  s	   HHJ	

1a
$	

1a
$	

1a
$	

1a
$q2Wq3wS(SySy sS3Y&s2S=1s7*QW46	 	 zz!Y'''r    c                     d}d}t        j                  ||      }t        j                  |      }t        j	                  |||z   dz
        sJ y )Nr(   r   r   )r   complete_bipartite_graphr  r  r1  )r   n1n2r   r  s        r   -test_kemeny_constant_complete_bipartite_graphz@TestKemenyConstant.test_kemeny_constant_complete_bipartite_graph2  sJ    ''B/q!zz!R"Wu_---r    c                     d}t        j                  |      }t        j                  |      }t        j	                  ||dz  dz  d|z  dz  z
  dz         sJ y )Nr"   r&   r   rb  )r   r   r  r  r1  )r   r#   r   r  s       r   test_kemeny_constant_path_graphz2TestKemenyConstant.test_kemeny_constant_path_graph:  sS    MM!q!zz!QTAXA	1E9:::r    N)r   r   r   rG  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r    r   r  r    sP    * *
"'
"
	3(($(6(0(,.;r    r  )	itertoolsrV   randomr   r   networkxr   r   r   %networkx.algorithms.distance_measuresr   r   r   r   r   rI  ro  r  r   r    r   <module>r     sp         = C-Z  Z z[W [W|f' f'RS: S:lTJ TJn\; \;r    