armodel 1.3.0__py3-none-any.whl → 1.4.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- armodel/__init__.py +2 -1
- armodel/cli/arxml_dump_cli.py +8 -6
- armodel/cli/arxml_format_cli.py +72 -0
- armodel/cli/connector2xlsx_cli.py +75 -0
- armodel/cli/connector_update_cli.py +77 -0
- armodel/cli/swc_list_cli.py +2 -2
- armodel/data_models/__init__.py +0 -0
- armodel/data_models/sw_connector.py +22 -0
- armodel/lib/__init__.py +1 -1
- armodel/lib/sw_component.py +34 -0
- armodel/models/__init__.py +8 -2
- armodel/models/annotation.py +20 -0
- armodel/models/ar_object.py +184 -0
- armodel/models/ar_package.py +144 -14
- armodel/models/ar_ref.py +74 -8
- armodel/models/bsw_module_template.py +97 -25
- armodel/models/calibration.py +119 -0
- armodel/models/common_structure.py +203 -36
- armodel/models/communication.py +17 -0
- armodel/models/data_def_properties.py +16 -0
- armodel/models/data_dictionary.py +46 -9
- armodel/models/data_prototype.py +24 -5
- armodel/models/datatype.py +86 -19
- armodel/models/end_to_end_protection.py +67 -0
- armodel/models/general_structure.py +72 -17
- armodel/models/global_constraints.py +40 -0
- armodel/models/implementation.py +80 -32
- armodel/models/m2_msr.py +82 -6
- armodel/models/multilanguage_data.py +42 -0
- armodel/models/per_instance_memory.py +14 -0
- armodel/models/port_interface.py +27 -4
- armodel/models/port_prototype.py +48 -23
- armodel/models/record_layout.py +118 -0
- armodel/models/service_mapping.py +11 -0
- armodel/models/service_needs.py +48 -0
- armodel/models/sw_component.py +257 -43
- armodel/models/unit.py +14 -0
- armodel/parser/abstract_arxml_parser.py +248 -0
- armodel/parser/arxml_parser.py +1550 -648
- armodel/parser/connector_xlsx_parser.py +190 -0
- armodel/parser/excel_parser.py +18 -0
- armodel/report/__init__.py +1 -0
- armodel/report/connector_xls_report.py +76 -0
- armodel/report/excel_report.py +42 -0
- armodel/tests/__init__.py +0 -0
- armodel/tests/test_armodel/__init__.py +0 -0
- armodel/tests/test_armodel/models/__init__.py +0 -0
- armodel/tests/test_armodel/models/test_ar_object.py +152 -0
- armodel/tests/test_armodel/models/test_ar_package.py +294 -0
- armodel/tests/test_armodel/models/test_ar_ref.py +74 -0
- armodel/tests/test_armodel/models/test_bsw_module_template.py +46 -0
- armodel/tests/test_armodel/models/test_common_structure.py +73 -0
- armodel/tests/test_armodel/models/test_data_dictionary.py +29 -0
- armodel/tests/test_armodel/models/test_data_prototype.py +86 -0
- armodel/tests/test_armodel/models/test_datatype.py +239 -0
- armodel/tests/test_armodel/models/test_general_structure.py +50 -0
- armodel/tests/test_armodel/models/test_implementation.py +26 -0
- armodel/tests/test_armodel/models/test_m2_msr.py +77 -0
- armodel/tests/test_armodel/models/test_port_interface.py +198 -0
- armodel/tests/test_armodel/models/test_port_prototype.py +14 -0
- armodel/tests/test_armodel/parser/__init__.py +0 -0
- armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +192 -0
- armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
- armodel/writer/__init__.py +1 -0
- armodel/writer/abstract_arxml_writer.py +123 -0
- armodel/writer/arxml_writer.py +1755 -0
- {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/METADATA +124 -4
- armodel-1.4.3.dist-info/RECORD +78 -0
- armodel-1.4.3.dist-info/entry_points.txt +7 -0
- armodel-1.3.0.dist-info/RECORD +0 -31
- armodel-1.3.0.dist-info/entry_points.txt +0 -4
- {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/LICENSE +0 -0
- {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/WHEEL +0 -0
- {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/top_level.txt +0 -0
armodel/models/sw_component.py
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
from typing import List, Dict
|
|
2
2
|
from abc import ABCMeta
|
|
3
|
+
|
|
4
|
+
from .service_mapping import RoleBasedPortAssignment
|
|
5
|
+
from .per_instance_memory import PerInstanceMemory
|
|
6
|
+
from .service_needs import NvBlockNeeds, RoleBasedDataAssignment, ServiceNeeds
|
|
7
|
+
from .ar_object import ARBoolean, ARLiteral
|
|
3
8
|
from .general_structure import ARElement, Identifiable, ARObject
|
|
4
|
-
from .ar_ref import AutosarVariableRef,
|
|
5
|
-
from .ar_ref import
|
|
6
|
-
from .
|
|
7
|
-
from .
|
|
8
|
-
from .
|
|
9
|
+
from .ar_ref import AutosarParameterRef, AutosarVariableRef, InnerPortGroupInCompositionInstanceRef, ParameterInAtomicSWCTypeInstanceRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef, TRefType
|
|
10
|
+
from .ar_ref import RefType, PortInCompositionTypeInstanceRef, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
|
|
11
|
+
from .ar_ref import RVariableInAtomicSwcInstanceRef, RModeInAtomicSwcInstanceRef
|
|
12
|
+
from .port_prototype import RPortPrototype, PPortPrototype, PortPrototype
|
|
13
|
+
from .data_prototype import ParameterDataPrototype, VariableDataPrototype
|
|
14
|
+
from .common_structure import ExecutableEntity, InternalBehavior, ValueSpecification
|
|
9
15
|
|
|
10
16
|
class VariableAccess(Identifiable):
|
|
11
17
|
def __init__(self, parent: ARObject, short_name):
|
|
@@ -15,15 +21,23 @@ class VariableAccess(Identifiable):
|
|
|
15
21
|
self.parent = parent
|
|
16
22
|
self.local_variable_ref = None # type: RefType
|
|
17
23
|
|
|
18
|
-
class
|
|
24
|
+
class AbstractAccessPoint(Identifiable):
|
|
25
|
+
__metaclass__ = ABCMeta
|
|
26
|
+
|
|
19
27
|
def __init__(self, parent: ARObject, short_name: str):
|
|
28
|
+
if type(self) == AbstractAccessPoint:
|
|
29
|
+
raise NotImplementedError("ARObject is an abstract class.")
|
|
30
|
+
|
|
20
31
|
super().__init__(parent, short_name)
|
|
21
32
|
|
|
22
|
-
|
|
23
|
-
__metaclass__ = ABCMeta
|
|
33
|
+
self.return_value_provision = None
|
|
24
34
|
|
|
35
|
+
class ParameterAccess(AbstractAccessPoint):
|
|
25
36
|
def __init__(self, parent: ARObject, short_name: str):
|
|
26
|
-
super().__init__(parent, short_name)
|
|
37
|
+
super().__init__(parent, short_name)
|
|
38
|
+
|
|
39
|
+
self.accessed_parameter = None # type: AutosarParameterRef
|
|
40
|
+
self.sw_data_def_props = None #
|
|
27
41
|
|
|
28
42
|
class ServerCallPoint(AbstractAccessPoint):
|
|
29
43
|
__metaclass__ = ABCMeta
|
|
@@ -31,7 +45,7 @@ class ServerCallPoint(AbstractAccessPoint):
|
|
|
31
45
|
def __init__(self, parent: ARObject, short_name: str):
|
|
32
46
|
super().__init__(parent, short_name)
|
|
33
47
|
self.operation_iref = None # type: ROperationInAtomicSwcInstanceRef
|
|
34
|
-
self.timeout =
|
|
48
|
+
self.timeout = None # type: float
|
|
35
49
|
|
|
36
50
|
class SynchronousServerCallPoint(ServerCallPoint):
|
|
37
51
|
def __init__(self, parent: ARObject, short_name: str):
|
|
@@ -58,21 +72,21 @@ class InternalTriggeringPoint(AbstractAccessPoint):
|
|
|
58
72
|
class RunnableEntity(ExecutableEntity):
|
|
59
73
|
def __init__(self, parent: ARObject, short_name: str):
|
|
60
74
|
super().__init__(parent, short_name)
|
|
61
|
-
self.can_be_invoked_concurrently =
|
|
62
|
-
self.data_read_accesses = {} # Type: Dict[VariableAccess]
|
|
63
|
-
self.data_received_point_by_arguments = {} # Type: Dict[VariableAccess]
|
|
64
|
-
self.data_received_point_by_values = {} # Type: Dict[VariableAccess]
|
|
65
|
-
self.data_send_points = {} # Type: Dict[VariableAccess]
|
|
66
|
-
self.data_write_accesses = {} # Type: Dict[VariableAccess]
|
|
67
|
-
self.written_local_variables = {} # Type: Dict[VariableAccess]
|
|
68
|
-
self.read_local_variables = {} # Type: Dict[VariableAccess]
|
|
75
|
+
self.can_be_invoked_concurrently = None # Type: ARBoolean
|
|
76
|
+
self.data_read_accesses = {} # Type: Dict[str, VariableAccess]
|
|
77
|
+
self.data_received_point_by_arguments = {} # Type: Dict[str, VariableAccess]
|
|
78
|
+
self.data_received_point_by_values = {} # Type: Dict[str, VariableAccess]
|
|
79
|
+
self.data_send_points = {} # Type: Dict[str, VariableAccess]
|
|
80
|
+
self.data_write_accesses = {} # Type: Dict[str, VariableAccess]
|
|
81
|
+
self.written_local_variables = {} # Type: Dict[str, VariableAccess]
|
|
82
|
+
self.read_local_variables = {} # Type: Dict[str, VariableAccess]
|
|
69
83
|
self.external_triggering_points = {} # Type: Dict[InternalTriggeringPoint]
|
|
70
84
|
self.internal_triggering_points = {}
|
|
71
85
|
self.mode_access_points = {}
|
|
72
86
|
self.mode_switch_points = {}
|
|
73
|
-
self.parameter_accesses = {}
|
|
74
|
-
self.server_call_points = {} # Type: Dict[ServerCallPoint]
|
|
75
|
-
self.wait_points = {} # Type: Dict[WaitPoint]
|
|
87
|
+
self.parameter_accesses = {} # Type: Dict[str, ParameterAccess]
|
|
88
|
+
self.server_call_points = {} # Type: Dict[str, ServerCallPoint]
|
|
89
|
+
self.wait_points = {} # Type: Dict[str, WaitPoint]
|
|
76
90
|
self.symbol = ""
|
|
77
91
|
|
|
78
92
|
def _createVariableAccess(self, short_name, variable_accesses: Dict[str, VariableAccess]):
|
|
@@ -86,6 +100,12 @@ class RunnableEntity(ExecutableEntity):
|
|
|
86
100
|
|
|
87
101
|
def getDataReadAccesses(self) -> List[VariableAccess]:
|
|
88
102
|
return sorted(self.data_read_accesses.values(), key=lambda v: v.short_name)
|
|
103
|
+
|
|
104
|
+
def createDataWriteAccess(self, short_name: str) -> VariableAccess:
|
|
105
|
+
return self._createVariableAccess(short_name, self.data_write_accesses)
|
|
106
|
+
|
|
107
|
+
def getDataWriteAccesses(self) -> List[VariableAccess]:
|
|
108
|
+
return sorted(self.data_write_accesses.values(), key=lambda v: v.short_name)
|
|
89
109
|
|
|
90
110
|
def createDataReceivePointByArgument(self, short_name: str) -> VariableAccess:
|
|
91
111
|
return self._createVariableAccess(short_name, self.data_received_point_by_arguments)
|
|
@@ -117,6 +137,15 @@ class RunnableEntity(ExecutableEntity):
|
|
|
117
137
|
def getWrittenLocalVariables(self) -> List[VariableAccess]:
|
|
118
138
|
return sorted(self.written_local_variables.values(), key=lambda v: v.short_name)
|
|
119
139
|
|
|
140
|
+
def createParameterAccess(self, short_name: str) -> ParameterAccess:
|
|
141
|
+
if (short_name not in self.server_call_points):
|
|
142
|
+
parameter_access = ParameterAccess(self, short_name)
|
|
143
|
+
self.parameter_accesses[short_name] = parameter_access
|
|
144
|
+
return self.parameter_accesses[short_name]
|
|
145
|
+
|
|
146
|
+
def getParameterAccesses(self) -> List[ParameterAccess]:
|
|
147
|
+
return sorted(self.parameter_accesses.values(), key= lambda o: o.short_name)
|
|
148
|
+
|
|
120
149
|
def createSynchronousServerCallPoint(self, short_name: str) -> SynchronousServerCallPoint:
|
|
121
150
|
if (short_name not in self.server_call_points):
|
|
122
151
|
server_call_point = SynchronousServerCallPoint(self, short_name)
|
|
@@ -154,7 +183,15 @@ class AbstractEvent(Identifiable):
|
|
|
154
183
|
class RTEEvent(AbstractEvent):
|
|
155
184
|
def __init__(self, parent: ARObject, short_name: str):
|
|
156
185
|
super().__init__(parent, short_name)
|
|
157
|
-
|
|
186
|
+
|
|
187
|
+
self.start_on_event_ref = None # type: RefType
|
|
188
|
+
self.disabled_mode_irefs = [] # type: List[RModeInAtomicSwcInstanceRef]
|
|
189
|
+
|
|
190
|
+
def addDisabledModeIRef(self, iref: RModeInAtomicSwcInstanceRef):
|
|
191
|
+
self.disabled_mode_irefs.append(iref)
|
|
192
|
+
|
|
193
|
+
def getDisabledModeIRefs(self) -> List[RModeInAtomicSwcInstanceRef]:
|
|
194
|
+
return self.disabled_mode_irefs
|
|
158
195
|
|
|
159
196
|
class AsynchronousServerCallReturnsEvent(RTEEvent):
|
|
160
197
|
def __init__(self, parent: ARObject, short_name: str):
|
|
@@ -178,16 +215,22 @@ class SwcModeSwitchEvent(RTEEvent):
|
|
|
178
215
|
def __init__(self, parent: ARObject, short_name: str):
|
|
179
216
|
super().__init__(parent, short_name)
|
|
180
217
|
|
|
181
|
-
self._activation =
|
|
182
|
-
self.mode_irefs = []
|
|
218
|
+
self._activation = None # type: ARLiteral
|
|
219
|
+
self.mode_irefs = [] # type: List[RModeInAtomicSwcInstanceRef]
|
|
220
|
+
|
|
221
|
+
def addModeIRef(self, iref: RModeInAtomicSwcInstanceRef):
|
|
222
|
+
self.mode_irefs.append(iref)
|
|
223
|
+
|
|
224
|
+
def getModeIRefs(self) -> List[RModeInAtomicSwcInstanceRef]:
|
|
225
|
+
return self.mode_irefs
|
|
183
226
|
|
|
184
227
|
@property
|
|
185
|
-
def activation(self) ->
|
|
228
|
+
def activation(self) -> ARLiteral:
|
|
186
229
|
return self._activation
|
|
187
230
|
|
|
188
231
|
@activation.setter
|
|
189
|
-
def activation(self, value:
|
|
190
|
-
if value not in ("ON-ENTRY", "ON-EXIT", "ON-TRANSITION"):
|
|
232
|
+
def activation(self, value: ARLiteral):
|
|
233
|
+
if value.getValue() not in ("ON-ENTRY", "ON-EXIT", "ON-TRANSITION"):
|
|
191
234
|
raise ValueError("Invalid activation <%s> of SwcModeSwitchEvent <%s>" % (value, self.short_name))
|
|
192
235
|
self._activation = value
|
|
193
236
|
|
|
@@ -228,10 +271,93 @@ class InternalTriggerOccurredEvent(RTEEvent):
|
|
|
228
271
|
|
|
229
272
|
self.event_source_ref = None # type: RefType
|
|
230
273
|
|
|
274
|
+
class PortDefinedArgumentValue(ARObject):
|
|
275
|
+
def __init__(self):
|
|
276
|
+
super().__init__()
|
|
277
|
+
|
|
278
|
+
self.value = None # type: ValueSpecification
|
|
279
|
+
self.value_type = None # type: TRefType
|
|
280
|
+
|
|
281
|
+
class PortAPIOption(ARObject):
|
|
282
|
+
def __init__(self):
|
|
283
|
+
super().__init__()
|
|
284
|
+
|
|
285
|
+
self.enable_take_address = None # type: ARBoolean
|
|
286
|
+
self.indirect_api = None # type: ARBoolean
|
|
287
|
+
self.port_ref = None # type: RefType
|
|
288
|
+
self._port_arg_values = [] # type: List[PortDefinedArgumentValue]
|
|
289
|
+
|
|
290
|
+
def addPortArgValue(self, value:PortDefinedArgumentValue):
|
|
291
|
+
self._port_arg_values.append(value)
|
|
292
|
+
|
|
293
|
+
def getPortArgValues(self) -> List[PortDefinedArgumentValue]:
|
|
294
|
+
return self._port_arg_values
|
|
295
|
+
|
|
296
|
+
class ServiceDependency(Identifiable):
|
|
297
|
+
def __init__(self, parent: ARObject, short_name: str):
|
|
298
|
+
super().__init__(parent, short_name)
|
|
299
|
+
|
|
300
|
+
class SwcServiceDependency(ServiceDependency):
|
|
301
|
+
def __init__(self, parent: ARObject, short_name: str):
|
|
302
|
+
super().__init__(parent, short_name)
|
|
303
|
+
|
|
304
|
+
self._assigned_data = []
|
|
305
|
+
self._assigned_ports = []
|
|
306
|
+
|
|
307
|
+
def AddAssignedData(self, data: RoleBasedDataAssignment):
|
|
308
|
+
self._assigned_data.append(data)
|
|
309
|
+
|
|
310
|
+
def getAssignedData(self) -> List[RoleBasedDataAssignment]:
|
|
311
|
+
return self._assigned_data
|
|
312
|
+
|
|
313
|
+
def AddAssignedPort(self, data: RoleBasedPortAssignment):
|
|
314
|
+
self._assigned_ports.append(data)
|
|
315
|
+
|
|
316
|
+
def getAssignedPorts(self) -> List[RoleBasedPortAssignment]:
|
|
317
|
+
return self._assigned_ports
|
|
318
|
+
|
|
319
|
+
def createNvBlockNeeds(self, short_name: str) -> NvBlockNeeds:
|
|
320
|
+
if (short_name not in self.elements):
|
|
321
|
+
event = NvBlockNeeds(self, short_name)
|
|
322
|
+
self.elements[short_name] = event
|
|
323
|
+
return self.elements[short_name]
|
|
324
|
+
|
|
325
|
+
def getNvBlockNeeds(self) -> List[NvBlockNeeds]:
|
|
326
|
+
return sorted(filter(lambda c: isinstance(c, NvBlockNeeds), self.elements.values()), key=lambda e: e.short_name)
|
|
327
|
+
|
|
328
|
+
def getServiceNeeds(self) -> List[ServiceNeeds]:
|
|
329
|
+
return sorted(filter(lambda c: isinstance(c, ServiceNeeds), self.elements.values()), key=lambda e: e.short_name)
|
|
330
|
+
|
|
231
331
|
class SwcInternalBehavior(InternalBehavior):
|
|
232
332
|
def __init__(self, parent: ARObject, short_name: str):
|
|
233
333
|
super().__init__(parent, short_name)
|
|
234
334
|
|
|
335
|
+
self.handle_termination_and_restart = None # type: str
|
|
336
|
+
self.supports_multiple_instantiation = None # type: ARBoolean
|
|
337
|
+
self._explicit_inter_runnable_variables = [] # type: List[VariableDataPrototype]
|
|
338
|
+
self._implicit_inter_runnable_variables = [] # type: List[VariableDataPrototype]
|
|
339
|
+
self._per_instance_memories = [] # type: List[PerInstanceMemory]
|
|
340
|
+
self._per_instance_parameters = [] # type: List[ParameterDataPrototype]
|
|
341
|
+
self._port_api_options = [] # type: List[PortAPIOption]
|
|
342
|
+
|
|
343
|
+
def getExplicitInterRunnableVariables(self) -> List[VariableDataPrototype]:
|
|
344
|
+
return self._explicit_inter_runnable_variables
|
|
345
|
+
|
|
346
|
+
def getImplicitInterRunnableVariables(self) -> List[VariableDataPrototype]:
|
|
347
|
+
return self._implicit_inter_runnable_variables
|
|
348
|
+
|
|
349
|
+
def getPerInstanceMemories(self) -> List[PerInstanceMemory]:
|
|
350
|
+
return self._per_instance_memories
|
|
351
|
+
|
|
352
|
+
def getParameterDataPrototypes(self) -> List[ParameterDataPrototype]:
|
|
353
|
+
return self._per_instance_parameters
|
|
354
|
+
|
|
355
|
+
def addPortAPIOption(self, option: PortAPIOption):
|
|
356
|
+
self._port_api_options.append(option)
|
|
357
|
+
|
|
358
|
+
def getPortAPIOptions(self) -> List[PortAPIOption]:
|
|
359
|
+
return self._port_api_options
|
|
360
|
+
|
|
235
361
|
def createOperationInvokedEvent(self, short_name: str) -> OperationInvokedEvent:
|
|
236
362
|
if (short_name not in self.elements):
|
|
237
363
|
event = OperationInvokedEvent(self, short_name)
|
|
@@ -267,8 +393,14 @@ class SwcInternalBehavior(InternalBehavior):
|
|
|
267
393
|
event = InternalTriggerOccurredEvent(self, short_name)
|
|
268
394
|
self.elements[short_name] = event
|
|
269
395
|
return self.elements[short_name]
|
|
396
|
+
|
|
397
|
+
def createSwcServiceDependency(self, short_name: str) -> SwcServiceDependency:
|
|
398
|
+
if (short_name not in self.elements):
|
|
399
|
+
event = SwcServiceDependency(self, short_name)
|
|
400
|
+
self.elements[short_name] = event
|
|
401
|
+
return self.elements[short_name]
|
|
270
402
|
|
|
271
|
-
def
|
|
403
|
+
def getRteEvents(self) -> List[RTEEvent]:
|
|
272
404
|
return sorted(filter(lambda c: isinstance(c, RTEEvent), self.elements.values()), key=lambda e: e.short_name)
|
|
273
405
|
|
|
274
406
|
def getOperationInvokedEvents(self) -> List[OperationInvokedEvent]:
|
|
@@ -289,6 +421,9 @@ class SwcInternalBehavior(InternalBehavior):
|
|
|
289
421
|
def getInternalTriggerOccurredEvents(self) -> List[InternalTriggerOccurredEvent]:
|
|
290
422
|
return sorted(filter(lambda c: isinstance(c, InternalTriggerOccurredEvent), self.elements.values()), key= lambda e: e.short_name)
|
|
291
423
|
|
|
424
|
+
def getSwcServiceDependencies(self) -> List[SwcServiceDependency]:
|
|
425
|
+
return sorted(filter(lambda c: isinstance(c, SwcServiceDependency), self.elements.values()), key= lambda e: e.short_name)
|
|
426
|
+
|
|
292
427
|
def getEvent(self, short_name: str) -> RTEEvent:
|
|
293
428
|
if (not isinstance(self.elements[short_name], RTEEvent)):
|
|
294
429
|
raise ValueError("Invalid Event Type <%s> of <%s>" % type(self.elements[short_name]), short_name)
|
|
@@ -298,6 +433,28 @@ class SwcInternalBehavior(InternalBehavior):
|
|
|
298
433
|
if (short_name not in self.elements):
|
|
299
434
|
prototype = VariableDataPrototype(self, short_name)
|
|
300
435
|
self.elements[short_name] = prototype
|
|
436
|
+
self._explicit_inter_runnable_variables.append(prototype)
|
|
437
|
+
return self.elements[short_name]
|
|
438
|
+
|
|
439
|
+
def createImplicitInterRunnableVariable(self, short_name: str) -> VariableDataPrototype:
|
|
440
|
+
if (short_name not in self.elements):
|
|
441
|
+
prototype = VariableDataPrototype(self, short_name)
|
|
442
|
+
self.elements[short_name] = prototype
|
|
443
|
+
self._implicit_inter_runnable_variables.append(prototype)
|
|
444
|
+
return self.elements[short_name]
|
|
445
|
+
|
|
446
|
+
def createPerInstanceMemory(self, short_name: str) -> PerInstanceMemory:
|
|
447
|
+
if (short_name not in self.elements):
|
|
448
|
+
memory = PerInstanceMemory(self, short_name)
|
|
449
|
+
self.elements[short_name] = memory
|
|
450
|
+
self._per_instance_memories.append(memory)
|
|
451
|
+
return self.elements[short_name]
|
|
452
|
+
|
|
453
|
+
def createParameterDataPrototype(self, short_name: str) -> ParameterDataPrototype:
|
|
454
|
+
if (short_name not in self.elements):
|
|
455
|
+
prototype = ParameterDataPrototype(self, short_name)
|
|
456
|
+
self.elements[short_name] = prototype
|
|
457
|
+
self._per_instance_parameters.append(prototype)
|
|
301
458
|
return self.elements[short_name]
|
|
302
459
|
|
|
303
460
|
def getVariableDataPrototypes(self) -> List[VariableDataPrototype]:
|
|
@@ -314,6 +471,25 @@ class SwcInternalBehavior(InternalBehavior):
|
|
|
314
471
|
|
|
315
472
|
def getRunnableEntity(self, short_name) -> RunnableEntity:
|
|
316
473
|
return self.elements[short_name]
|
|
474
|
+
|
|
475
|
+
class PortGroup(Identifiable):
|
|
476
|
+
def __init__(self, parent: ARObject, short_name: str):
|
|
477
|
+
super().__init__(parent, short_name)
|
|
478
|
+
|
|
479
|
+
self._inner_group_iref = [] # type: List[InnerPortGroupInCompositionInstanceRef]
|
|
480
|
+
self._outer_port_ref = [] # type: List[RefType]
|
|
481
|
+
|
|
482
|
+
def addInnerGroupIRef(self, iref: InnerPortGroupInCompositionInstanceRef):
|
|
483
|
+
self._inner_group_iref.append(iref)
|
|
484
|
+
|
|
485
|
+
def getInnerGroupIRefs(self) -> List[InnerPortGroupInCompositionInstanceRef]:
|
|
486
|
+
return self._inner_group_iref
|
|
487
|
+
|
|
488
|
+
def addOuterPortRef(self, ref: RefType):
|
|
489
|
+
self._outer_port_ref.append(ref)
|
|
490
|
+
|
|
491
|
+
def getOuterPortRefs(self) -> List[RefType]:
|
|
492
|
+
return self._outer_port_ref
|
|
317
493
|
|
|
318
494
|
class SwComponentType(ARElement):
|
|
319
495
|
__metaclass__ = ABCMeta
|
|
@@ -322,22 +498,34 @@ class SwComponentType(ARElement):
|
|
|
322
498
|
super().__init__(parent, short_name)
|
|
323
499
|
|
|
324
500
|
def createPPortPrototype(self, short_name: str) -> PPortPrototype:
|
|
501
|
+
prototype = PPortPrototype(self, short_name)
|
|
325
502
|
if (short_name not in self.elements):
|
|
326
|
-
prototype = PPortPrototype(self, short_name)
|
|
327
503
|
self.elements[short_name] = prototype
|
|
328
504
|
return self.elements[short_name]
|
|
329
505
|
|
|
330
506
|
def createRPortPrototype(self, short_name) -> RPortPrototype:
|
|
507
|
+
prototype = RPortPrototype(self, short_name)
|
|
331
508
|
if (short_name not in self.elements):
|
|
332
|
-
prototype = RPortPrototype(self, short_name)
|
|
333
509
|
self.elements[short_name] = prototype
|
|
334
510
|
return self.elements[short_name]
|
|
511
|
+
|
|
512
|
+
def createPortGroup(self, short_name) -> PortGroup:
|
|
513
|
+
port_group = PortGroup(self, short_name)
|
|
514
|
+
if (short_name not in self.elements):
|
|
515
|
+
self.elements[short_name] = port_group
|
|
516
|
+
return self.elements[short_name]
|
|
335
517
|
|
|
336
518
|
def getPPortPrototypes(self) -> List[PPortPrototype]:
|
|
337
|
-
return list(filter(lambda c: isinstance(c, PPortPrototype), self.elements.values()))
|
|
519
|
+
return list(sorted(filter(lambda c: isinstance(c, PPortPrototype), self.elements.values()), key= lambda o: o.short_name))
|
|
338
520
|
|
|
339
521
|
def getRPortPrototypes(self) -> List[RPortPrototype]:
|
|
340
|
-
return list(filter(lambda c: isinstance(c, RPortPrototype), self.elements.values()))
|
|
522
|
+
return list(sorted(filter(lambda c: isinstance(c, RPortPrototype), self.elements.values()), key= lambda o: o.short_name))
|
|
523
|
+
|
|
524
|
+
def getPortPrototypes(self) -> List[PortPrototype]:
|
|
525
|
+
return list(sorted(filter(lambda c: isinstance(c, PortPrototype), self.elements.values()), key= lambda o: o.short_name))
|
|
526
|
+
|
|
527
|
+
def getPortGroups(self) -> List[PortGroup]:
|
|
528
|
+
return list(sorted(filter(lambda c: isinstance(c, PortGroup), self.elements.values()), key= lambda o: o.short_name))
|
|
341
529
|
|
|
342
530
|
class AtomicSwComponentType(SwComponentType):
|
|
343
531
|
__metaclass__ = ABCMeta
|
|
@@ -397,22 +585,22 @@ class AssemblySwConnector(SwConnector):
|
|
|
397
585
|
def __init__(self, parent: ARObject, short_name: str):
|
|
398
586
|
super().__init__(parent, short_name)
|
|
399
587
|
|
|
400
|
-
self.provider_iref = None # type:
|
|
401
|
-
self.requester_iref = None # type:
|
|
588
|
+
self.provider_iref = None # type: PPortInCompositionInstanceRef
|
|
589
|
+
self.requester_iref = None # type: RPortInCompositionInstanceRef
|
|
402
590
|
|
|
403
591
|
class DelegationSwConnector(SwConnector):
|
|
404
592
|
def __init__(self, parent: ARObject, short_name: str):
|
|
405
593
|
super().__init__(parent, short_name)
|
|
406
594
|
|
|
407
|
-
self.inner_port_iref = None # type:
|
|
408
|
-
self.
|
|
595
|
+
self.inner_port_iref = None # type: PortInCompositionTypeInstanceRef
|
|
596
|
+
self.outer_port_ref = None # type: RefType
|
|
409
597
|
|
|
410
598
|
class PassThroughSwConnector(SwConnector):
|
|
411
599
|
def __init__(self, parent: ARObject, short_name: str):
|
|
412
600
|
super().__init__(parent, short_name)
|
|
413
601
|
|
|
414
|
-
self.
|
|
415
|
-
self.
|
|
602
|
+
self.provided_outer_port_ref = None # type: RefType
|
|
603
|
+
self.required_outer_port_ref = None # type: RefType
|
|
416
604
|
|
|
417
605
|
class SwComponentPrototype(Identifiable):
|
|
418
606
|
def __init__(self, parent: ARObject, short_name: str):
|
|
@@ -425,18 +613,38 @@ class CompositionSwComponentType(SwComponentType):
|
|
|
425
613
|
super().__init__(parent, short_name)
|
|
426
614
|
|
|
427
615
|
self.constant_value_mapping_refs = [] # type: List[RefType]
|
|
428
|
-
self.
|
|
616
|
+
self._data_type_mapping_refs = [] # type: List[RefType]
|
|
429
617
|
self.instantiation_rte_event_props = [] # type: List[InstantiationRTEEventProps]
|
|
430
618
|
|
|
619
|
+
def removeAllAssemblySwConnector(self):
|
|
620
|
+
for sw_connector in self.getAssemblySwConnectors():
|
|
621
|
+
self.elements.pop(sw_connector.short_name)
|
|
622
|
+
|
|
623
|
+
def removeAllDelegationSwConnector(self):
|
|
624
|
+
for sw_connector in self.getDelegationSwConnectors():
|
|
625
|
+
self.elements.pop(sw_connector.short_name)
|
|
626
|
+
|
|
431
627
|
def createAssemblySwConnector(self, short_name: str) -> AssemblySwConnector:
|
|
432
628
|
if (short_name not in self.elements):
|
|
433
629
|
connector = AssemblySwConnector(self, short_name)
|
|
434
630
|
self.elements[short_name] = connector
|
|
435
|
-
return self.elements[short_name]
|
|
631
|
+
return self.elements[short_name]
|
|
632
|
+
|
|
633
|
+
def createDelegationSwConnector(self, short_name: str) -> DelegationSwConnector:
|
|
634
|
+
if short_name not in self.elements:
|
|
635
|
+
connector = DelegationSwConnector(self, short_name)
|
|
636
|
+
self.elements[short_name] = connector
|
|
637
|
+
return self.elements[short_name]
|
|
436
638
|
|
|
437
639
|
def getAssemblySwConnectors(self) -> List[AssemblySwConnector]:
|
|
438
|
-
return list(filter(lambda e: isinstance(e, AssemblySwConnector), self.elements.values()))
|
|
439
|
-
|
|
640
|
+
return list(sorted(filter(lambda e: isinstance(e, AssemblySwConnector), self.elements.values()), key = lambda c: c.short_name))
|
|
641
|
+
|
|
642
|
+
def getDelegationSwConnectors(self) -> List[DelegationSwConnector]:
|
|
643
|
+
return list(sorted(filter(lambda e: isinstance(e, DelegationSwConnector), self.elements.values()), key = lambda c: c.short_name))
|
|
644
|
+
|
|
645
|
+
def getSwConnectors(self) -> List[SwConnector]:
|
|
646
|
+
return list(sorted(filter(lambda e: isinstance(e, SwConnector), self.elements.values()), key = lambda c: c.short_name))
|
|
647
|
+
|
|
440
648
|
def createSwComponentPrototype(self, short_name: str) -> SwComponentPrototype:
|
|
441
649
|
if (short_name not in self.elements):
|
|
442
650
|
connector = SwComponentPrototype(self, short_name)
|
|
@@ -444,4 +652,10 @@ class CompositionSwComponentType(SwComponentType):
|
|
|
444
652
|
return self.elements[short_name]
|
|
445
653
|
|
|
446
654
|
def getSwComponentPrototypes(self) -> List[SwComponentPrototype]:
|
|
447
|
-
return list(filter(lambda e: isinstance(e, SwComponentPrototype), self.elements.values()))
|
|
655
|
+
return list(filter(lambda e: isinstance(e, SwComponentPrototype), self.elements.values()))
|
|
656
|
+
|
|
657
|
+
def addDataTypeMapping(self, data_type_mapping_ref: RefType):
|
|
658
|
+
self._data_type_mapping_refs.append(data_type_mapping_ref)
|
|
659
|
+
|
|
660
|
+
def getDataTypeMappings(self) -> List[RefType]:
|
|
661
|
+
return self._data_type_mapping_refs
|
armodel/models/unit.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
from .ar_object import ARLiteral, ARObject
|
|
3
|
+
from .general_structure import ARElement
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SingleLanguageUnitNames(ARLiteral):
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
super().__init__()
|
|
9
|
+
|
|
10
|
+
class Unit(ARElement):
|
|
11
|
+
def __init__(self, parent: ARObject, short_name: str):
|
|
12
|
+
super().__init__(parent, short_name)
|
|
13
|
+
|
|
14
|
+
self.display_name = None # type: SingleLanguageUnitNames
|