Showing
1 changed file
with
0 additions
and
53 deletions
cinzia.py
deleted
100644 → 0
1 | -import snakes.nets as snk | ||
2 | -from snakes.utils.simul import BaseSimulator, BaseHTTPSimulator | ||
3 | - | ||
4 | -class CinziaSimulator (BaseSimulator) : | ||
5 | - def __init__ (self, **system) : | ||
6 | - net = snk.PetriNet("counter machine") | ||
7 | - for var, spec in system.items() : | ||
8 | - init, expr = spec.split(":", 1) | ||
9 | - system[var] = snk.Expression(expr) | ||
10 | - net.add_place(snk.Place(var, [int(init)])) | ||
11 | - for var, expr in system.items() : | ||
12 | - trans = "update_" + var | ||
13 | - net.add_transition(snk.Transition(trans)) | ||
14 | - for v in set(expr.vars() + [var]) : | ||
15 | - net.add_input(v, trans, snk.Variable(v)) | ||
16 | - if v == var : | ||
17 | - net.add_output(v, trans, expr) | ||
18 | - else : | ||
19 | - net.add_output(v, trans, snk.Variable(v)) | ||
20 | - BaseSimulator.__init__(self, net) | ||
21 | - def getstate (self, state) : | ||
22 | - ret = BaseSimulator.getstate(self, state) | ||
23 | - marking = self.states[state] | ||
24 | - ret["variables"] = dict((place, tokens.items()[0]) | ||
25 | - for place, tokens in marking.items()) | ||
26 | - ret["groups"] = ["timed", "even", "odd"] | ||
27 | - modes = [] | ||
28 | - for i, (trans, binding) in enumerate(marking.modes) : | ||
29 | - if (state + i) % 5 == 0 : | ||
30 | - groups = ["timed"] | ||
31 | - else : | ||
32 | - groups = [] | ||
33 | - modes.append( | ||
34 | - {"state" : state, | ||
35 | - "mode" : i, | ||
36 | - "html" : "%s (%s)" % (trans.name[7:], binding), | ||
37 | - "groups" : groups + ["odd" if (state % 2) else "even"] | ||
38 | - }) | ||
39 | - ret["modes"] = [{"select": "#modes", "items": modes}] | ||
40 | - return ret | ||
41 | - | ||
42 | -class CinziaHTTPSimulator (BaseHTTPSimulator) : | ||
43 | - def __init__ (self, **system) : | ||
44 | - simul = CinziaSimulator(**system) | ||
45 | - BaseHTTPSimulator.__init__(self, simulator=simul) | ||
46 | - | ||
47 | -if __name__ == "__main__" : | ||
48 | - import sys, webbrowser | ||
49 | - system = dict(a.split("=", 1) for a in sys.argv[1:]) | ||
50 | - simul = CinziaHTTPSimulator(**system) | ||
51 | - simul.start() | ||
52 | - webbrowser.open(simul.url) | ||
53 | - simul.wait() |
-
Please register or login to post a comment