generator.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from typing import Any
  2. from pypdevs.DEVS import AtomicDEVS
  3. from pypdevs.infinity import INFINITY
  4. class Generator(AtomicDEVS):
  5. def __init__(self, name, num_outputs=1, period=None, cycles=1):
  6. super(Generator, self).__init__(name=name)
  7. self.num_outputs = num_outputs
  8. self.period = period
  9. self.cycles = cycles
  10. self.state = "waiting", 0
  11. self.o_out = self.addOutPort("o_out")
  12. def intTransition(self):
  13. state, cycle = self.state
  14. if cycle >= self.cycles:
  15. return "passive", cycle
  16. elif state == "active" and self.period is not None:
  17. return "waiting", cycle + 1
  18. elif state == "waiting":
  19. return "active", cycle
  20. else:
  21. return "passive", cycle
  22. def timeAdvance(self):
  23. state, cycle = self.state
  24. if state == "active":
  25. return 0
  26. elif state == "waiting":
  27. return self.period
  28. else:
  29. return INFINITY
  30. def outputFnc(self):
  31. state, cycle = self.state
  32. if state == "active":
  33. return {self.o_out: list(range(self.num_outputs))}
  34. return {}
  35. def extTransition(self, inputs):
  36. pass