(G, src, dst, p, q, weight_key=None)
| 202 | |
| 203 | |
| 204 | def _get_alias_edge(G, src, dst, p, q, weight_key=None): |
| 205 | unnormalized_probs = [] |
| 206 | |
| 207 | if weight_key is None: |
| 208 | for dst_nbr in sorted(G.neighbors(dst)): |
| 209 | if dst_nbr == src: |
| 210 | unnormalized_probs.append(1.0 / p) |
| 211 | elif G.has_edge(dst_nbr, src): |
| 212 | unnormalized_probs.append(1.0) |
| 213 | else: |
| 214 | unnormalized_probs.append(1.0 / q) |
| 215 | else: |
| 216 | for dst_nbr in sorted(G.neighbors(dst)): |
| 217 | if dst_nbr == src: |
| 218 | unnormalized_probs.append(G[dst][dst_nbr][weight_key] / p) |
| 219 | elif G.has_edge(dst_nbr, src): |
| 220 | unnormalized_probs.append(G[dst][dst_nbr][weight_key]) |
| 221 | else: |
| 222 | unnormalized_probs.append(G[dst][dst_nbr][weight_key] / q) |
| 223 | |
| 224 | norm_const = sum(unnormalized_probs) |
| 225 | normalized_probs = [float(u_prob) / norm_const for u_prob in unnormalized_probs] |
| 226 | |
| 227 | return _alias_setup(normalized_probs) |
| 228 | |
| 229 | |
| 230 | def _alias_setup(probs): |
no test coverage detected