Skip to content

Commit 5158e1a

Browse files
authored
fix windows component path (#1544)
* check parameters has mappingEntry
1 parent 47eeb55 commit 5158e1a

5 files changed

Lines changed: 37 additions & 24 deletions

File tree

src/OMSimulatorPython/component.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class Component:
1010
def __init__(self, name: CRef, fmuPath: Path | str, connectors=None, unitDefinitions=None, enumerationDefinitions=None):
1111
from OMSimulator.ssm import SSM
1212
self.name = CRef(name)
13-
self.fmuPath = Path(fmuPath)
13+
self.fmuPath = Path(fmuPath).as_posix()
1414
self.connectors = connectors or list()
1515
self.unitDefinitions = unitDefinitions or list()
1616
self.enumerationDefinitions = enumerationDefinitions or list()
@@ -40,6 +40,9 @@ def addSSVReference(self, resource1: str, resource2: str | None = None):
4040
def mapParameter(self, source: str, target: str):
4141
self.parameterMapping.mapParameter(source, target)
4242

43+
def hasMappingEntry(self, source: str) -> bool:
44+
return str(source) in self.parameterMapping.mappingEntry
45+
4346
def swapSSVReference(self, resource1: str, resource2: str):
4447
self.removeSSVReference(resource1)
4548
self.addSSVReference(resource2)

src/OMSimulatorPython/ssp.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -254,11 +254,15 @@ def setValue(self, cref: CRef, value, unit = None, description = None):
254254
raise ValueError("No active variant set in the SSP.")
255255

256256
## look up in the resource and get the component path
257-
resource = self._getComponentResourcePath(cref)
258-
257+
(resource, component) = self._getComponentResourcePath(cref)
259258
# Check if the resource exists and validate the variable
260-
fmu_inst = self.resources.get(resource)
261-
if fmu_inst and not fmu_inst.varExist(cref.last()):
259+
fmu_inst = self.resources.get(str(resource))
260+
261+
# Skip FMU variable validation if the component has a mapping entry
262+
if component and component.hasMappingEntry(cref.last()):
263+
pass
264+
else:
265+
if fmu_inst and not fmu_inst.varExist(cref.last()):
262266
raise KeyError(f"Variable '{cref.last()}' does not exist in the variables list of component '{resource}'")
263267

264268
self.activeVariant.setValue(cref, value, unit, description)
@@ -268,11 +272,15 @@ def getValue(self, cref: CRef):
268272
raise ValueError("No active variant set in the SSP.")
269273

270274
## look up in the resource and get the component path
271-
resource = self._getComponentResourcePath(cref)
272-
275+
(resource, component) = self._getComponentResourcePath(cref)
273276
# Check if the resource exists and validate the variable
274-
fmu_inst = self.resources.get(resource)
275-
if fmu_inst and not fmu_inst.varExist(cref.last()):
277+
fmu_inst = self.resources.get(str(resource))
278+
279+
# Skip FMU variable validation if the component has a mapping entry
280+
if component and component.hasMappingEntry(cref.last()):
281+
pass
282+
else:
283+
if fmu_inst and not fmu_inst.varExist(cref.last()):
276284
raise KeyError(f"Variable '{cref.last()}' does not exist in the variables list of component '{resource}'")
277285

278286
self.activeVariant.getValue(cref)

src/OMSimulatorPython/system.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -491,14 +491,14 @@ def _getComponentResourcePath(self, cref):
491491
## check if element is a top level system connectors
492492
## or allow non existing connectors to support parameter mapping throgh SSM inline or ssm file by checking if cref
493493
if self._connectorExists(cref) or cref.is_root():
494-
return
494+
return (None, None)
495495

496496
if element is None:
497497
raise ValueError(f"Element '{element_name}' not found in System '{self.name}'")
498498

499499
match element:
500500
case Component():
501-
return element.fmuPath
501+
return (element.fmuPath, element)
502502
case System():
503503
return element._getComponentResourcePath(cref.pop_first())
504504
case _:

testsuite/api/setMappingSSM3.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,37 @@
2222
model.activeVariant.system.addConnector(Connector('input1', Causality.input, SignalType.Real))
2323
model.activeVariant.system.addConnector(Connector('input2', Causality.input, SignalType.Real))
2424

25-
model.setValue(CRef('default','connector_param'), 2.0)
26-
model.setValue(CRef('default','connector_input'), 3.0)
27-
2825
# map top level parameters
2926
model.mapParameter(CRef('default'), 'connector_param', 'param1')
3027
model.mapParameter(CRef('default'), 'connector_param', 'param2')
3128
model.mapParameter(CRef('default'), 'connector_param', 'param3')
3229
model.mapParameter(CRef('default'), 'connector_input', 'input1')
3330
model.mapParameter(CRef('default'), 'connector_input', 'input2')
3431

32+
model.setValue(CRef('default','connector_param'), 2.0)
33+
model.setValue(CRef('default','connector_input'), 3.0)
34+
3535
model.addSystem(CRef('default', 'sub-system'))
3636
## add top level sub-system connector
3737
model.activeVariant.system.elements[CRef('sub-system')].addConnector(Connector('param2', Causality.parameter, SignalType.Real))
3838
model.activeVariant.system.elements[CRef('sub-system')].addConnector(Connector('input2', Causality.input, SignalType.Real))
3939

40-
model.setValue(CRef('default', 'sub-system', 'connector_param'), 20.0)
41-
model.setValue(CRef('default', 'sub-system', 'connector_input'), 30.0)
4240
## map sub-system parameters
4341
model.mapParameter(CRef('default', 'sub-system'), 'connector_param', 'param2')
4442
model.mapParameter(CRef('default', 'sub-system'), 'connector_input', 'input2')
4543

44+
model.setValue(CRef('default', 'sub-system', 'connector_param'), 20.0)
45+
model.setValue(CRef('default', 'sub-system', 'connector_input'), 30.0)
46+
4647
model.addResource('../resources/Modelica.Blocks.Math.Add.fmu', new_name='resources/Add.fmu')
4748
component1 = model.addComponent(CRef('default', 'Add1'), 'resources/Add.fmu')
48-
model.setValue(CRef("default", "Add1", "connector_param"), 40.0)
49+
4950
## map component parameters
5051
model.mapParameter(CRef('default', 'Add1'), 'connector_param', 'k1')
5152
model.mapParameter(CRef('default', 'Add1'), 'connector_param', 'k2')
5253

54+
model.setValue(CRef("default", "Add1", "connector_param"), 40.0)
55+
5356
model.export('setMappingSSM3.ssp')
5457

5558
model2 = SSP('setMappingSSM3.ssp')

testsuite/simulation/SimpleSimulation14.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,19 @@
3535
model.setSolver(CRef('default', 'sub-system', 'Gain2'), 'solver2')
3636

3737

38-
model.setValue(CRef('default','mapped_param1'), 200.0)
39-
model.setValue(CRef('default','mapped_input1'), 300.0)
40-
model.setValue(CRef('default','Gain1','mapped_Gain_k'), 2.0)
41-
model.setValue(CRef('default','sub-system','mapped_sub_system_input'), 400.0)
42-
model.setValue(CRef('default','sub-system','Gain2','mapped_sub_system_Gain2_k'), 500.0)
43-
44-
4538
# map parameters at heirarchy level
4639
model.mapParameter(CRef('default'), 'mapped_param1', 'param1')
4740
model.mapParameter(CRef('default'), 'mapped_input1', 'input1')
4841
model.mapParameter(CRef('default', 'Gain1'), 'mapped_Gain_k', 'k')
4942
model.mapParameter(CRef('default', 'sub-system'), 'mapped_sub_system_input', 'input')
5043
model.mapParameter(CRef('default', 'sub-system', 'Gain2'), 'mapped_sub_system_Gain2_k', 'k')
5144

45+
model.setValue(CRef('default','mapped_param1'), 200.0)
46+
model.setValue(CRef('default','mapped_input1'), 300.0)
47+
model.setValue(CRef('default','Gain1','mapped_Gain_k'), 2.0)
48+
model.setValue(CRef('default','sub-system','mapped_sub_system_input'), 400.0)
49+
model.setValue(CRef('default','sub-system','Gain2','mapped_sub_system_Gain2_k'), 500.0)
50+
5251
## System.Input to Element.Input
5352
model.addConnection(CRef('default', 'input1'), CRef('default', 'Gain1', 'u'))
5453
model.addConnection(CRef('default', 'Gain1', 'y'), CRef('default', 'Add1', 'u1'))

0 commit comments

Comments
 (0)