armodel 1.6.3__py3-none-any.whl → 1.7.0__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.
Files changed (133) hide show
  1. armodel/cli/arxml_dump_cli.py +7 -7
  2. armodel/cli/arxml_format_cli.py +14 -12
  3. armodel/cli/connector2xlsx_cli.py +2 -3
  4. armodel/cli/connector_update_cli.py +1 -4
  5. armodel/cli/memory_section_cli.py +2 -2
  6. armodel/cli/swc_list_cli.py +2 -3
  7. armodel/cli/system_signal_cli.py +2 -2
  8. armodel/lib/sw_component.py +2 -2
  9. armodel/lib/system_signal.py +1 -3
  10. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +5 -10
  11. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +9 -11
  12. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswImplementation.py +51 -12
  13. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswInterfaces.py +3 -3
  14. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +5 -6
  15. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/__init__.py +4 -1
  16. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +86 -0
  17. armodel/models/M2/AUTOSARTemplates/CommonStructure/Implementation.py +186 -29
  18. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +7 -10
  19. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +21 -11
  20. armodel/models/M2/AUTOSARTemplates/CommonStructure/ModeDeclaration.py +3 -3
  21. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/MemorySectionUsage.py +3 -6
  22. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/__init__.py +3 -5
  23. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +10 -6
  24. armodel/models/M2/AUTOSARTemplates/CommonStructure/SwcBswMapping.py +3 -4
  25. armodel/models/M2/AUTOSARTemplates/CommonStructure/SwcInternalBehavior/ModeDeclarationGroup.py +2 -5
  26. armodel/models/M2/AUTOSARTemplates/CommonStructure/SwcInternalBehavior/__init__.py +0 -1
  27. armodel/models/M2/AUTOSARTemplates/CommonStructure/Timing/TimingConstraint/ExecutionOrderConstraint.py +45 -0
  28. armodel/models/M2/AUTOSARTemplates/CommonStructure/Timing/TimingConstraint/TimingConstraint.py +24 -0
  29. armodel/models/M2/AUTOSARTemplates/CommonStructure/Timing/TimingConstraint/TimingExtensions.py +33 -0
  30. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +2 -2
  31. armodel/models/M2/AUTOSARTemplates/CommonStructure/__init__.py +4 -6
  32. armodel/models/M2/AUTOSARTemplates/{ecuc_description_template.py → ECUCDescriptionTemplate.py} +6 -11
  33. armodel/models/M2/AUTOSARTemplates/GenericStructure/AbstractStructure.py +3 -6
  34. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +42 -36
  35. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/EngineeringObject.py +2 -5
  36. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +11 -16
  37. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +87 -4
  38. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/__init__.py +0 -1
  39. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +21 -8
  40. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/InstanceRefs.py +2 -4
  41. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +114 -12
  42. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/InstanceRefs.py +2 -5
  43. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +4 -62
  44. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/DataPrototypes.py +6 -8
  45. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +7 -7
  46. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/__init__.py +0 -1
  47. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/{port_interface/instance_refs.py → PortInterface/InstanceRefs.py} +2 -2
  48. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/{port_interface → PortInterface}/__init__.py +10 -10
  49. armodel/models/{rpt_scenario.py → M2/AUTOSARTemplates/SWComponentTemplate/RPTScenario.py} +4 -6
  50. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcImplementation.py +29 -6
  51. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +6 -6
  52. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/IncludedDataTypes.py +2 -2
  53. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/InstanceRefsUsage.py +3 -3
  54. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +28 -4
  55. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/PerInstanceMemory.py +3 -3
  56. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/PortAPIOptions.py +86 -0
  57. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +174 -0
  58. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServerCall.py +3 -4
  59. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +37 -3
  60. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/Trigger.py +2 -4
  61. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +166 -10
  62. armodel/models/M2/AUTOSARTemplates/SystemTemplate/{data_mapping.py → DataMapping.py} +2 -3
  63. armodel/models/{fibex/can_communication.py → M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanCommunication.py} +3 -4
  64. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +173 -0
  65. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetFrame.py +14 -0
  66. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +116 -0
  67. armodel/models/{fibex/lin_communication.py → M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinCommunication.py} +4 -5
  68. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/__init__.py +0 -0
  69. armodel/models/{fibex/fibex_4_multiplatform.py → M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py} +5 -6
  70. armodel/models/{fibex/fibex_core/core_communication.py → M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py} +6 -14
  71. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +388 -0
  72. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +223 -0
  73. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/Timing.py +177 -0
  74. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/__init__.py +0 -0
  75. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/__init__.py +0 -0
  76. armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +39 -2
  77. armodel/models/M2/AUTOSARTemplates/SystemTemplate/{network_management.py → NetworkManagement.py} +5 -10
  78. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +6 -0
  79. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +86 -17
  80. armodel/models/M2/MSR/AsamHdo/AdminData.py +2 -5
  81. armodel/models/M2/MSR/AsamHdo/BaseTypes.py +3 -3
  82. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +5 -6
  83. armodel/models/M2/MSR/AsamHdo/Constraints/GlobalConstraints.py +3 -4
  84. armodel/models/M2/MSR/AsamHdo/Constraints/__init__.py +0 -1
  85. armodel/models/M2/MSR/AsamHdo/SpecialData.py +1 -4
  86. armodel/models/M2/MSR/AsamHdo/Units.py +3 -6
  87. armodel/models/M2/MSR/AsamHdo/__init__.py +0 -1
  88. armodel/models/M2/MSR/CalibrationData/CalibrationValue.py +3 -7
  89. armodel/models/M2/MSR/CalibrationData/__init__.py +0 -1
  90. armodel/models/M2/MSR/DataDictionary/AuxillaryObjects.py +3 -6
  91. armodel/models/M2/MSR/DataDictionary/Axis.py +3 -3
  92. armodel/models/M2/MSR/DataDictionary/CalibrationParameter.py +3 -3
  93. armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +5 -6
  94. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +4 -4
  95. armodel/models/M2/MSR/DataDictionary/__init__.py +0 -1
  96. armodel/models/M2/MSR/Documentation/Annotation.py +4 -6
  97. armodel/models/M2/MSR/Documentation/BlockElements.py +2 -2
  98. armodel/models/M2/MSR/Documentation/TextModel/LanguageDataModel.py +1 -2
  99. armodel/models/M2/MSR/Documentation/TextModel/MultilanguageData.py +3 -6
  100. armodel/models/M2/MSR/Documentation/TextModel/__init__.py +0 -2
  101. armodel/models/M2/MSR/Documentation/__init__.py +1 -1
  102. armodel/models/M2/MSR/__init__.py +1 -1
  103. armodel/models/M2/__init__.py +0 -1
  104. armodel/models/__init__.py +57 -3
  105. armodel/parser/abstract_arxml_parser.py +50 -16
  106. armodel/parser/arxml_parser.py +285 -112
  107. armodel/parser/file_parser.py +2 -1
  108. armodel/report/connector_xls_report.py +2 -1
  109. armodel/tests/test_armodel/models/test_ar_object.py +0 -2
  110. armodel/tests/test_armodel/models/test_ar_package.py +4 -4
  111. armodel/tests/test_armodel/models/test_data_prototype.py +1 -1
  112. armodel/tests/test_armodel/models/test_datatype.py +7 -7
  113. armodel/tests/test_armodel/models/test_port_interface.py +6 -6
  114. armodel/tests/test_armodel/parser/test_parse_bswmd.py +12 -12
  115. armodel/tests/test_armodel/parser/test_sw_components.py +1 -23
  116. armodel/tests/test_armodel/parser/test_system.py +3 -3
  117. armodel/writer/abstract_arxml_writer.py +10 -1
  118. armodel/writer/arxml_writer.py +249 -80
  119. {armodel-1.6.3.dist-info → armodel-1.7.0.dist-info}/METADATA +385 -366
  120. armodel-1.7.0.dist-info/RECORD +160 -0
  121. {armodel-1.6.3.dist-info → armodel-1.7.0.dist-info}/WHEEL +1 -1
  122. armodel/models/M2/AUTOSARTemplates/SystemTemplate/transport_protocols.py +0 -7
  123. armodel/models/fibex/fibex_core/core_topology.py +0 -184
  124. armodel/models/sw_component.py +0 -390
  125. armodel/models/timing.py +0 -91
  126. armodel-1.6.3.dist-info/RECORD +0 -148
  127. /armodel/models/{fibex → M2/AUTOSARTemplates/CommonStructure/Timing/TimingConstraint}/__init__.py +0 -0
  128. /armodel/models/{fibex/fibex_4_can → M2/AUTOSARTemplates/CommonStructure/Timing}/__init__.py +0 -0
  129. /armodel/models/{fibex/fibex_4_lin → M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can}/__init__.py +0 -0
  130. /armodel/models/{fibex/fibex_core → M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet}/__init__.py +0 -0
  131. {armodel-1.6.3.dist-info → armodel-1.7.0.dist-info}/LICENSE +0 -0
  132. {armodel-1.6.3.dist-info → armodel-1.7.0.dist-info}/entry_points.txt +0 -0
  133. {armodel-1.6.3.dist-info → armodel-1.7.0.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,27 @@
1
1
  from abc import ABCMeta
2
2
  from typing import List
3
+ from ....M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps
4
+ from ....M2.AUTOSARTemplates.CommonStructure import ValueSpecification
5
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
6
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, ARLiteral, ARNumerical, ARPositiveInteger
7
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
8
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
9
+ from ....M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
10
+
11
+ class HandleInvalidEnum(AREnum):
12
+ DONT_INVALIDATE = "dontInvalidate"
13
+ EXTERNAL_REPLACEMENT = "externalReplacement"
14
+ KEEP = "keep"
15
+ REPLACE = "replace"
3
16
 
4
- from armodel.models.M2.AUTOSARTemplates.SWComponentTemplate.port_interface.instance_refs import ApplicationCompositeElementInPortInterfaceInstanceRef
5
-
6
- from ..GenericStructure.GeneralTemplateClasses.ArObject import ARObject
7
- from ..GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical, ARPositiveInteger
8
- from ..GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
9
- from ..GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
10
- from ...MSR.DataDictionary.DataDefProperties import SwDataDefProps
11
- from ..CommonStructure import ValueSpecification
17
+ def __init__(self):
18
+ super().__init__((
19
+ HandleInvalidEnum.DONT_INVALIDATE,
20
+ HandleInvalidEnum.EXTERNAL_REPLACEMENT,
21
+ HandleInvalidEnum.KEEP,
22
+ HandleInvalidEnum.REPLACE
23
+ ))
24
+
12
25
 
13
26
  class PPortComSpec(ARObject, metaclass = ABCMeta):
14
27
  """
@@ -1,8 +1,6 @@
1
1
  from abc import ABCMeta
2
-
3
- from ...GenericStructure.AbstractStructure import AtpInstanceRef
4
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
5
-
2
+ from .....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AtpInstanceRef
3
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
6
4
 
7
5
  class ModeGroupInAtomicSwcInstanceRef(AtpInstanceRef, metaclass = ABCMeta):
8
6
  def __init__(self):
@@ -1,16 +1,14 @@
1
- from . import *
2
-
3
1
  from abc import ABCMeta
4
2
  from typing import List
5
-
6
- from ...CommonStructure.Implementation import ImplementationProps
7
- from ...GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
8
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
9
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import TRefType
10
- from ...GenericStructure.GeneralTemplateClasses.Identifiable import ARElement
11
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean, RefType
12
- from ..Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, RPortComSpec, ServerComSpec
13
- from .InstanceRefs import InnerPortGroupInCompositionInstanceRef
3
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector, SwComponentPrototype, SwConnector
4
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef
5
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import SwcInternalBehavior
6
+ from .....M2.AUTOSARTemplates.CommonStructure.Implementation import ImplementationProps
7
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, ARElement
8
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
9
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import TRefType
10
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean, RefType
11
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, RPortComSpec, ServerComSpec
14
12
 
15
13
  class SymbolProps(ImplementationProps):
16
14
  def __init__(self, parent: ARObject, short_name: str):
@@ -212,7 +210,7 @@ class PortGroup(Identifiable):
212
210
  def getOuterPortRefs(self) -> List[RefType]:
213
211
  return self._outer_port_ref
214
212
 
215
- class SwComponentType(ARElement, metaclass = ABCMeta):
213
+ class SwComponentType(ARElement, metaclass = ABCMeta):
216
214
  def __init__(self, parent: ARObject, short_name: str):
217
215
  super().__init__(parent, short_name)
218
216
 
@@ -246,3 +244,107 @@ class SwComponentType(ARElement, metaclass = ABCMeta):
246
244
  def getPortGroups(self) -> List[PortGroup]:
247
245
  return list(sorted(filter(lambda c: isinstance(c, PortGroup), self.elements.values()), key= lambda o: o.short_name))
248
246
 
247
+
248
+ class AtomicSwComponentType(SwComponentType, metaclass = ABCMeta):
249
+ def __init__(self, parent: ARObject, short_name: str):
250
+ super().__init__(parent, short_name)
251
+
252
+ def createSwcInternalBehavior(self, short_name) -> SwcInternalBehavior:
253
+ if (short_name not in self.elements):
254
+ if (len(list(filter(lambda e: isinstance(e, SwcInternalBehavior), self.elements.values()))) >= 1):
255
+ raise ValueError("The internal behavior of <%s> can not more than 1" % self.short_name)
256
+ behavior = SwcInternalBehavior(self, short_name)
257
+ self.elements[short_name] = behavior
258
+ return self.elements[short_name]
259
+
260
+ @property
261
+ def internal_behavior(self) -> SwcInternalBehavior:
262
+ return next(filter(lambda e: isinstance(e, SwcInternalBehavior), self.elements.values()))
263
+
264
+ class EcuAbstractionSwComponentType(AtomicSwComponentType):
265
+ def __init__(self, parent:ARObject, short_name: str):
266
+ super().__init__(parent, short_name)
267
+
268
+
269
+ class ApplicationSwComponentType(AtomicSwComponentType):
270
+ def __init__(self, parent: ARObject, short_name: str):
271
+ super().__init__(parent, short_name)
272
+
273
+
274
+ class ComplexDeviceDriverSwComponentType(AtomicSwComponentType):
275
+ def __init__(self, parent: ARObject, short_name: str):
276
+ super().__init__(parent, short_name)
277
+
278
+
279
+ class NvBlockSwComponentType(AtomicSwComponentType):
280
+ def __init__(self, parent: ARObject, short_name: str):
281
+ super().__init__(parent, short_name)
282
+
283
+
284
+ class SensorActuatorSwComponentType(AtomicSwComponentType):
285
+ def __init__(self, parent: ARObject, short_name: str):
286
+ super().__init__(parent, short_name)
287
+
288
+
289
+ class ServiceProxySwComponentType(AtomicSwComponentType):
290
+ def __init__(self, parent: ARObject, short_name: str):
291
+ super().__init__(parent, short_name)
292
+
293
+
294
+ class ServiceSwComponentType(AtomicSwComponentType):
295
+ def __init__(self, parent: ARObject, short_name: str):
296
+ super().__init__(parent, short_name)
297
+
298
+
299
+ class CompositionSwComponentType(SwComponentType):
300
+ def __init__(self, parent: ARObject, short_name: str):
301
+ super().__init__(parent, short_name)
302
+
303
+ self.constantValueMappingRefs = [] # type: List[RefType]
304
+ self.dataTypeMappingRefs = [] # type: List[RefType]
305
+ self.instantiationRTEEventProps = [] # type: List[InstantiationRTEEventProps]
306
+
307
+ def removeAllAssemblySwConnector(self):
308
+ for sw_connector in self.getAssemblySwConnectors():
309
+ self.elements.pop(sw_connector.short_name)
310
+
311
+ def removeAllDelegationSwConnector(self):
312
+ for sw_connector in self.getDelegationSwConnectors():
313
+ self.elements.pop(sw_connector.short_name)
314
+
315
+ def createAssemblySwConnector(self, short_name: str) -> AssemblySwConnector:
316
+ if (short_name not in self.elements):
317
+ connector = AssemblySwConnector(self, short_name)
318
+ self.elements[short_name] = connector
319
+ return self.elements[short_name]
320
+
321
+ def createDelegationSwConnector(self, short_name: str) -> DelegationSwConnector:
322
+ if short_name not in self.elements:
323
+ connector = DelegationSwConnector(self, short_name)
324
+ self.elements[short_name] = connector
325
+ return self.elements[short_name]
326
+
327
+ def getAssemblySwConnectors(self) -> List[AssemblySwConnector]:
328
+ return list(sorted(filter(lambda e: isinstance(e, AssemblySwConnector), self.elements.values()), key = lambda c: c.short_name))
329
+
330
+ def getDelegationSwConnectors(self) -> List[DelegationSwConnector]:
331
+ return list(sorted(filter(lambda e: isinstance(e, DelegationSwConnector), self.elements.values()), key = lambda c: c.short_name))
332
+
333
+ def getSwConnectors(self) -> List[SwConnector]:
334
+ return list(sorted(filter(lambda e: isinstance(e, SwConnector), self.elements.values()), key = lambda c: c.short_name))
335
+
336
+ def createSwComponentPrototype(self, short_name: str) -> SwComponentPrototype:
337
+ if (short_name not in self.elements):
338
+ connector = SwComponentPrototype(self, short_name)
339
+ self.elements[short_name] = connector
340
+ return self.elements[short_name]
341
+
342
+ def getSwComponentPrototypes(self) -> List[SwComponentPrototype]:
343
+ return list(filter(lambda e: isinstance(e, SwComponentPrototype), self.elements.values()))
344
+
345
+ def addDataTypeMapping(self, data_type_mapping_ref: RefType):
346
+ self.dataTypeMappingRefs.append(data_type_mapping_ref)
347
+
348
+ def getDataTypeMappings(self) -> List[RefType]:
349
+ return self.dataTypeMappingRefs
350
+
@@ -1,9 +1,6 @@
1
-
2
1
  from abc import ABCMeta
3
-
4
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
5
- from ...GenericStructure.AbstractStructure import AtpInstanceRef
6
-
2
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
3
+ from .....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AtpInstanceRef
7
4
 
8
5
  class PortInCompositionTypeInstanceRef(AtpInstanceRef, metaclass = ABCMeta):
9
6
  def __init__(self):
@@ -1,12 +1,8 @@
1
1
  from abc import ABCMeta
2
- from typing import List
3
-
4
- from ..Components import SwComponentType
5
- from .InstanceRefs import PPortInCompositionInstanceRef, PortInCompositionTypeInstanceRef, RPortInCompositionInstanceRef
6
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
7
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
8
- from ...GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
9
-
2
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import PPortInCompositionInstanceRef, PortInCompositionTypeInstanceRef, RPortInCompositionInstanceRef
3
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
4
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
5
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
10
6
 
11
7
  class SwComponentPrototype(Identifiable):
12
8
  def __init__(self, parent: ARObject, short_name: str):
@@ -97,58 +93,4 @@ class PassThroughSwConnector(SwConnector):
97
93
  def setRequiredOuterPortRef(self, value):
98
94
  self.requiredOuterPortRef = value
99
95
  return self
100
-
101
-
102
- class CompositionSwComponentType(SwComponentType):
103
- def __init__(self, parent: ARObject, short_name: str):
104
- super().__init__(parent, short_name)
105
-
106
- self.constantValueMappingRefs = [] # type: List[RefType]
107
- self.dataTypeMappingRefs = [] # type: List[RefType]
108
- self.instantiationRTEEventProps = [] # type: List[InstantiationRTEEventProps]
109
-
110
- def removeAllAssemblySwConnector(self):
111
- for sw_connector in self.getAssemblySwConnectors():
112
- self.elements.pop(sw_connector.short_name)
113
-
114
- def removeAllDelegationSwConnector(self):
115
- for sw_connector in self.getDelegationSwConnectors():
116
- self.elements.pop(sw_connector.short_name)
117
-
118
- def createAssemblySwConnector(self, short_name: str) -> AssemblySwConnector:
119
- if (short_name not in self.elements):
120
- connector = AssemblySwConnector(self, short_name)
121
- self.elements[short_name] = connector
122
- return self.elements[short_name]
123
-
124
- def createDelegationSwConnector(self, short_name: str) -> DelegationSwConnector:
125
- if short_name not in self.elements:
126
- connector = DelegationSwConnector(self, short_name)
127
- self.elements[short_name] = connector
128
- return self.elements[short_name]
129
-
130
- def getAssemblySwConnectors(self) -> List[AssemblySwConnector]:
131
- return list(sorted(filter(lambda e: isinstance(e, AssemblySwConnector), self.elements.values()), key = lambda c: c.short_name))
132
-
133
- def getDelegationSwConnectors(self) -> List[DelegationSwConnector]:
134
- return list(sorted(filter(lambda e: isinstance(e, DelegationSwConnector), self.elements.values()), key = lambda c: c.short_name))
135
-
136
- def getSwConnectors(self) -> List[SwConnector]:
137
- return list(sorted(filter(lambda e: isinstance(e, SwConnector), self.elements.values()), key = lambda c: c.short_name))
138
-
139
- def createSwComponentPrototype(self, short_name: str) -> SwComponentPrototype:
140
- if (short_name not in self.elements):
141
- connector = SwComponentPrototype(self, short_name)
142
- self.elements[short_name] = connector
143
- return self.elements[short_name]
144
-
145
- def getSwComponentPrototypes(self) -> List[SwComponentPrototype]:
146
- return list(filter(lambda e: isinstance(e, SwComponentPrototype), self.elements.values()))
147
-
148
- def addDataTypeMapping(self, data_type_mapping_ref: RefType):
149
- self.dataTypeMappingRefs.append(data_type_mapping_ref)
150
-
151
- def getDataTypeMappings(self) -> List[RefType]:
152
- return self.dataTypeMappingRefs
153
-
154
96
 
@@ -1,12 +1,10 @@
1
1
  from abc import ABCMeta
2
-
3
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
-
5
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARNumerical, TRefType
6
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
7
- from ....MSR.DataDictionary.DataDefProperties import SwDataDefProps
8
- from ...CommonStructure import ValueSpecification
9
- from ...GenericStructure.AbstractStructure import AtpFeature
2
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
3
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARNumerical, TRefType
4
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
5
+ from .....M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps
6
+ from .....M2.AUTOSARTemplates.CommonStructure import ValueSpecification
7
+ from .....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AtpFeature
10
8
 
11
9
  class AtpPrototype(AtpFeature, metaclass = ABCMeta):
12
10
  def __init__(self, parent:ARObject, short_name: str):
@@ -1,11 +1,11 @@
1
1
  from typing import List
2
- from ...CommonStructure.ModeDeclaration import ModeRequestTypeMap
3
- from ...GenericStructure.AbstractStructure import AtpType
4
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
5
- from ...GenericStructure.GeneralTemplateClasses.Identifiable import ARElement
6
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, RefType
7
- from ...SWComponentTemplate.Datatype.DataPrototypes import ApplicationArrayElement, ApplicationRecordElement
8
- from ....MSR.DataDictionary.DataDefProperties import SwDataDefProps
2
+ from .....M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeRequestTypeMap
3
+ from .....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AtpType
4
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
5
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement
6
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, RefType
7
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationArrayElement, ApplicationRecordElement
8
+ from .....M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps
9
9
  from abc import ABCMeta
10
10
 
11
11
  class AutosarDataType(AtpType, metaclass = ABCMeta):
@@ -1,5 +1,5 @@
1
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
2
- from ...GenericStructure.AbstractStructure import AtpInstanceRef
1
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
2
+ from .....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AtpInstanceRef
3
3
 
4
4
  class ApplicationCompositeElementInPortInterfaceInstanceRef(AtpInstanceRef):
5
5
  def __init__(self):
@@ -1,16 +1,16 @@
1
1
  from abc import ABCMeta
2
2
  from typing import List
3
3
 
4
- from ...CommonStructure.TriggerDeclaration import Trigger
5
- from ...GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
6
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
7
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical
8
- from ..Datatype.DataPrototypes import ParameterDataPrototype, VariableDataPrototype, AutosarDataPrototype
9
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
10
- from ...CommonStructure.ModeDeclaration import ModeDeclarationGroupPrototype
11
- from ...GenericStructure.AbstractStructure import AtpType
12
- from ...GenericStructure.AbstractStructure import AtpFeature
13
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
4
+ from .....M2.AUTOSARTemplates.CommonStructure.TriggerDeclaration import Trigger
5
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
6
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
7
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical
8
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ParameterDataPrototype, VariableDataPrototype, AutosarDataPrototype
9
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
10
+ from .....M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroupPrototype
11
+ from .....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AtpType
12
+ from .....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AtpFeature
13
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
14
14
 
15
15
  class PortInterface(AtpType, metaclass = ABCMeta):
16
16
  def __init__(self, parent: ARObject, short_name: str):
@@ -1,17 +1,15 @@
1
-
1
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
2
3
  from abc import ABCMeta
3
- from .M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
- from .M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
5
-
6
4
 
7
5
  class IdentCaption(Identifiable):
8
-
6
+
9
7
  __metaclass__ = ABCMeta
10
8
 
11
9
  def __init__(self, parent: ARObject, short_name: str):
12
10
  if type(self) == IdentCaption:
13
11
  raise NotImplementedError("IdentCaption is an abstract class.")
14
-
12
+
15
13
  super().__init__(parent, short_name)
16
14
 
17
15
 
@@ -1,11 +1,34 @@
1
- from ..GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
- from ..GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
3
- from ..CommonStructure.Implementation import Implementation
1
+ from typing import List
2
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
3
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, String
4
+ from ....M2.AUTOSARTemplates.CommonStructure.Implementation import Implementation
4
5
 
5
6
  class SwcImplementation(Implementation):
6
7
  def __init__(self, parent: ARObject, short_name: str) -> None:
7
8
  super().__init__(parent, short_name)
8
9
 
9
- self.behavior_ref = None # type: RefType
10
- self.per_instance_memory_size = None
11
- self.required_rte_vendor = ""
10
+ self.behaviorRef = None # type: RefType
11
+ # type: List[PerInstanceMemorySize]
12
+ self.perInstanceMemorySizes = []
13
+ self.requiredRTEVendor = None # type: String
14
+
15
+ def getBehaviorRef(self):
16
+ return self.behaviorRef
17
+
18
+ def setBehaviorRef(self, value):
19
+ self.behaviorRef = value
20
+ return self
21
+
22
+ def getPerInstanceMemorySizes(self):
23
+ return self.perInstanceMemorySizes
24
+
25
+ def addPerInstanceMemorySize(self, value):
26
+ self.perInstanceMemorySizes.append(value)
27
+ return self
28
+
29
+ def getRequiredRTEVendor(self):
30
+ return self.requiredRTEVendor
31
+
32
+ def setRequiredRTEVendor(self, value):
33
+ self.requiredRTEVendor = value
34
+ return self
@@ -1,9 +1,9 @@
1
- from ....AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AccessCount import AbstractAccessPoint
2
- from ....AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef
3
- from ....AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
- from ....AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
5
- from ....AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral
6
- from ....MSR.DataDictionary.DataDefProperties import SwDataDefProps
1
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AccessCount import AbstractAccessPoint
2
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, AutosarVariableRef
3
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
5
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral
6
+ from .....M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps
7
7
 
8
8
  class ParameterAccess(AbstractAccessPoint):
9
9
  def __init__(self, parent: ARObject, short_name: str):
@@ -1,5 +1,5 @@
1
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, RefType
1
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, RefType
3
3
  from typing import List
4
4
 
5
5
  class IncludedDataTypeSet(ARObject):
@@ -1,8 +1,8 @@
1
1
  from typing import List
2
2
 
3
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
5
- from ...GenericStructure.AbstractStructure import AtpInstanceRef
3
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
5
+ from .....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AtpInstanceRef
6
6
 
7
7
  class ArVariableInImplementationDataInstanceRef(AtpInstanceRef):
8
8
  def __init__(self):
@@ -1,7 +1,9 @@
1
- from .AccessCount import AbstractAccessPoint
2
- from ..Components.InstanceRefs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
3
- from .....rpt_scenario import ModeAccessPointIdent
4
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
1
+ from armodel.models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, RefType
2
+ from typing import List
3
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.RPTScenario import ModeAccessPointIdent
4
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
5
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AccessCount import AbstractAccessPoint
6
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
5
7
 
6
8
  class ModeAccessPoint(ARObject):
7
9
  def __init__(self):
@@ -36,3 +38,25 @@ class ModeSwitchPoint(AbstractAccessPoint):
36
38
  def setModeGroupIRef(self, value):
37
39
  self.modeGroupIRef = value
38
40
  return self
41
+
42
+
43
+ class IncludedModeDeclarationGroupSet(ARObject):
44
+ def __init__(self):
45
+ super().__init__()
46
+
47
+ self.mode_declaration_group_refs = [] # type: List[RefType]
48
+ self.prefix = None # type: ARLiteral
49
+
50
+ def addModeDeclarationGroupRef(self, ref: RefType):
51
+ self.mode_declaration_group_refs.append(ref)
52
+ return self
53
+
54
+ def getModeDeclarationGroupRefs(self) -> List[RefType]:
55
+ return self.mode_declaration_group_refs
56
+
57
+ def setPrefix(self, prefix: str):
58
+ self.prefix = prefix
59
+ return self
60
+
61
+ def getPrefix(self) -> ARLiteral:
62
+ return self.prefix
@@ -1,6 +1,6 @@
1
- from ...GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
- from ...GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
3
- from ...GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral
1
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
3
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral
4
4
  from .....M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps
5
5
 
6
6
  class PerInstanceMemory(Identifiable):
@@ -0,0 +1,86 @@
1
+ from .....M2.AUTOSARTemplates.CommonStructure import ValueSpecification
2
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
3
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean, RefType, TRefType
4
+ from typing import List
5
+
6
+ class PortDefinedArgumentValue(ARObject):
7
+ def __init__(self):
8
+ super().__init__()
9
+
10
+ self.value = None # type: ValueSpecification
11
+ self.valueTypeTRef = None # type: TRefType
12
+
13
+ def getValue(self):
14
+ return self.value
15
+
16
+ def setValue(self, value):
17
+ self.value = value
18
+ return self
19
+
20
+ def getValueTypeTRef(self):
21
+ return self.valueTypeTRef
22
+
23
+ def setValueTypeTRef(self, value):
24
+ self.valueTypeTRef = value
25
+ return self
26
+
27
+ class PortAPIOption(ARObject):
28
+ def __init__(self):
29
+ super().__init__()
30
+
31
+ self.enableTakeAddress = None # type: ARBoolean
32
+ self.errorHandling = None # type: DataTransformationErrorHandlingEnum
33
+ self.indirectAPI = None # type: ARBoolean
34
+ self.portRef = None # type: RefType
35
+ self.portArgValues = [] # type: List[PortDefinedArgumentValue]
36
+ self.supportedFeatures = [] # type: List[SwcSupportedFeature]
37
+ self.transformerStatusForwarding = None # type: DataTransformationStatusForwardingEnum
38
+
39
+ def getEnableTakeAddress(self):
40
+ return self.enableTakeAddress
41
+
42
+ def setEnableTakeAddress(self, value):
43
+ self.enableTakeAddress = value
44
+ return self
45
+
46
+ def getErrorHandling(self):
47
+ return self.errorHandling
48
+
49
+ def setErrorHandling(self, value):
50
+ self.errorHandling = value
51
+ return self
52
+
53
+ def getIndirectAPI(self):
54
+ return self.indirectAPI
55
+
56
+ def setIndirectAPI(self, value):
57
+ self.indirectAPI = value
58
+ return self
59
+
60
+ def getPortRef(self):
61
+ return self.portRef
62
+
63
+ def setPortRef(self, value):
64
+ self.portRef = value
65
+ return self
66
+
67
+ def getPortArgValues(self):
68
+ return self.portArgValues
69
+
70
+ def addPortArgValue(self, value):
71
+ self.portArgValues.append(value)
72
+ return self
73
+
74
+ def getSupportedFeatures(self):
75
+ return self.supportedFeatures
76
+
77
+ def addSupportedFeature(self, value):
78
+ self.supportedFeatures.append(value)
79
+ return self
80
+
81
+ def getTransformerStatusForwarding(self):
82
+ return self.transformerStatusForwarding
83
+
84
+ def setTransformerStatusForwarding(self, value):
85
+ self.transformerStatusForwarding = value
86
+ return self