algebraic-loop.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from CBD.Core import CBD
  2. from CBD.lib.std import *
  3. class Test(CBD):
  4. def __init__(self, name):
  5. CBD.__init__(self, name, [], ["x", "y"])
  6. # self.addBlock(AdderBlock("sum"))
  7. # self.addBlock(ConstantBlock("three", 3.0))
  8. self.addBlock(TimeBlock("three"))
  9. # self.addBlock(ConstantBlock("seven", 7))
  10. self.addBlock(ProductBlock("mult", 3))
  11. self.addConnection("three", "mult")
  12. self.addConnection("mult", "mult")
  13. self.addConnection("mult", "mult")
  14. self.addConnection("mult", "x")
  15. self.addConnection("mult", "y")
  16. # self.addConnection("three", "sum")
  17. # self.addConnection("mult", "sum")
  18. # self.addConnection("sum", "x")
  19. # self.addConnection("seven", "mult")
  20. # self.addConnection("sum", "mult")
  21. # self.addConnection("mult", "y")
  22. if __name__ == '__main__':
  23. test = Test("test")
  24. from CBD.simulator import Simulator
  25. from CBD.loopsolvers.sympysolver import SympySolver
  26. import time
  27. durations = []
  28. pre = 0.0
  29. def prestep():
  30. global pre
  31. pre = time.time()
  32. def poststep():
  33. durations.append(time.time() - pre)
  34. delta = 1
  35. length = 50
  36. sim = Simulator(test)
  37. sim.setDeltaT(delta)
  38. sim.setAlgebraicLoopSolver(SympySolver())
  39. # sim.setRealTime()
  40. # sim.setProgressBar()
  41. sim.connect("prestep", prestep)
  42. sim.connect("poststep", poststep)
  43. start = time.time()
  44. sim.run(length)
  45. # while sim.is_running(): pass
  46. print("Duration:", time.time() - start)
  47. import matplotlib.pyplot as plt
  48. plt.bar(list(range(int(length / delta))), durations)
  49. plt.plot([0.0, length / delta], [delta, delta], color="red")
  50. plt.show()
  51. print()
  52. print("X", test.getSignalHistory("x"))
  53. print("Y", test.getSignalHistory("y"))
  54. # C code gen testing:
  55. # from CBD.converters.CBD2C import CBD2C
  56. # gen = CBD2C(test, 100)
  57. # gen.generate("example.c")