88
99 < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
1010
11- < title > algorithms.s_centrality_measures — HyperNetX 0.3.4 documentation</ title >
11+ < title > algorithms.s_centrality_measures — HyperNetX 0.3.5 documentation</ title >
1212
1313
1414
161161 < h1 > Source code for algorithms.s_centrality_measures</ h1 > < div class ="highlight "> < pre >
162162< span > </ span > < span class ="c1 "> # Copyright © 2018 Battelle Memorial Institute</ span >
163163< span class ="c1 "> # All rights reserved.</ span >
164- < span class ="c1 "> # This module developed for PNNL's hyperbio LDRD project summer 2019</ span >
164+
165+ < span class ="sd "> """</ span >
166+
167+ < span class ="sd "> S-Centrality Measures</ span >
168+ < span class ="sd "> =====================</ span >
169+ < span class ="sd "> We generalize graph metrics to s-metrics for a hypergraph by using its s-connected</ span >
170+ < span class ="sd "> components. This is accomplished by computing the s edge-adjacency matrix and</ span >
171+ < span class ="sd "> constructing the corresponding graph of the matrix. We then use existing graph metrics</ span >
172+ < span class ="sd "> on this representation of the hypergraph. In essence we construct an *s*-line graph</ span >
173+ < span class ="sd "> corresponding to the hypergraph on which to apply our methods.</ span >
174+
175+ < span class ="sd "> S-Metrics for hypergraphs are discussed in depth in: </ span >
176+ < span class ="sd "> *Aksoy, S.G., Joslyn, C., Ortiz Marrero, C. et al. Hypernetwork science via high-order hypergraph walks.</ span >
177+ < span class ="sd "> EPJ Data Sci. 9, 16 (2020). https://doi.org/10.1140/epjds/s13688-020-00231-0*</ span >
178+
179+ < span class ="sd "> """</ span >
165180
166181< span class ="kn "> import</ span > < span class ="nn "> numpy</ span > < span class ="k "> as</ span > < span class ="nn "> np</ span >
167182< span class ="kn "> from</ span > < span class ="nn "> collections</ span > < span class ="k "> import</ span > < span class ="n "> defaultdict</ span >
@@ -193,10 +208,12 @@ <h1>Source code for algorithms.s_centrality_measures</h1><div class="highlight">
193208< span class ="sd "> A dictionary of s-betweenness centrality value of the edges.</ span >
194209
195210< span class ="sd "> '''</ span >
211+
196212 < span class ="c1 "> # Confirm there is at least 1 s edge for which we can compute the centrality</ span >
197213 < span class ="c1 "> # Find all s-edges</ span >
198214 < span class ="c1 "> #M,rdict,_ = H.incidence_matrix(index=True)</ span >
199215 < span class ="c1 "> #A = M.transpose().dot(M)</ span >
216+
200217 < span class ="n "> A</ span > < span class ="p "> ,</ span > < span class ="n "> coldict</ span > < span class ="o "> =</ span > < span class ="n "> H</ span > < span class ="o "> .</ span > < span class ="n "> edge_adjacency_matrix</ span > < span class ="p "> (</ span > < span class ="n "> s</ span > < span class ="o "> =</ span > < span class ="n "> s</ span > < span class ="p "> ,</ span > < span class ="n "> index</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> )</ span >
201218 < span class ="n "> A</ span > < span class ="o "> .</ span > < span class ="n "> setdiag</ span > < span class ="p "> (</ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
202219 < span class ="n "> A</ span > < span class ="o "> =</ span > < span class ="p "> (</ span > < span class ="n "> A</ span > < span class ="o "> >=</ span > < span class ="n "> s</ span > < span class ="p "> )</ span > < span class ="o "> *</ span > < span class ="mi "> 1</ span >
@@ -227,8 +244,10 @@ <h1>Source code for algorithms.s_centrality_measures</h1><div class="highlight">
227244< span class ="sd "> If edge then a single value is returned.</ span >
228245
229246< span class ="sd "> '''</ span >
247+
230248 < span class ="c1 "> # Confirm there is at least 1 s edge for which we can compute the centrality</ span >
231249 < span class ="c1 "> # Find all s-edges</ span >
250+
232251 < span class ="k "> if</ span > < span class ="n "> edge</ span > < span class ="ow "> and</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> H</ span > < span class ="o "> .</ span > < span class ="n "> edges</ span > < span class ="p "> [</ span > < span class ="n "> edge</ span > < span class ="p "> ])</ span > < span class ="o "> <</ span > < span class ="n "> s</ span > < span class ="p "> :</ span >
233252 < span class ="k "> return</ span > < span class ="mi "> 0</ span >
234253
@@ -250,6 +269,7 @@ <h1>Source code for algorithms.s_centrality_measures</h1><div class="highlight">
250269
251270 < span class ="c1 "> # confirm there are at least 2 s-edges</ span >
252271 < span class ="c1 "> # we follow the NX convention that the s-closeness centrality of a single edge Hypergraph is 0</ span >
272+
253273 < span class ="n "> output</ span > < span class ="o "> =</ span > < span class ="p "> {}</ span >
254274 < span class ="k "> if</ span > < span class ="ow "> not</ span > < span class ="nb "> bool</ span > < span class ="p "> (</ span > < span class ="n "> Es</ span > < span class ="p "> )</ span > < span class ="ow "> or</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> Es</ span > < span class ="p "> )</ span > < span class ="o "> ==</ span > < span class ="mi "> 1</ span > < span class ="p "> :</ span >
255275 < span class ="n "> output</ span > < span class ="o "> =</ span > < span class ="p "> {</ span > < span class ="n "> e</ span > < span class ="p "> :</ span > < span class ="mi "> 0</ span > < span class ="k "> for</ span > < span class ="n "> e</ span > < span class ="ow "> in</ span > < span class ="n "> edges</ span > < span class ="p "> }</ span >
@@ -280,7 +300,11 @@ <h1>Source code for algorithms.s_centrality_measures</h1><div class="highlight">
280300< span class ="sd "> eccentricity[f] : float</ span >
281301< span class ="sd "> else:</ span >
282302< span class ="sd "> eccentricity_dict : dict</ span >
283- < span class ="sd "> </ span >
303+ < span class ="sd "> : dict or float</ span >
304+ < span class ="sd "> returns the s-eccentricity value of the edges, a floating point number</ span >
305+ < span class ="sd "> If edge=None a dictionary of values for each s-edge in H is returned.</ span >
306+ < span class ="sd "> If edge then a single value is returned.</ span >
307+
284308< span class ="sd "> '''</ span >
285309 < span class ="k "> if</ span > < span class ="n "> f</ span > < span class ="p "> :</ span >
286310 < span class ="k "> if</ span > < span class ="nb "> isinstance</ span > < span class ="p "> (</ span > < span class ="n "> f</ span > < span class ="p "> ,</ span > < span class ="n "> Entity</ span > < span class ="p "> ):</ span >
0 commit comments