o
    3ήc'                     @   s&   d Z ddlZddlZG dd dZdS )z!
Tests for closeness centrality.
    Nc                   @   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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 )"TestClosenessCentralityc                 C   s   t  | _t d| _t d| _t d| _t d| _	t j
ddd| _t  | _| jg d t  }|| _t  | _t jddd	d
| _t | j| _d S )N            )rh))r      )r   r   )r	   r   )r   r   )r   r   )r   r   )r   r   d   333333?{   )npseed)nxkrackhardt_kite_graphK
path_graphP3P4complete_graphK5cycle_graphC4balanced_treeTGraphGbadd_edges_fromflorentine_families_graphFles_miserables_graphLMfast_gnp_random_graphundirected_Gcloseness_centralityundirected_G_cc)clsr     r(   e/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/centrality/tests/test_closeness_centrality.pysetup_class
   s   


z#TestClosenessCentrality.setup_classc                 C   s   t | jt g d}t |}t j|dd}dddddddd}d	d
d
d	dddd}|D ] }|| tj|| ddks?J || tj|| ddksNJ q.d S )N)r   r      F)wf_improvedg      ?g      ?g"~j?Zd;O?)r   r	   r   r   r   r   r+         ?g      ?MbX?      ?MbP?abs)r   unionr   r   r%   pytestapprox)selfGccwfreswf_resr   r(   r(   r)   test_wf_improved   s   
 z(TestClosenessCentrality.test_wf_improvedc                 C   s   t jdt  d}t |}t | }dddd}dddd}t| jD ] }|| tj|| ddks7J || tj|| ddksFJ q&d S )	Nr   )create_usingg        r.   r/   r   r	   r   r1   r2   )	r   r   DiGraphr%   reversesortedr   r5   r6   )r7   r8   r9   crddrr   r(   r(   r)   test_digraph)   s   
 z$TestClosenessCentrality.test_digraphc                 C   sN   t | j}dddddd}t| jD ]}|| tj|| ddks$J qd S )Nr0   )r   r	   r   r   r   r1   r2   )r   r%   r   rB   r5   r6   r7   r9   rD   r   r(   r(   r)   test_k5_closeness3   s
    z)TestClosenessCentrality.test_k5_closenessc                 C   sJ   t | j}dddd}t| jD ]}|| tj|| ddks"J qd S )Nr/   r0   r?   r1   r2   )r   r%   r   rB   r5   r6   rG   r(   r(   r)   test_p3_closeness9   s
    z)TestClosenessCentrality.test_p3_closenessc                 C   sX   t | j}ddddddddddd
}t| jD ]}|| tj|| dd	ks)J qd S )
Ng!rh?r.   r   g~jt?~jt?gףp=
?)
r   r	   r   r   r   r   r+         	   r1   r2   )r   r%   r   rB   r5   r6   rG   r(   r(   r)   test_krackhardt_closeness?   s    z1TestClosenessCentrality.test_krackhardt_closenessc                 C   sb   t | j}ddddddddd	d
dddddd}t| jD ]}|| tj|| ddks.J qd S )NgZd;O?gx?g      ?皙?gL7A`?r-   gS?gw/?gQ?M?r.   )
AcciaiuoliAlbizzi	BarbadoriBischeri
CastellaniGinoriGuadagniLamberteschiMediciPazziPeruzziRidolfiSalviatiStrozzi
Tornabuonir1   r2   )r   r%   r    rB   r5   r6   rG   r(   r(   r)   "test_florentine_families_closenessP   s(    z:TestClosenessCentrality.test_florentine_families_closenessc                 C   s  t | j}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d0d1i d2d3d4d3d5d3d6d3d7d3d8d9d:d;d<d1d=d>d?d(d@dAdBdCdDdEdFdGdHdIdJdKdLdMi dNdKdOdPdQdRdSdTdUdVdWd>dXd1dYdZd[dd\d]d^dd_d`daddbdcddddedfdgdhdididjdkd(d;d;dldmdn	}t| jD ]}|| tj|| dodpksJ qd S )qNNapoleongS?MyrielrJ   MlleBaptistineg;On?MmeMagloireCountessDeLoGeborandChamptercierCravatteCountOldManValjeangS㥛?LabarregK7?
MargueriteMmeDeRIsabeauGervais	Listoliergm?	TholomyesgJ+?FameuilBlacheville	FavouriteDahliaZephineFantineg/$?MmeThenardier
Thenardierg%C?Cosettegd;O?JavertFaucheleventg|?5^?
BamataboisgS?Perpetueg'1Z?Simplicegn?ScaufflaireWoman1gMbX?JudgegB`"?ChampmathieuBrevet
ChenildieuCochepaille	PontmercygZd;?BoulatruellegS?EponineAnzelmagI+?Woman2MotherInnocentgFx?Gribierg;On?	MmeBurgongjt?	Jondretteg r?Gavrocheg r?Gillenormandg}?5^I?Magnongq=
ףp?MlleGillenormandMmePontmercyg)\(?MlleVauboisgʡE?LtGillenormandg\(\?MariusgˡE?	BaronessTMabeufEnjolrasgbX9?
Combeferre	Prouvaireg+?Feuilly
CourfeyracrO   BahorelBossuetgffffff?Joly	Grantairegx?MotherPlutarchg=
ףp=?goʡ?g!rh?gZd;O?gRQ?gd;O?)		GueulemerBabet
ClaquesousMontparnasse	ToussaintChild1Child2BrujonMmeHucheloupr1   r2   )r   r%   r"   rB   r5   r6   rG   r(   r(   r)   test_les_miserables_closenessf   s.  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEO z5TestClosenessCentrality.test_les_miserables_closenessc                 C   sh   g d}t  }|| t j|dd}dddddd}t|D ]}|| tj|| d	d
ks1J q d S )N)
)su
   )r   xr   )r   vr	   )r   r   r   )r   yr	   )r   r   r   )r   r   r   )r   r   r   )r   r   rK   )r   r   r+   weight)distanceg?rP   gDl?gGz?)r   r   r   r   r   r1   r2   )r   r   add_weighted_edges_fromr%   rB   r5   r6   )r7   edgesXGr9   rD   r   r(   r(   r)   test_weighted_closeness   s   
 z/TestClosenessCentrality.test_weighted_closenessc                 C   sJ   t j| }t|  }t| ||g }|| t j|}||fS N)r   utilsarbitrary_elementsetnodeslist	neighborsdifference_update)gr   possible_nodesr   r   r(   r(   r)   pick_add_edge   s   
z%TestClosenessCentrality.pick_add_edgec                 C   s.   t j| }t| |}t j|}||fS r   )r   r   r   r   r   )r   r   r   r   r(   r(   r)   pick_remove_edge   s   z(TestClosenessCentrality.pick_remove_edgec                 C   s`   t tj  tjdd}d }| |}d}t|||| W d    d S 1 s)w   Y  d S )Nr   )r   T)r5   raisesr   NetworkXNotImplementedgn_graphr    incremental_closeness_centrality)r7   dir_Gprev_ccedgeinsertr(   r(   r)   test_directed_raises   s   
"z,TestClosenessCentrality.test_directed_raisesc                 C   sn   t tj' | j }| |}d}| j }|d t	|||| W d    d S 1 s0w   Y  d S )NTr   )
r5   r   r   NetworkXErrorr$   copyr   r&   popr   )r7   r8   r   r   r   r(   r(   r)   test_wrong_size_prev_cc_raises   s   



"z6TestClosenessCentrality.test_wrong_size_prev_cc_raisesc                 C   s~   t tj/ | j }| |}d}| j }t|}|	d d||< t
|||| W d    d S 1 s8w   Y  d S )NTr   r.   )r5   r   r   r   r$   r   r   r&   lenr   r   )r7   r8   r   r   r   	num_nodesr(   r(   r)   test_wrong_nodes_prev_cc_raises   s   



"z7TestClosenessCentrality.test_wrong_nodes_prev_cc_raisesc                 C   s   t d}t |}| |}t j|||dd}||g t |}t| t| @ }t|t|ks9J d|	 v sAJ d S )Nr   F)	insertionr   )
r   r   r%   r   r   remove_edges_fromr   itemsr   values)r7   r8   r   r   test_ccreal_ccshared_itemsr(   r(   r)   test_zero_centrality   s   



z,TestClosenessCentrality.test_zero_centralityc                 C   s   | j  }d }tdD ]C}|d dkrd}| |}nd}| |}t||||}|r3||g n||g t	|}t
| t
| ksLJ |}qd S )Nr   r   r   FT)r$   r   ranger   r   r   r   r   r   r%   r   r   )r7   r8   r   ir   r   r   r   r(   r(   r)   test_incremental  s    


z(TestClosenessCentrality.test_incrementalN)__name__
__module____qualname__classmethodr*   r=   rF   rH   rI   rN   r`   r   r   staticmethodr   r   r   r   r   r   r   r(   r(   r(   r)   r   	   s(    


T

	r   )__doc__r5   networkxr   r   r(   r(   r(   r)   <module>   s    