sysmlpy 0.46.0__tar.gz → 0.47.0__tar.gz

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 (148) hide show
  1. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/PKG-INFO +1 -1
  2. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/pyproject.toml +1 -1
  3. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/__init__.py +1 -1
  4. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr_visitor.py +46 -8
  5. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/classes.py +50 -0
  6. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/LICENSE +0 -0
  7. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/README.md +0 -0
  8. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/__main__.py +0 -0
  9. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/README.md +0 -0
  10. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  11. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  12. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  13. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  14. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  15. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  16. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  17. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  18. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  19. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  20. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  21. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/antlr_parser.py +0 -0
  22. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/boxes_view.py +0 -0
  23. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/definition.py +0 -0
  24. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/examples/attribute_values.py +0 -0
  25. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/examples/part_attributes.py +0 -0
  26. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  27. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/formatting.py +0 -0
  28. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  29. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  30. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  31. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  32. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  33. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  34. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  35. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  36. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  37. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  38. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  39. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  40. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  41. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  42. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  43. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  44. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/LICENSE +0 -0
  45. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/README.md +0 -0
  46. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/__init__.py +0 -0
  47. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  48. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  49. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  50. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  51. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  52. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  53. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  54. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  55. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  56. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  57. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  58. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  59. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  60. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  61. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  62. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  63. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  64. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  65. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  66. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  67. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  68. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  69. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  70. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  71. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  72. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  73. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  74. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  75. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  76. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  77. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  78. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  79. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  80. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  81. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  82. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  83. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  84. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  85. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  86. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  87. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  88. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  89. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  90. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  91. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  92. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  93. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  94. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  95. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  96. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  97. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  98. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  99. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  100. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  101. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  102. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  103. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  104. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  105. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  106. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  107. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  108. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  109. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  110. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  111. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  112. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  113. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  114. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  115. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  116. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  117. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  118. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  119. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  120. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  121. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  122. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  123. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  124. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  125. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  126. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  127. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  128. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  129. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  130. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
  131. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  132. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  133. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  134. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  135. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  136. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/States.sysml +0 -0
  137. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  138. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  139. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  140. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
  141. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/navigate.py +0 -0
  142. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/plantuml.py +0 -0
  143. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/project.py +0 -0
  144. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/semantic.py +0 -0
  145. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/store.py +0 -0
  146. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/us_customary_units.txt +0 -0
  147. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/usage.py +0 -0
  148. {sysmlpy-0.46.0 → sysmlpy-0.47.0}/src/sysmlpy/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysmlpy
3
- Version: 0.46.0
3
+ Version: 0.47.0
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: Jon R. Fox (mycr0ft)
@@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api"
6
6
 
7
7
  [project]
8
8
  name = "sysmlpy"
9
- version = "0.46.0"
9
+ version = "0.47.0"
10
10
  description = ""
11
11
  authors = [{ name = "Jon R. Fox (mycr0ft)", email = "jon.fox@drfox.com" }]
12
12
  readme = "README.md"
@@ -25,7 +25,7 @@ __all__ = [
25
25
  "render_state_transition_view_svg", "boxes_view",
26
26
  ]
27
27
  __author__ = "Jon Fox"
28
- __version__ = "0.46.0"
28
+ __version__ = "0.47.0"
29
29
 
30
30
  from sysmlpy.usage import (
31
31
  Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
@@ -7476,14 +7476,15 @@ def _make_nested_connection_usage_dict(ctx, prefix=None):
7476
7476
 
7477
7477
  def _build_connector_part_dict(ctx):
7478
7478
  """Build a ConnectorPart dictionary from a connectorPart context.
7479
-
7479
+
7480
7480
  Grammar:
7481
7481
  connectorPart : binaryConnectorPart | naryConnectorPart ;
7482
7482
  binaryConnectorPart : connectorEndMember TO connectorEndMember ;
7483
+ naryConnectorPart : LPAREN connectorEndMember (COMMA connectorEndMember)* RPAREN ;
7483
7484
  """
7484
7485
  if ctx is None:
7485
7486
  return None
7486
-
7487
+
7487
7488
  if hasattr(ctx, 'binaryConnectorPart') and ctx.binaryConnectorPart():
7488
7489
  bcp = ctx.binaryConnectorPart()
7489
7490
  owned_rel = []
@@ -7495,7 +7496,7 @@ def _build_connector_part_dict(ctx):
7495
7496
  end_dict = _visit_connector_end_member(end)
7496
7497
  if end_dict:
7497
7498
  owned_rel.append(end_dict)
7498
-
7499
+
7499
7500
  return {
7500
7501
  "name": "ConnectorPart",
7501
7502
  "part": {
@@ -7503,7 +7504,27 @@ def _build_connector_part_dict(ctx):
7503
7504
  "ownedRelationship": owned_rel
7504
7505
  }
7505
7506
  }
7506
-
7507
+
7508
+ if hasattr(ctx, 'naryConnectorPart') and ctx.naryConnectorPart():
7509
+ ncp = ctx.naryConnectorPart()
7510
+ owned_rel = []
7511
+ if hasattr(ncp, 'connectorEndMember') and ncp.connectorEndMember():
7512
+ ends = ncp.connectorEndMember()
7513
+ if not isinstance(ends, list):
7514
+ ends = [ends]
7515
+ for end in ends:
7516
+ end_dict = _visit_connector_end_member(end)
7517
+ if end_dict:
7518
+ owned_rel.append(end_dict)
7519
+
7520
+ return {
7521
+ "name": "ConnectorPart",
7522
+ "part": {
7523
+ "name": "NaryConnectorPart",
7524
+ "ownedRelationship": owned_rel
7525
+ }
7526
+ }
7527
+
7507
7528
  return None
7508
7529
 
7509
7530
 
@@ -7924,20 +7945,30 @@ def _make_concern_usage_dict(ctx, prefix=None):
7924
7945
 
7925
7946
  def _make_allocation_usage_dict(ctx, prefix=None):
7926
7947
  """Create an AllocationUsage dictionary.
7927
-
7948
+
7928
7949
  allocationUsage: occurrenceUsagePrefix allocationUsageDeclaration usageBody
7950
+ allocationUsageDeclaration
7951
+ : ALLOCATION usageDeclaration? (ALLOCATE connectorPart)?
7952
+ | ALLOCATE connectorPart
7953
+ ;
7954
+
7955
+ Issue #5: the connector endpoints (`allocate X to Y`) were silently
7956
+ dropped before reaching the dict. Mirror the InterfaceUsage pattern:
7957
+ walk `aud.connectorPart()` (when present) and emit a ConnectorPart
7958
+ dict with binary or nary ends.
7929
7959
  """
7930
7960
  name = None
7931
7961
  shortname = None
7962
+ connector_part = None
7932
7963
  if ctx is not None:
7933
7964
  aud = None
7934
7965
  if hasattr(ctx, 'allocationUsageDeclaration') and ctx.allocationUsageDeclaration():
7935
7966
  aud = ctx.allocationUsageDeclaration()
7936
-
7967
+
7937
7968
  ud = None
7938
7969
  if aud and hasattr(aud, 'usageDeclaration') and aud.usageDeclaration():
7939
7970
  ud = aud.usageDeclaration()
7940
-
7971
+
7941
7972
  if ud and hasattr(ud, 'identification') and ud.identification():
7942
7973
  ident = ud.identification()
7943
7974
  if hasattr(ident, 'name'):
@@ -7949,7 +7980,13 @@ def _make_allocation_usage_dict(ctx, prefix=None):
7949
7980
  elif len(name_list) == 1:
7950
7981
  name_text = name_list[0].getText()
7951
7982
  name, shortname = _extract_name_shortname(name_text)
7952
-
7983
+
7984
+ # Issue #5: capture the `allocate X to Y` (or `allocate X, Y to Z`)
7985
+ # connector part. Either standalone or appended after the
7986
+ # allocation keyword + optional usageDeclaration.
7987
+ if aud and hasattr(aud, 'connectorPart') and aud.connectorPart():
7988
+ connector_part = _build_connector_part_dict(aud.connectorPart())
7989
+
7953
7990
  return {
7954
7991
  "name": "PackageMember",
7955
7992
  "prefix": None,
@@ -7974,6 +8011,7 @@ def _make_allocation_usage_dict(ctx, prefix=None):
7974
8011
  "specialization": None
7975
8012
  }
7976
8013
  },
8014
+ "connectorPart": connector_part,
7977
8015
  "body": {
7978
8016
  "name": "UsageBody",
7979
8017
  "body": {
@@ -7386,6 +7386,8 @@ class ConnectorPart:
7386
7386
  if valid_definition(definition, self.__class__.__name__):
7387
7387
  if definition["part"]["name"] == "BinaryConnectorPart":
7388
7388
  self.part = BinaryConnectorPart(definition["part"])
7389
+ elif definition["part"]["name"] == "NaryConnectorPart":
7390
+ self.part = NaryConnectorPart(definition["part"])
7389
7391
  else:
7390
7392
  print(f"ConnectorPart: unhandled {definition['part']['name']}") # pragma: no cover
7391
7393
  self.part = None # pragma: no cover
@@ -7417,6 +7419,23 @@ class BinaryConnectorPart:
7417
7419
  }
7418
7420
 
7419
7421
 
7422
+ class NaryConnectorPart:
7423
+ def __init__(self, definition):
7424
+ if valid_definition(definition, self.__class__.__name__):
7425
+ self.children = []
7426
+ for relationship in definition["ownedRelationship"]:
7427
+ self.children.append(ConnectorEndMember(relationship))
7428
+
7429
+ def dump(self):
7430
+ return "(" + ", ".join([child.dump() for child in self.children]) + ")"
7431
+
7432
+ def get_definition(self):
7433
+ return {
7434
+ "name": self.__class__.__name__,
7435
+ "ownedRelationship": [c.get_definition() for c in self.children],
7436
+ }
7437
+
7438
+
7420
7439
  class ConnectorEndMember:
7421
7440
  def __init__(self, definition):
7422
7441
  if valid_definition(definition, self.__class__.__name__):
@@ -9862,8 +9881,39 @@ class _PrefixedUsageBase:
9862
9881
 
9863
9882
  class AllocationUsage(_PrefixedUsageBase):
9864
9883
  # allocationUsage : occurrenceUsagePrefix ALLOCATION usageDeclaration? usageBody
9884
+ # allocationUsageDeclaration : ALLOCATION usageDeclaration? (ALLOCATE connectorPart)?
9885
+ # | ALLOCATE connectorPart
9865
9886
  keyword = "allocation"
9866
9887
 
9888
+ def __init__(self, definition=None):
9889
+ super().__init__(definition)
9890
+ self.connectorPart = None
9891
+ if definition is not None and valid_definition(definition, self.__class__.__name__):
9892
+ if definition.get("connectorPart") is not None:
9893
+ self.connectorPart = ConnectorPart(definition["connectorPart"])
9894
+
9895
+ def dump(self):
9896
+ parts = []
9897
+ if self.prefix is not None:
9898
+ parts.append(self.prefix.dump())
9899
+ # Render as `allocation [name] [allocate X to Y]`
9900
+ parts.append(self.keyword)
9901
+ if self.declaration is not None:
9902
+ decl_dump = self.declaration.dump()
9903
+ if decl_dump:
9904
+ parts.append(decl_dump)
9905
+ if self.connectorPart is not None:
9906
+ parts.append("allocate")
9907
+ parts.append(self.connectorPart.dump())
9908
+ if self.body is not None:
9909
+ parts.append(self.body.dump())
9910
+ return " ".join(parts)
9911
+
9912
+ def get_definition(self):
9913
+ output = super().get_definition()
9914
+ output["connectorPart"] = self.connectorPart.get_definition() if self.connectorPart else None
9915
+ return output
9916
+
9867
9917
 
9868
9918
  class RenderingUsage(_PrefixedUsageBase):
9869
9919
  # renderingUsage : occurrenceUsagePrefix RENDERING usage
File without changes
File without changes
File without changes
File without changes