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
2 changes: 1 addition & 1 deletion Components.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
import ZipManager

from ReloadModule import recompile
from Utilities import GetActiveWindow, path_to_module, install_and_import, printOnStatusBar
from Utilities import GetActiveWindow, path_to_module, printOnStatusBar
from NetManager import Net
from SimpleFrameEditor import FrameEditor
from which import which
Expand Down
1 change: 1 addition & 0 deletions DEVSKernel/PyPDEVS/pypdevs221/src/classicDEVSWrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@ def outputFnc(self):
:returns: the changed dictionary
"""
retval = self.model.outputFnc()
print(self.model, retval)
return {i: [retval[i]] for i in retval}
1 change: 1 addition & 0 deletions DEVSKernel/PyPDEVS/pypdevs221/src/solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ def coupledOutputGenerationClassic(self, time):
# Perform all selects
imminent.sort()
pending = imminent

level = 1
while len(pending) > 1:
# Take the model each time, as we need to make sure that the selectHierarchy is valid everywhere
Expand Down
Empty file removed DEVSimPy-v4_0_Container.svg
Empty file.
34 changes: 14 additions & 20 deletions Domain/Collector/MessagesCollector.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,8 @@ def __init__(self, fileName = os.path.join(os.getcwd(),"result%d"%random.randint
self.ext = ext
self.comma = comma

# State variable
self.state = {'status': 'IDLE', 'sigma': INFINITY}

self.initPhase('IDLE',INFINITY)

for np in range(10000):
fn = "%s%d%s"%(self.fileName, np, self.ext)
if os.path.exists(fn):
Expand All @@ -52,33 +51,28 @@ def extTransition(self, *args):

for port in self.IPorts:
### adapted with PyPDEVS
if hasattr(self, 'peek'):
msg = self.peek(port)
np = port.myID
else:
inputs = args[0]
msg = inputs.get(port)
np=port.port_id

msg = self.peek(port, *args)

if msg:
np = self.getPortId(port)

### filename
fn = "%s%d%s"%(self.fileName, np, self.ext)
fn = "%s%s%s"%(self.fileName, str(np), self.ext)

with open(fn,'a') as f: f.write("%s\n"%(str(msg)))
del msg

self.state["sigma"] = 0
self.state["status"] = 'ACTIF'
return self.state
self.holdIn('ACTIF',0)

return self.getState()

###
def intTransition(self):
self.state["status"] = 'IDLE'
self.state["sigma"] = INFINITY
return self.state
self.passivateIn('IDLE')
return self.getState()

###
def timeAdvance(self):return self.state['sigma']
def timeAdvance(self):return self.getSigma()

###
def __str__(self):return "MessagesCollector"
def __str__(self):return "MessagesCollector"
8 changes: 2 additions & 6 deletions Domain/Collector/Plotly_For_Class.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,8 @@
from DomainInterface.DomainBehavior import DomainBehavior
from DomainInterface.Object import Message

try:
import plotly.plotly as py
import plotly.graph_objs as go
except:
import chart_studio.plotly as py
import plotly.graph_objects as go
import chart_studio.plotly as py
import plotly.graph_objects as go


### Model class ----------------------------------------------------------------
Expand Down
23 changes: 9 additions & 14 deletions Domain/Collector/QuickScope.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ def __init__(self, fusion = True, eventAxis = False):
"""
DomainBehavior.__init__(self)

# State variable
self.state = {'status': 'INACTIF', 'sigma': INFINITY}

# fusioning curve
self.fusion = fusion
# replace time axis with step axis
Expand All @@ -41,19 +38,18 @@ def __init__(self, fusion = True, eventAxis = False):

self.t = INFINITY

# State variable
self.initPhase('INACTIF',INFINITY)

###
def extTransition(self, *args):
"""
"""

for np in range(len(self.IPorts)):
### adapted with PyPDEVS
if hasattr(self, 'peek'):
msg = self.peek(self.IPorts[np])
else:
inputs = args[0]
msg = inputs.get(self.IPorts[np])

msg = self.peek(self.IPorts[np], *args)

if msg is not None:
# if step axis is chosen
if self.eventAxis:
Expand All @@ -76,16 +72,15 @@ def extTransition(self, *args):
del msg

self.state['sigma'] = 0
return self.state
return self.getState()

###
def intTransition(self):
self.state["status"] = 'IDLE'
self.state["sigma"] = INFINITY
return self.state
self.passivateIn('IDLE')
return self.getState()

###
def timeAdvance(self):return self.state['sigma']
def timeAdvance(self):return self.getSigma()

###
def __str__(self):return "QuickScope"
5 changes: 3 additions & 2 deletions Domain/Generator/Generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ def intTransition(self):
s = INFINITY

self.state['sigma'] = s
return self.state

def outputFnc(self):
### si la listValues est vide, cela veux dire qu'on veut toutes les valeurs des lignes sur une sortie
Expand All @@ -69,11 +70,11 @@ def outputFnc(self):
msg = Message(data, self.timeNext)
i = self.__listValues.index(item)

self.poke(self.OPorts[i], msg)
return self.poke(self.OPorts[i], msg)
else:
data = [self.V[0].pop(0), 0.0, 0.0]
msg = Message(data, self.timeNext)
self.poke(self.OPorts[0], msg)
return self.poke(self.OPorts[0], msg)

def timeAdvance(self): return self.state['sigma']

Expand Down
2 changes: 1 addition & 1 deletion Domain/Generator/RandomGenerator.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def outputFnc(self):
"""
numberMessage = random.randint(1, len(self.OPorts)) # Number message to send
portsToSend = random.sample(self.OPorts, numberMessage) # The port with number message

for port in portsToSend:
value = random.randint(self.minValue, self.maxValue)
self.msg.value = [value, 0.0, 0.0]
Expand Down
42 changes: 26 additions & 16 deletions DomainInterface/DomainBehavior.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class DomainBehavior(BaseDEVS.AtomicDEVS):
"""

###
def __init__(self, name=""):
def __init__(self, name:str=""):
""" Constructor.
"""

Expand All @@ -74,49 +74,56 @@ def __init__(self, name=""):
DomainBehavior.getMsgValue = DomainBehavior.getMsgPyDEVSValue
DomainBehavior.getMsgTime = DomainBehavior.getMsgPyDEVSTime
DomainBehavior.getPortId = DomainBehavior.getPortIdFromPyDEVS
else:
else:
DomainBehavior.peek = DomainBehavior.peekPyPDEVS
DomainBehavior.poke = DomainBehavior.pokePyPDEVS
DomainBehavior.getMsgValue = DomainBehavior.getMsgPyPDEVSValue
DomainBehavior.getMsgTime = DomainBehavior.getMsgPyPDEVSTime
DomainBehavior.getPortId = DomainBehavior.getPortIdFromPyPDEVS

def initPhase(self, phase="IDLE", sigma=0.0):
def initPhase(self, phase:str="IDLE", sigma:float=0.0)->None:
self.state = {'status':phase, 'sigma':sigma}

def phaseIs(self, phase):
def setSigma(self,sigma:float=0.0)->None:
self.state['sgima'] = sigma

def phaseIs(self, phase:str)->bool:
return phase == self.state['status']

def passivate(self):
def passivate(self)->None:
self.passivateIn('passive')

def passivateIn(self, phase=""):
def passivateIn(self, phase:str="")->None:
self.holdIn(phase, sigma=INFINITY)

def holdIn(self, phase="", sigma=0.0):
def holdIn(self, phase:str="", sigma:float=0.0)->None:
''' "Holding in phase " + phase + " for time " + sigma
'''
self.state['status'] = phase
self.state['sigma'] = sigma

###
def pokePyPDEVS(self, p, v):
def pokePyPDEVS(self, p, v)->dict:
### adapted with PyPDEVS
from .Object import Message
if isinstance(v, Message):
v = (v.value,v.time)
return {p:v}

def peekPyPDEVS(self, port, args):
def peekPyPDEVS(self, port, *args):
### adapted with PyPDEVS
#inputs = args[0]
return args.get(port)
inputs = args[0]
return inputs.get(port)

### getters
def getPortIdFromPyDEVS(self, p):
return p.myID

def getPortIdFromPyPDEVS(self,p):
return p.port_id
if hasattr(p, 'myID'):
return p.myID
else:
return p.port_id

def getMsgPyDEVSValue(self, msg):
return msg.value
Expand All @@ -133,23 +140,26 @@ def getMsgPyPDEVSTime(self, msg):
def getFlatComponentSet (self):
return {self.name : self}

def getSigma(self):
def getSigma(self)->float:
return self.state['sigma']

def getStatus(self):
def getStatus(self)->str:
return self.state['status']

def getState(self):
def getState(self)->dict:
return self.state

def __str__(self):
def __str__(self)->str:
"""
"""
if hasattr(self, 'bloclModel'):
return self.blockModel.label
else:
return self.__class__.__name__

def __lt__(self, other):
return self.state['sigma'] > other.state['sigma']

def main():
DB = DomainBehavior()

Expand Down
28 changes: 22 additions & 6 deletions ImportLibrary.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,15 @@
from Decorators import BuzyCursorNotification

class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin):
def __init__(self, parent):
wx.ListCtrl.__init__(self, parent, wx.NewIdRef(), style=wx.LC_REPORT | wx.SUNKEN_BORDER|wx.LC_SORT_ASCENDING)
CheckListCtrlMixin.__init__(self)
def __init__(self, *args, **kw):
wx.ListCtrl.__init__(self, *args, **kw)
ListCtrlAutoWidthMixin.__init__(self)

if wx.VERSION_STRING >= '4.1.0':
self.EnableCheckBoxes(True)
self.IsChecked = self.IsItemChecked
else:
CheckListCtrlMixin.__init__(self)

self.InsertColumn(0, _('Name'), width=140)
self.InsertColumn(1, _('Size [Ko]'), width=80)
Expand All @@ -63,6 +68,17 @@ def __init__(self, parent):

self.SetFont(font)

# self.Bind(wx.EVT_LIST_ITEM_CHECKED, self.OnCheck)
# self.Bind(wx.EVT_LIST_ITEM_UNCHECKED, self.OnUnCheck)

# def OnCheck(self, evt):
# index = evt.GetItem().GetId()
# self.CheckItem(index, True)

# def OnUnCheck(self, evt):
# index = evt.GetItem().GetId()
# self.CheckItem(index, False)

def AddItem(self, path, dName, check=False):
""" Add item to the list
"""
Expand Down Expand Up @@ -206,7 +222,7 @@ def __init__(self, *args, **kwargs):
rightPanel = wx.Panel(panel, wx.NewIdRef())

### Check list of libraries
self._cb = CheckListCtrl(rightPanel)
self._cb = CheckListCtrl(parent=rightPanel, style=wx.LC_REPORT | wx.SUNKEN_BORDER|wx.LC_SORT_ASCENDING)

try:
if wx.Platform == '__WXMSW__':
Expand Down Expand Up @@ -286,7 +302,7 @@ def CheckDomainPath(self):
def OnSelectAll(self, event):
num = self._cb.GetItemCount()
for i in range(num):
self._cb.CheckItem(i)
self._cb.CheckItem(i,True)

def OnDeselectAll(self, event):
num = self._cb.GetItemCount()
Expand Down Expand Up @@ -418,7 +434,7 @@ def OnDelete(self, evt):
def EvtCheckListBox(self, evt):
index = self._cb.GetFocusedItem()
label = self._cb.GetItemText(index)

#met a jour le dico des elements selectionnes
if self._cb.IsChecked(index) and label not in self._selectedItem:
self._selectedItem.update({str(label):index})
Expand Down
Loading