diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..2513cc12 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,19 @@ +*.pydevproject +.project +.metadata +bin/ +tmp/ +out/ +*.tmp +*.dat +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings +.loadpath +#*.pyc +.vscode +.idea +.spyproject \ No newline at end of file diff --git a/Container.py b/Container.py index 866c7218..684d2878 100644 --- a/Container.py +++ b/Container.py @@ -1224,7 +1224,7 @@ def __init__(self, x=[], y=[]): self.x = array.array('d',x) # list of x coord self.y = array.array('d',y) # list of y coords self.fill= Shape.FILL # fill color - self.pen = [self.fill[0] , 1, wx.PENSTYLE_SOLID] # pen color and size + self.pen = [self.fill[0] , 1, 100] # pen color and size / 100 = wx.PENSTYLE_SOLID self.font = [FONT_SIZE, 74, 93, 700, u'Arial'] def draw(self, dc): @@ -2395,7 +2395,7 @@ def OnLeftUp(self, event): for item in [s for s in self.select() if isinstance(s, ConnectionShape)]: ### restore solid connection if len(item.pen)>2: - item.pen[2]= wx.PENSTYLE_SOLID + item.pen[2]= 100 #wx.PENSTYLE_SOLID if None in (item.output, item.input): diff --git a/Decorators.py b/Decorators.py index f2baa0eb..3920a22d 100644 --- a/Decorators.py +++ b/Decorators.py @@ -230,7 +230,10 @@ def wrapper(*args): thread = ThreadWithReturnValue(target = f, args = args) thread.start() - while thread.isAlive(): + ### isAlive is deprecated since python 3.9 + cond = thread.isAlive() if hasattr(thread,'isAlive') else thread.is_alive() + + while cond: if progress_dlg.WasCancelled() or progress_dlg.WasSkipped(): thread.kill() diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..394212d5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM python:3.8-slim-buster + +LABEL maintainer="Capocchi Laurent" +LABEL website="http://capocchi-l.universita.corsica/" + +WORKDIR /app + +RUN apt-get update +RUN apt-get install -y build-essential libgtk-3-dev +RUN pip install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/debian-9 wxPython + +#COPY requirements-nogui.txt requirements.txt +COPY requirements.txt requirements.txt +RUN pip install -r requirements.txt + +COPY . . + +CMD ["python", "devsimpy.py"] + +#CMD ["python3", "devsimpy-nogui.py", "examples/model0.yaml", "10"] diff --git a/Domain/FSM/QFSM.amd b/Domain/FSM/QFSM.amd index bdd540c6..1025faa3 100644 Binary files a/Domain/FSM/QFSM.amd and b/Domain/FSM/QFSM.amd differ diff --git a/Editor.py b/Editor.py index 72398af3..3a8c1780 100644 --- a/Editor.py +++ b/Editor.py @@ -2036,9 +2036,9 @@ def CheckErrors(self, base_name, code, new_instance): """ if not self.nb.GetCurrentPage().ContainError(): - + ### if some simulation is running - on_simulation_flag = True in [_('Simulator') in thread.getName() and thread.isAlive() for thread in threading.enumerate()[1:]] + on_simulation_flag = True in [_('Simulator') in thread.getName() and (thread.isAlive() if hasattr(thread,'isAlive') else thread.is_alive()) for thread in threading.enumerate()[1:]] new_class = new_instance.__class__ diff --git a/PlotGUI.py b/PlotGUI.py index 78992bfd..b6026359 100644 --- a/PlotGUI.py +++ b/PlotGUI.py @@ -303,7 +303,7 @@ def drawPointLabel(self, dc, nearest): ptx, pty = nearest["scaledXY"] dc.SetPen(wx.Pen(wx.BLACK)) - dc.SetBrush(wx.Brush(wx.WHITE, wx.PENSTYLE_TRANSPARENT)) + dc.SetBrush(wx.Brush(wx.WHITE, 106)) # wx.PENSTYLE_TRANSPARENT = 106 dc.SetLogicalFunction(wx.INVERT) dc.CrossHair(ptx, pty) dc.DrawRectangle(ptx-3, pty-3, 7, 7) @@ -1082,7 +1082,9 @@ def OnPlotSquare(self, event): except Exception: sys.stdout.write(_("Error trying to plot")) - if self.sim_thread is None or not self.sim_thread.isAlive(): + cond = self.sim_thread.isAlive() if hasattr(self.sim_thread,'isAlive') else self.sim_thread.is_alive() + + if self.sim_thread is None or not cond: self.timer.Stop() def OnPlotScatter(self, event): @@ -1154,8 +1156,9 @@ def OnPlotScatter(self, event): except Exception: sys.stdout.write(_("Error trying to plot")) + cond = self.sim_thread.isAlive() if hasattr(self.sim_thread,'isAlive') else self.sim_thread.is_alive() - if self.sim_thread is None or not self.sim_thread.isAlive(): + if self.sim_thread is None or not cond: self.timer.Stop() def OnPlotBar(self,event): @@ -1207,7 +1210,9 @@ def OnPlotBar(self,event): except Exception: sys.stdout.write(_("Error trying to plot")) - if self.sim_thread is None or not self.sim_thread.isAlive(): + cond = self.sim_thread.isAlive() if hasattr(self.sim_thread,'isAlive') else self.sim_thread.is_alive() + + if self.sim_thread is None or not cond: self.timer.Stop() def OnPlotAllSpectrum(self,evt): diff --git a/RubberBande.py b/RubberBande.py index 2b798c43..970fc56b 100644 --- a/RubberBande.py +++ b/RubberBande.py @@ -59,8 +59,8 @@ def OnMouseEvent(self, event): # dont do any filling of the dc. It is set just for # the sake of completion. - wbrush = wx.Brush(wx.Colour(255,255,255), wx.PENSTYLE_TRANSPARENT) - wpen = wx.Pen(wx.Colour(200, 200, 200), 1, wx.PENSTYLE_SOLID) + wbrush = wx.Brush(wx.Colour(255,255,255), 106) # wx.PENSTYLE_TRANSPARENT = 106 + wpen = wx.Pen(wx.Colour(200, 200, 200), 1, 100) # wx.PENSTYLE_SOLID = 100 dc.SetBrush(wbrush) dc.SetPen(wpen) @@ -154,8 +154,8 @@ def ClearCurrentSelection(self): # dont do any filling of the dc. It is set for # sake of completion. - wbrush = wx.Brush(wx.Colour(255,255,255), wx.PENSTYLE_TRANSPARENT) - wpen = wx.Pen(wx.Colour(200, 200, 200), 1, wx.PENSTYLE_SOLID) + wbrush = wx.Brush(wx.Colour(255,255,255), 106) # wx.PENSTYLE_TRANSPARENT = 106 + wpen = wx.Pen(wx.Colour(200, 200, 200), 1, 100) # wx.PENSTYLE_SOLID = 100 dc.SetBrush(wbrush) dc.SetPen(wpen) dc.DrawRectangle(box[0], box[1], w,h) diff --git a/SimulationNoGUI.py b/SimulationNoGUI.py index fe413edf..68dc622e 100644 --- a/SimulationNoGUI.py +++ b/SimulationNoGUI.py @@ -131,7 +131,8 @@ def makeSimulation(master, T, simu_name="simu", is_remote=False, json_trace=True progress = 0 if not builtins.__dict__['NTL']: - while(thread.isAlive()): + cond = thread.isAlive() if hasattr(thread,'isAlive') else thread.is_alive() + while cond: new_real_time = time.time() CPUduration = new_real_time - first_real_time new_progress = 100.0*(thread.model.timeLast / T) diff --git a/devsimpy-nogui.py b/devsimpy-nogui.py index caab6f89..57e5d76a 100644 --- a/devsimpy-nogui.py +++ b/devsimpy-nogui.py @@ -157,7 +157,7 @@ def simulate(devs, duration, simu_name, is_remote): else: # simulation duration = args.simulation_time - if isinstance(duration, str): + if not isinstance(duration, str): duration = float(duration) devs = yamlHandler.getDevsInstance() diff --git a/env.yml b/env.yml new file mode 100644 index 00000000..120cd6e7 --- /dev/null +++ b/env.yml @@ -0,0 +1,152 @@ +name: py39 +channels: + - defaults +dependencies: + - ca-certificates=2021.1.19=haa95532_1 + - certifi=2020.12.5=py39haa95532_0 + - openssl=1.1.1k=h2bbff1b_0 + - pip=21.0.1=py39haa95532_0 + - python=3.9.2=h6244533_0 + - setuptools=52.0.0=py39haa95532_0 + - sqlite=3.35.2=h2bbff1b_0 + - tzdata=2020f=h52ac0ba_0 + - vc=14.2=h21ff451_1 + - vs2015_runtime=14.27.29016=h5e58377_2 + - wheel=0.36.2=pyhd3eb1b0_0 + - wincertstore=0.2=py39h2bbff1b_0 + - pip: + - alabaster==0.7.12 + - appdirs==1.4.4 + - astroid==2.5 + - async-generator==1.10 + - atomicwrites==1.4.0 + - attrs==20.3.0 + - autopep8==1.5.5 + - babel==2.9.0 + - backcall==0.2.0 + - bcrypt==3.2.0 + - black==20.8b1 + - bleach==3.3.0 + - cffi==1.14.4 + - chardet==4.0.0 + - chart-studio==1.1.0 + - click==7.1.2 + - cloudpickle==1.6.0 + - colorama==0.4.4 + - cryptography==3.3.1 + - cycler==0.10.0 + - decorator==4.4.2 + - defusedxml==0.6.0 + - diff-match-patch==20200713 + - docutils==0.16 + - entrypoints==0.3 + - flake8==3.8.4 + - helpdev==0.7.1 + - idna==2.10 + - imagesize==1.2.0 + - intervaltree==3.1.0 + - ipykernel==5.5.0 + - ipython==7.20.0 + - ipython-genutils==0.2.0 + - isort==5.7.0 + - jedi==0.17.2 + - jinja2==2.11.3 + - jsonschema==3.2.0 + - jupyter-client==6.1.11 + - jupyter-core==4.7.1 + - jupyterlab-pygments==0.1.2 + - keyring==22.2.0 + - kiwisolver==1.3.1 + - lazy-object-proxy==1.5.2 + - markupsafe==1.1.1 + - matplotlib==3.3.3 + - mccabe==0.6.1 + - mistune==0.8.4 + - mypy-extensions==0.4.3 + - nbclient==0.5.3 + - nbconvert==6.0.7 + - nbformat==5.1.2 + - ndg-httpsclient==0.5.1 + - nest-asyncio==1.5.1 + - numpy==1.19.2 + - numpydoc==1.1.0 + - packaging==20.9 + - pandocfilters==1.4.3 + - paramiko==2.7.2 + - parso==0.7.0 + - pathspec==0.8.1 + - pexpect==4.8.0 + - pickleshare==0.7.5 + - pillow==8.0.0 + - plotly==4.14.1 + - pluggy==0.13.1 + - prompt-toolkit==3.0.16 + - psutil==5.8.0 + - ptyprocess==0.7.0 + - pusher==3.0.0 + - pyaml==20.4.0 + - pyasn1==0.4.8 + - pycodestyle==2.6.0 + - pycparser==2.20 + - pydocstyle==5.1.1 + - pyflakes==2.2.0 + - pygments==2.8.0 + - pylint==2.7.1 + - pyls-black==0.4.6 + - pyls-spyder==0.3.2 + - pynacl==1.4.0 + - pyopenssl==20.0.1 + - pyparsing==2.4.7 + - pypubsub==3.3.0 + - pyqt5==5.12.3 + - pyqt5-sip==12.8.1 + - pyqtwebengine==5.12.1 + - pyro4==4.80 + - pyrsistent==0.17.3 + - python-dateutil==2.8.1 + - python-jsonrpc-server==0.4.0 + - python-language-server==0.36.2 + - pytz==2021.1 + - pywin32==300 + - pywin32-ctypes==0.2.0 + - pyyaml==3.13 + - pyzmq==22.0.3 + - qdarkstyle==2.8.1 + - qtawesome==1.0.2 + - qtconsole==5.0.2 + - qtpy==1.9.0 + - regex==2020.11.13 + - requests==2.25.1 + - retrying==1.3.3 + - rope==0.18.0 + - ruamel-yaml==0.16.12 + - serpent==1.30.2 + - six==1.15.0 + - snowballstemmer==2.1.0 + - sortedcontainers==2.3.0 + - sphinx==3.5.1 + - sphinxcontrib-applehelp==1.0.2 + - sphinxcontrib-devhelp==1.0.2 + - sphinxcontrib-htmlhelp==1.0.3 + - sphinxcontrib-jsmath==1.0.1 + - sphinxcontrib-qthelp==1.0.3 + - sphinxcontrib-serializinghtml==1.1.4 + - spyder-kernels==1.10.2 + - testpath==0.4.4 + - textdistance==4.2.1 + - three-merge==0.1.1 + - toml==0.10.2 + - tornado==6.1 + - traitlets==5.0.5 + - typed-ast==1.4.2 + - typing-extensions==3.7.4.3 + - ujson==4.0.2 + - urllib3==1.26.2 + - watchdog==1.0.2 + - wcwidth==0.2.5 + - webencodings==0.5.1 + - wrapt==1.12.1 + - wxpython==4.1.1 + - yapf==0.30.0 +prefix: C:\Users\Laurent\Anaconda2\envs\py39 + diff --git a/examples/model0.dsp b/examples/model0.dsp deleted file mode 100644 index 23fc6fa4..00000000 Binary files a/examples/model0.dsp and /dev/null differ diff --git a/examples/model0/model0.dsp b/examples/model0/model0.dsp new file mode 100644 index 00000000..4824623d Binary files /dev/null and b/examples/model0/model0.dsp differ diff --git a/examples/model0/model0.yaml b/examples/model0/model0.yaml new file mode 100644 index 00000000..0e6f86a0 --- /dev/null +++ b/examples/model0/model0.yaml @@ -0,0 +1,160 @@ +!!python/object/new:Mixins.Savable.PickledCollection +listitems: +- &id004 + - !!python/object:Container.ConnectionShape + args: {} + devsModel: null + fill: + - '#d91e1e' + font: + - 12 + - 74 + - 93 + - 700 + - Arial + input: !!python/tuple + - &id002 !!python/object:Container.CodeBlock + args: + choice: [] + maxStep: 1 + maxValue: 10 + minStep: 1 + minValue: 0 + start: 0 + attributes: + - label + - label_pos + - pen + - fill + - font + - image_path + - input + - output + bad_filename_path_flag: false + devsModel: null + dir: &id001 !!python/tuple + - ouest + - nord + - est + - sud + fill: + - '#add8e6' + font: + - 7 + - 74 + - 93 + - 700 + - Arial + h: 100.0 + id: 1 + image_path: '' + input: 1 + input_direction: ouest + label: RandomGenerator_1 + label_pos: center + last_name_saved: '' + lock_flag: false + model_path: '' + nb_copy: 0 + output: 1 + output_direction: est + pen: + - '#add8e6' + - 1 + - 100 + python_path: C:\Users\Laurent\Dropbox\devsimpy\py3x\Domain\Generator\RandomGenerator.py + selected: false + status_label: '' + w: 100.0 + x: !!python/object/apply:array.array + - d + - - 69.0 + - 169.0 + y: !!python/object/apply:array.array + - d + - - 176.0 + - 276.0 + - 0 + lock_flag: false + output: !!python/tuple + - &id003 !!python/object:Container.ScopeGUI + args: + eventAxis: false + fusion: true + attributes: + - label + - label_pos + - pen + - fill + - font + - image_path + - input + - output + - xlabel + - ylabel + bad_filename_path_flag: false + devsModel: null + dir: *id001 + fill: + - '#ffa500' + font: + - 12 + - 74 + - 93 + - 700 + - Arial + h: 100.0 + id: 0 + image_path: '' + input: 1 + input_direction: ouest + label: To_Disk_0 + label_pos: center + last_name_saved: '' + lock_flag: false + model_path: '' + nb_copy: 0 + output: 1 + output_direction: est + pen: + - '#add8e6' + - 1 + - 100 + python_path: C:\Users\Laurent\Dropbox\devsimpy\py3x\Domain\Collector\To_Disk.py + selected: false + status_label: '' + w: 100.0 + x: !!python/object/apply:array.array + - d + - - 345.0 + - 445.0 + xlabel: '' + y: !!python/object/apply:array.array + - d + - - 211.0 + - 311.0 + ylabel: '' + - 0 + pen: + - '#add8e6' + - 1 + - 100 + python_path: '' + touch_list: [] + x: !!python/object/apply:array.array + - d + - - 169.0 + - 345.0 + y: !!python/object/apply:array.array + - d + - - 226.0 + - 261.0 + - *id002 + - *id003 +- &id005 [] +- &id006 {} +state: + pickled_obj: + - *id004 + - *id005 + - *id006 diff --git a/new_arch.zip b/new_arch.zip deleted file mode 100644 index 3651c69d..00000000 Binary files a/new_arch.zip and /dev/null differ diff --git a/requirements-nogui.txt b/requirements-nogui.txt new file mode 100644 index 00000000..67c45008 --- /dev/null +++ b/requirements-nogui.txt @@ -0,0 +1,245 @@ +# Requirements automatically generated by pigar. +# https://github.com/damnever/pigar + +# AttributeEditor.py: 27 +# CheckerGUI.py: 35 +# Components.py: 35,40,42 +# ConnectDialog.py: 23 +# Container.py: 28,29,30,35,37,41 +# ControlNotebook.py: 23,172,174 +# DSV.py: 129,130 +# Decorators.py: 16,18,21 +# DetachedFrame.py: 25 +# DiagramConstantsDialog.py: 4 +# DiagramNotebook.py: 23,30,220,222 +# DirTreeCtrl.py: 32 +# DragList.py: 9 +# DropTarget.py: 16 +# Editor.py: 26,42 +# Event.py: 3 +# ExperimentGenerator.py: 4 +# FTPGUI.py: 4 +# FindGUI.py: 6 +# HtmlWindow.py: 5,6 +# ImportLibrary.py: 34,35 +# LabelGUI.py: 25,26 +# LibPanel.py: 23 +# LibraryTree.py: 23 +# Menu.py: 23 +# Mixins\Savable.py: 263,267 +# Mixins\Selectable.py: 15,73 +# PlotGUI.py: 23,48 +# PluginsGUI.py: 18 +# PreferencesGUI.py: 3,14 +# PrintOut.py: 6 +# PriorityGUI.py: 3 +# PropPanel.py: 23 +# PropertiesGridCtrl.py: 29,30,31,32,33 +# Reporter.py: 4 +# RubberBande.py: 8 +# SimpleFrameEditor.py: 4,5,10 +# SimulationGUI.py: 23,31,33 +# SpreadSheet.py: 25,26,30,32 +# Utilities.py: 38 +# WizardGUI.py: 3,6,13,25 +# XMLModule.py: 19,588 +# YAMLExportGUI.py: 23 +# ZipManager.py: 214 +# devsimpy.py: 81,83,90,99,101,111 +# plugins\blink.py: 13 +# plugins\state_trajectory.py: 20 +# plugins\verbose.py: 14 +# searchTreeList.py: 1 +# wxPyMail.py: 22 +# wxPython <= 4.1.1 + +# Components.py: 44 +# Container.py: 39 +# DiagramNotebook.py: 33 +# SimulationGUI.py: 35 +# SpreadSheet.py: 34 +# devsimpy.py: 104 +PyPubSub <= 3.3.0 + +# Mixins\Savable.py: 39 +PyYAML #>= 5.1.2 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#auto-python-2014 >= 14.1.5 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#auto-python-for-mobile >= 14.1.5 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#bitmex-ws >= 0.4.0 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#blocked-matrix-utils >= 1.0.1 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#bmcs >= 0.0.2a23 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#build-py >= 1.0.0 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#buildtools >= 1.0.6 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#cgp-dss-data-loader >= 1.1.0 + +# Domain\Collector\Plotly_For_Class.py: 22 +chart_studio #>= 1.0.0 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#cmdline-brute >= 0.5 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#consultor >= 0.2.0 + +# DEVSKernel\PyPDEVS\old\cythonfiles\setup.py: 3 +#cython >= 0.29.14 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#django-parakeet >= 0.1 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#flask-nsfw >= 6 + +# devsimpy.py: 177 +#fuzzmanager >= 0.3.1 + +# DEVSKernel\PyPDEVS\old\examples\trafficLightExperiment.py: 17 +# DEVSKernel\PyPDEVS\old\examples\trafficLightModel.py: 18 +# DEVSKernel\PyPDEVS\pypdevs221\doc\_downloads\queue_example.py: 8 +# DEVSKernel\PyPDEVS\pypdevs221\doc\_downloads\queue_example_classic.py: 8 +# DEVSKernel\PyPDEVS\pypdevs221\examples\trafficLightExperiment.py: 17 +# DEVSKernel\PyPDEVS\pypdevs221\examples\trafficLightModel.py: 18 +# DEVSKernel\PyPDEVS\pypdevs221\examples\trafficLightModel_classic.py: 18 +#infinity >= 1.4 + +# PreferencesGUI.py: 6 +matildapeak-guesstag >= 2018.2 + +# plugins\state_trajectory.py: 26 +matplotlib >= 3.1.1 + +# PreferencesGUI.py: 6 +#notipy >= 1.0.0 + +# InteractionSocket.py: 8 +# PlotGUI.py: 35 +# Utilities.py: 49 +# test_plotly.py: 5 +numpy >= 1.17.2 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#package-generator >= 0.0.1 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#plda >= 1.0.0 + +# Domain\Collector\PlotlyStream.py: 18,19 +# Domain\Collector\Plotly_For_Class.py: 19,20,23 +# test_plotly.py: 1,2 +plotly >= 4.1.0 + +# Container.py: 79 +# DEVSKernel\PyDEVS\simulator.py: 24 +# Menu.py: 32 +# Patterns\Strategy.py: 32 +# PluginsGUI.py: 21 +# SimulationGUI.py: 52 +# ZipManager.py: 26 +# devsimpy.py: 179 +# plugins\blink.py: 16 +# plugins\state_trajectory.py: 42 +# plugins\verbose.py: 18 +pluginmanager >= 0.4.1 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#prestoadmin >= 2.8 + +# CheckerGUI.py: 36 +# Complexity.py: 58 +# Components.py: 53 +# Container.py: 115 +# DropTarget.py: 23 +# Editor.py: 45 +# ImportLibrary.py: 38 +# Join.py: 7 +# LibraryTree.py: 36 +# Mixins\Savable.py: 55 +# Patterns\Strategy.py: 33 +# PlotGUI.py: 50 +# PluginsGUI.py: 22 +# PreferencesGUI.py: 28 +# PropertiesGridCtrl.py: 48 +# ReloadModule.py: 10 +# Reporter.py: 7 +# SimulationGUI.py: 51 +# ZipManager.py: 28 +# devsimpy.py: 181 +# pluginmanager.py: 5 +# plugins\blink.py: 22 +#pricingengine >= 0.0.5-beta- + +# Domain\Collector\To_Pusher.py: 22 +# Simul= 2.1.4 + +# DEVSKernel\PyPDEVS\old\stacktracer.py: 16,17,18 +# DEVSKernel\PyPDEVS\pypdevs221\src\stacktracer.py: 16,17,18 +#pygments >= 2.4.2 + +# PreferencesGUI.py: 6 +#qtaf >= 5.4.34 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#rapier >= 0.0.4 + +# YAMLExportGUI.py: 134 +requests >= 2.22.0 + +# Mixins\Savable.py: 46 +ruamel.yaml #>= 0.16.5 + +# setup.py: 1 +#setuptools >= 41.6.0.post20191030 + +# DEVSKernel\PyPDEVS\old\examples\trafficLightExperiment.py: 18 +# DEVSKernel\PyPDEVS\old\examples\trafficLightExperimentRT.py: 5 +# DEVSKernel\PyPDEVS\pypdevs221\doc\_downloads\queue_example.py: 7 +# DEVSKernel\PyPDEVS\pypdevs221\doc\_downloads\queue_example_classic.py: 7 +# DEVSKernel\PyPDEVS\pypdevs221\examples\trafficLightExperiment.py: 18 +# DEVSKernel\PyPDEVS\pypdevs221\examples\trafficLightExperimentRT.py: 5 +# DEVSKernel\PyPDEVS\pypdevs221\examples\trafficLightExperiment_classic.py: 17 +#simulator >= 1.0.3 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#stackmob-cli >= 0.1.1 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#stackmob-parse-migrator >= 1.0.1 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#swarm-war >= 1.0.0b1 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#utillib >= 0.2 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#vcv >= 3.0.0.1 + +# devsimpy.py: 180 +whichpy >= 0.1 + +# PreferencesGUI.py: 6 +#whratio >= 3.1.1 +#spyder >=4.2.2 +#pyzo >=4.11.2 + +# DEVSKernel\PyPDEVS\pypdevs221\src\templates\tracer.py: 1 +#yang0textutils >= 0.0.1 + +redis \ No newline at end of file