def arrive(self, G, rng):
R = self._ref
n1 = G.order()
n2 = rng.poisson(self.m / self.k)
new = range(n1, n1 + n2)
# label map
r_to_g = self._inv(nx.get_node_attributes(G, "r_id"))
for u in new:
# add vertex
r_id = rng.randint(0, R.order())
attr_u = R.node[r_id]
attr_u["r_id"] = r_id
G.add_node(u, attr_u)
self.stats["%s_patient_arrived" % attr_u["bp"]] += 1
self.stats["%s_donor_arrived" % attr_u["bd"]] += 1
# add to label map
if r_id in r_to_g:
r_to_g[r_id] += [u]
else:
r_to_g[r_id] = [u]
# edges
for vs in list(map(r_to_g.get, R.successors(r_id))):
if vs == None: continue
for v in vs:
G.add_edge(u, v)
for vs in list(map(r_to_g.get, R.predecessors(r_id))):
if vs == None: continue
for v in vs:
G.add_edge(v, u)
self.stats["arrived"] += n2
return G
评论列表
文章目录