Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions Container.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ def makeDEVSInstance(diagram = None):
#ReloadModule.recompile("DomainInterface.MasterModel")

### PyPDEVS work with this
#diagram.setDEVSModel(DomainInterface.MasterModel.Master())
# diagram.setDEVSModel(DomainInterface.MasterModel.Master())

### TODO to be tested with PyPDEVS !!!
# if isinstance(diagram.parent, ShapeCanvas):
Expand Down Expand Up @@ -563,12 +563,12 @@ def makeDEVSInstance(diagram = None):
devs = diagram.getDEVSModel()
# si l'utilisateur n'a pas definit d'ordre de priorité pour l'activation des modèles, on la construit
for label1 in diagram.priority_list:
for m in devs.componentSet:
for m in devs.getComponentSet():
label2 = m.getBlockModel().label
if label1 == label2:
L.append(m)

devs.componentSet = L
devs.setComponentSet(L)

return diagram.getDEVSModel()

Expand Down Expand Up @@ -903,8 +903,8 @@ def DeleteShape(self, shape):
### update the devs componentSet
coupled_devs = self.getDEVSModel()
devs = shape.getDEVSModel()
if coupled_devs and devs in coupled_devs.componentSet:
coupled_devs.componentSet.remove(devs)
if coupled_devs and devs in coupled_devs.getComponentSet():
coupled_devs.delTocomponentSet([devs])

try:
### delete shape
Expand Down Expand Up @@ -1097,10 +1097,10 @@ def Clean(self):
try:
Publisher.unsubscribe(devs.finish, "%d.finished"%(id(devs)))
except:
sys.stdout.write(_("unsubscribe problem!"))
sys.stdout.write(_("Impossible to execute the finish method for the model %s!\n")%devs)
devs.finish(None)

self.devsModel.componentSet = []
self.devsModel.setComponentSet([])

for m in self.GetShapeList():
m.setDEVSModel(None)
Expand Down
30 changes: 18 additions & 12 deletions DomainInterface/DomainBehavior.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,26 @@

import re
import os

### import the DEVS module depending on the selected DEVS package in DEVSKernel directory
for pydevs_dir in builtins.__dict__['DEVS_DIR_PATH_DICT']:
if pydevs_dir == builtins.__dict__['DEFAULT_DEVS_DIRNAME']:
path = builtins.__dict__['DEVS_DIR_PATH_DICT'][pydevs_dir]
### split from DEVSKernel string and replace separator with point
d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')
import importlib

path = builtins.__dict__['DEVS_DIR_PATH_DICT'][builtins.__dict__['DEFAULT_DEVS_DIRNAME']]
d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')
BaseDEVS = importlib.import_module("DEVSKernel%s.DEVS"%d)

# ### import the DEVS module depending on the selected DEVS package in DEVSKernel directory
# for pydevs_dir in builtins.__dict__['DEVS_DIR_PATH_DICT']:
# if pydevs_dir == builtins.__dict__['DEFAULT_DEVS_DIRNAME']:
# path = builtins.__dict__['DEVS_DIR_PATH_DICT'][pydevs_dir]
# ### split from DEVSKernel string and replace separator with point
# d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')

### for py 3.X
import importlib
BaseDEVS = importlib.import_module("DEVSKernel%s.DEVS"%d)
# ### for py 3.X
# import importlib
# BaseDEVS = importlib.import_module("DEVSKernel%s.DEVS"%d)

### for py 2.X
#exec("import DEVSKernel%s.DEVS as BaseDEVS"%(d))
# ### for py 2.X
# #exec("import DEVSKernel%s.DEVS as BaseDEVS"%(d))


# ====================================================================== #
class DomainBehavior(BaseDEVS.AtomicDEVS):
Expand Down
52 changes: 40 additions & 12 deletions DomainInterface/DomainStructure.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,13 @@

import re
import os
import importlib

### import the DEVS module depending on the selected DEVS package in DEVSKernel directory
for pydevs_dir in builtins.__dict__['DEVS_DIR_PATH_DICT']:
if pydevs_dir == builtins.__dict__['DEFAULT_DEVS_DIRNAME']:
path = builtins.__dict__['DEVS_DIR_PATH_DICT'][pydevs_dir]
### split from DEVSKernel string and replace separator with point
d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')

### for py 3.X
import importlib
BaseDEVS = importlib.import_module("DEVSKernel%s.DEVS"%d)
path = builtins.__dict__['DEVS_DIR_PATH_DICT'][builtins.__dict__['DEFAULT_DEVS_DIRNAME']]
d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')
BaseDEVS = importlib.import_module("DEVSKernel%s.DEVS"%d)

#exec("import DEVSKernel%s.DEVS as BaseDEVS"%(d))
#exec("import DEVSKernel%s.DEVS as BaseDEVS"%(d))

# ====================================================================== #
class DomainStructure(BaseDEVS.CoupledDEVS):
Expand All @@ -67,10 +61,44 @@ def getFlatComponentSet (self):
""" get the list of composing submodels - recursive build
"""
submodelList = {}
for submodel in self.componentSet:
for submodel in self.getComponentSet():
submodelList.update(submodel.getFlatComponentSet())
return submodelList

def getComponentSet(self)->list:
""" return the component set attribute depending on the definition finded in the DEVS.py file
"""
if hasattr(self, 'componentSet'):
return self.componentSet
elif hasattr(self, 'component_set'):
return self.component_set

def setComponentSet(self,V:list)->None:
""" set the component set attribute depending on the definition finded in the DEVS.py file
"""
if hasattr(self, 'componentSet'):
self.componentSet = V
elif hasattr(self, 'component_set'):
self.component_set = V

def addToComponentSet(self,V:list)->None:
""" add values in components set attribute
"""
if hasattr(self, 'componentSet'):
self.componentSet.extend(V)
elif hasattr(self, 'component_set'):
self.component_set.extend(V)

def delToCompnentsSet(self,V:list)->None:
""" del values in the components set attribute
"""
if hasattr(self, 'componentSet'):
for v in V:
self.componentSet.remove(v)
elif hasattr(self, 'component_set'):
for v in V:
self.component_set.remove(v)

def main():
DS = DomainStructure()

Expand Down
47 changes: 23 additions & 24 deletions DomainInterface/MasterModel.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,23 @@
import os

### import the DEVS module depending on the selected DEVS package in DEVSKernel directory
for pydevs_dir in builtins.__dict__['DEVS_DIR_PATH_DICT']:
if pydevs_dir == builtins.__dict__['DEFAULT_DEVS_DIRNAME']:
path = builtins.__dict__['DEVS_DIR_PATH_DICT'][pydevs_dir]
### split from DEVSKernel string and replace separator with point
d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')

### for py 3.X
import importlib
BaseDEVS = importlib.import_module("DEVSKernel%s.DEVS"%d)

#exec("import DEVSKernel%s.DEVS as BaseDEVS"%(d))
#for pydevs_dir in builtins.__dict__['DEVS_DIR_PATH_DICT']:
# if pydevs_dir == builtins.__dict__['DEFAULT_DEVS_DIRNAME']:
# path = builtins.__dict__['DEVS_DIR_PATH_DICT'][pydevs_dir]
# ### split from DEVSKernel string and replace separator with point
# d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')

# ### for py 3.X
# import importlib
# BaseDEVS = importlib.import_module("DEVSKernel%s.DEVS"%d)
#
# #exec("import DEVSKernel%s.DEVS as BaseDEVS"%(d))

#import DomainStructure
import DomainInterface.DomainStructure

### ====================================================================== #
class Master(BaseDEVS.CoupledDEVS):
#class Master(DomainStructure.DomainStructure):
#class Master(BaseDEVS.CoupledDEVS):
class Master(DomainInterface.DomainStructure):
""" Master class represent the high abstract level DEVS coupled model.
"""
FINAL_TIME = 10.0
Expand All @@ -62,19 +62,18 @@ class Master(BaseDEVS.CoupledDEVS):
def __init__(self, name=""):
""" Constructor method.
"""
# DomainStructure.DomainStructure.__init__(self, name=name)
BaseDEVS.CoupledDEVS.__init__(self, name=name)
DomainInterface.DomainStructure.__init__(self, name=name)
# BaseDEVS.CoupledDEVS.__init__(self, name=name)

self.FINAL_TIME = Master.FINAL_TIME

def getFlatComponentSet(self):
""" get the list of composing submodels - recursive build
"""
submodelList = {}
for submodel in self.componentSet:
submodelList.update(submodel.getFlatComponentSet())
return submodelList

# def getFlatComponentSet(self):
# """ get the list of composing submodels - recursive build
# """
# submodelList = {}
# for submodel in self.componentSet:
# submodelList.update(submodel.getFlatComponentSet())
# return submodelList

###
def __str__(self):
Expand Down
4 changes: 2 additions & 2 deletions ExperimentGenerator.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ def generateCode(self, model):
for ip in model.IPorts:
self.modelPythonDescription[model].append(self.dec+'self.addInPort("%s")' % ip.myID)

for c in model.componentSet:
for c in model.getComponentSet():
cname = c.__class__.__name__
clabel = c.blockModel.label
self.modelPythonDescription[model].append("")

self.modelHierarchyDescription.append('#%s-> %s' % (self.hierarchyDescDec, clabel))
if not hasattr(c, "componentSet"):
if not ( hasattr(c, "componentSet") or hasattr(c, "component_set")):
self.modelPythonDescription[model].append(self.dec+'self.%s=self.addSubModel(%s.%s("%s"))' % (clabel, cname, cname, clabel) )
self.modulePathFile.append(c.blockModel.python_path)
if self.listModules.count(cname)==0:
Expand Down
22 changes: 8 additions & 14 deletions Patterns/Strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import heapq
import threading
import inspect
import importlib

from PluginManager import PluginManager #trigger_event
from Utilities import getOutDir
Expand Down Expand Up @@ -514,20 +515,13 @@ def __init__(self, simulator = None):

def simulate(self, T = 100000000):
"""Simulate the model (Root-Coordinator).
"""

### for all available DEVS package (keys of built-in DEVS_DIR_PATH_DICT dictionary)
for pydevs_dir in builtins.__dict__['DEVS_DIR_PATH_DICT']:
### only the selected one
if pydevs_dir == builtins.__dict__['DEFAULT_DEVS_DIRNAME']:
path = builtins.__dict__['DEVS_DIR_PATH_DICT'][pydevs_dir]
## split from DEVSKernel string and replace separator with point
d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')
import importlib
simulator = importlib.import_module("DEVSKernel%s.simulator"%d)
#exec("from DEVSKernel%s.simulator import Simulator"%d)
"""


path = builtins.__dict__['DEVS_DIR_PATH_DICT'][builtins.__dict__['DEFAULT_DEVS_DIRNAME']]
d = re.split("DEVSKernel", path)[-1].replace(os.sep, '.')
simulator = importlib.import_module("DEVSKernel%s.simulator"%d)
#exec("from DEVSKernel%s.simulator import Simulator"%d)

S = simulator.Simulator(self._simulator.model)

### old version of PyPDEVS
Expand Down Expand Up @@ -586,7 +580,7 @@ def simulate(self, T = 100000000):
def SetClassicDEVSOption(self):
return True

class SimStrategy6(SimStrategy4):
class SimStrategy5(SimStrategy4):
""" Parallel strategy for PyPDEVS simulation
setClassicDEVS is False and confTransition in enabled
"""
Expand Down
2 changes: 1 addition & 1 deletion SimulationGUI.py
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ def OnOk(self, event):
sys.stdout = mainW.stdioWin

### test si le modele et bien charge
if (self.current_master == None) or (self.current_master.componentSet == []):
if (self.current_master == None) or (self.current_master.getComponentSet() == []):
return self.MsgBoxEmptyModel()

### dont erase the gauge if ntl
Expand Down
10 changes: 5 additions & 5 deletions SimulationNoGUI.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,11 @@ def makeSimulation(master, T, simu_name="simu", is_remote=False, json_trace=True
simuPusher = PrintPusher(simu_name)

### Get live stream URL if exist :
for m in [a for a in master.componentSet if hasattr(a, 'plotUrl')]:
for m in [a for a in master.getComponentSet() if hasattr(a, 'plotUrl')]:
if m.plotUrl != '':
json_report['output'].append({'label':m.name, 'plotUrl':m.plotUrl})
### Get live stream URL if exist :
for m in [a for a in master.componentSet if hasattr(a, 'pusherChannel')]:
for m in [a for a in master.getComponentSet() if hasattr(a, 'pusherChannel')]:
m.pusherChannel = simu_name
json_report['output'].append({'label':m.name, 'pusherChannel':m.pusherChannel})
# Send to user
Expand Down Expand Up @@ -162,13 +162,13 @@ def makeSimulation(master, T, simu_name="simu", is_remote=False, json_trace=True

### inform that data file has been generated
json_report['output'] = []
for m in [a for a in master.componentSet if hasattr(a, 'fileName')]:
for m in [a for a in master.getComponentSet() if hasattr(a, 'fileName')]:
for i in range(len(m.IPorts)):
fn ='%s%s.dat'%(m.fileName,str(i))
if os.path.exists(fn):
json_report['output'].append({'label':m.name+'_port_' + str(i),
'filename':os.path.basename(fn)})
for m in [a for a in master.componentSet if hasattr(a, 'plotUrl')]:
for m in [a for a in master.getComponentSet() if hasattr(a, 'plotUrl')]:
json_report['output'].append({'label':m.name, 'plotUrl':m.plotUrl})

with open(simu_name+'.report', 'w') as f:
Expand Down Expand Up @@ -219,7 +219,7 @@ def Run(self):
# diagram.Clean()
################################################################################################################
######### To Do : refaire l'enregistrement du chemin d'enregistrements des resultats du to_disk ###################
for m in self.master.componentSet:
for m in self.master.getComponentSet():
if str(m)=='To_Disk':
dir_fn = os.path.dirname(diagram.last_name_saved).replace('\t','').replace(' ','')
label = m.getBlockModel()
Expand Down