def stepdown(wnum0, wden0, dtnum0, dtden0): global G, tnum, tden wnum = wnum0.mul_ground(1) wden = wden0.mul_ground(1) dtnum = dtnum0.mul_ground(1) dtden = dtden0.mul_ground(1) infectables, recoverables = get_infect_reco() si = sum(infectables.values()) sr = len(recoverables) if si == 0 and sr == 0: a = wnum.mul(dtnum) b = wden.mul(dtden) c = b.mul(tden) a = a.mul(tden) b = b.mul(tnum) a = a.add(b) b = a.gcd(c) tnum, no = a.div(b) tden, no = c.div(b) collect() return den = Poly(si * x + sr, x) a = den.mul(dtnum) a = a.add(dtden) b = den.mul(dtden) c = a.gcd(b) dtnum, no = a.div(c) dtden, no = b.div(c) nden = wden.mul(den) for you, num in sorted(infectables.iteritems()): nnum = wnum.mul(Poly(num * x, x)) if G.node[you]['state'] == 'SENTI': a = nnum.mul(dtnum) b = nden.mul(dtden) c = b.mul(tden) a = a.mul(tden) b = b.mul(tnum) a = a.add(b) b = a.gcd(c) tnum, no = a.div(b) tden, no = c.div(b) else: G.node[you]['state'] = 'I' stepdown(nnum, nden, dtnum, dtden) G.node[you]['state'] = 'S' for you in sorted(recoverables): G.node[you]['state'] = 'R' stepdown(wnum, nden, dtnum, dtden) G.node[you]['state'] = 'I' collect()
G = nx.convert_node_labels_to_integers(G0, label_attribute='id') sonum = Poly(0, x) soden = Poly(1, x) for v in G.nodes(): if G.node[v]['state'] != 'V': for u in G.nodes(): if G.node[u]['state'] != 'V': G.node[u]['state'] = 'S' G.node[v]['state'] = 'I' onum = Poly(0, x) oden = Poly(1, x) stepdown(Poly(1, x), Poly(1, x)) a = onum.mul(soden) b = sonum.mul(oden) c = a.add(b) d = oden.mul(soden) a = d.gcd(c) sonum, no = c.div(a) soden, no = d.div(a) print '(' + str(sonum.as_expr()) + ')/(' + str( soden.as_expr()) + ')' print '-------------' a = soden.mul_ground(G.number_of_nodes()) b = sonum.gcd(a) c, no = sonum.div(b) d, no = a.div(b)
G = nx.convert_node_labels_to_integers(G0, label_attribute='id') stnum = Poly(0, x) stden = Poly(1, x) for v in G.nodes(): for u in G.nodes(): if G.node[u]['state'] != 'SENTI': G.node[u]['state'] = 'S' if G.node[v]['state'] != 'SENTI': G.node[v]['state'] = 'I' tnum = Poly(0, x) tden = Poly(1, x) stepdown(Poly(1, x), Poly(1, x), Poly(0, x), Poly(1, x)) a = tnum.mul(stden) b = stnum.mul(tden) a = a.add(b) b = tden.mul(stden) c = a.gcd(b) stnum, no = a.div(c) stden, no = b.div(c) a = stden.mul_ground(G.number_of_nodes()) b = stnum.gcd(a) c, no = stnum.div(b) d, no = a.div(b) print s.strip() + ', (' + str(c.as_expr()) + ')/(' + str(d.as_expr()) + ')' # # # # # # # # # # # # # # # # #