sysmlpy 0.87.0__tar.gz → 0.88.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 (160) hide show
  1. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/PKG-INFO +1 -1
  2. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/pyproject.toml +1 -1
  3. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/__init__.py +1 -1
  4. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr_visitor.py +116 -14
  5. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/definition.py +44 -0
  6. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/classes.py +28 -10
  7. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/usage.py +8 -0
  8. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/LICENSE +0 -0
  9. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/README.md +0 -0
  10. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/__main__.py +0 -0
  11. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/README.md +0 -0
  12. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  13. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  14. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  15. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  16. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  17. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  18. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  19. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  20. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  21. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  22. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  23. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/antlr_parser.py +0 -0
  24. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/boxes_view.py +0 -0
  25. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/dfa_cache.py +0 -0
  26. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/diff.py +0 -0
  27. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/evaluator.py +0 -0
  28. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/examples/attribute_values.py +0 -0
  29. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/examples/part_attributes.py +0 -0
  30. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  31. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/formatting.py +0 -0
  32. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  33. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  34. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  35. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  36. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  37. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  38. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  39. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  40. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  41. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  42. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  43. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  44. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  45. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  46. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  47. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  48. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/interchange.py +0 -0
  49. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/LICENSE +0 -0
  50. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/README.md +0 -0
  51. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/__init__.py +0 -0
  52. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  53. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  54. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  55. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  56. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  57. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  58. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  59. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  60. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  61. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  62. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  63. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  64. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  65. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  66. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  67. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  68. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  69. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  70. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  71. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  72. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  73. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  74. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  75. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  76. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  77. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  78. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  79. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  80. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  81. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  82. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  83. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  84. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  85. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  86. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  87. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  88. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  89. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  90. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  91. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  92. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  93. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  94. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  95. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  96. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  97. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  98. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  99. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  100. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  101. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  102. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  103. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  104. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  105. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  106. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  107. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  108. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  109. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  110. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  111. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  112. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  113. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  114. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  115. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  116. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  117. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  118. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  119. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  120. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  121. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  122. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  123. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  124. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  125. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  126. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  127. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  128. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  129. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  130. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  131. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  132. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  133. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  134. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  135. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
  136. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  137. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  138. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  139. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  140. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  141. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/States.sysml +0 -0
  142. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  143. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  144. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  145. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
  146. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/lsp/__init__.py +0 -0
  147. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/lsp/__main__.py +0 -0
  148. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/lsp/protocol.py +0 -0
  149. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/lsp/server.py +0 -0
  150. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/lsp/stdio.py +0 -0
  151. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/navigate.py +0 -0
  152. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/plantuml.py +0 -0
  153. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/project.py +0 -0
  154. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/semantic.py +0 -0
  155. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/sim.py +0 -0
  156. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/spreadsheet.py +0 -0
  157. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/store.py +0 -0
  158. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/traceability.py +0 -0
  159. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/us_customary_units.txt +0 -0
  160. {sysmlpy-0.87.0 → sysmlpy-0.88.0}/src/sysmlpy/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysmlpy
3
- Version: 0.87.0
3
+ Version: 0.88.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.87.0"
9
+ version = "0.88.0"
10
10
  description = ""
11
11
  authors = [{ name = "Jon R. Fox (mycr0ft)", email = "jon.fox@drfox.com" }]
12
12
  readme = "README.md"
@@ -34,7 +34,7 @@ __all__ = [
34
34
  "render_state_transition_view_svg", "boxes_view",
35
35
  ]
36
36
  __author__ = "Jon Fox"
37
- __version__ = "0.87.0"
37
+ __version__ = "0.88.0"
38
38
 
39
39
  from sysmlpy.usage import (
40
40
  Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
@@ -2492,14 +2492,15 @@ def _make_satisfy_requirement_usage_dict(sru_ctx, prefix=None):
2492
2492
  }
2493
2493
  }
2494
2494
 
2495
- # Extract valuePart
2495
+ # Extract valuePart (``satisfy s1 : R = 3;``)
2496
+ # valuePart : featureValue ; featureValue : (EQ | COLON_EQ |
2497
+ # DEFAULT …) ownedExpression — use the shared extractor, which
2498
+ # handles the featureValue wrapper and the EQ/COLON_EQ/DEFAULT
2499
+ # flags (v0.88.0 — previously read vp.ownedExpression() directly,
2500
+ # which is one level too high, so the value was dropped).
2496
2501
  valuepart = None
2497
2502
  if hasattr(sru_ctx, 'valuePart') and sru_ctx.valuePart():
2498
- vp = sru_ctx.valuePart()
2499
- if hasattr(vp, 'ownedExpression') and vp.ownedExpression():
2500
- expr = _visit_owned_expression(vp.ownedExpression())
2501
- if expr:
2502
- valuepart = {"name": "ValuePart", "ownedRelationship": expr}
2503
+ valuepart = _visit_value_part(sru_ctx.valuePart())
2503
2504
 
2504
2505
  # Extract satisfactionSubjectMember (after 'by')
2505
2506
  ssm = None
@@ -5566,6 +5567,8 @@ def _visit_payload_feature(ctx):
5566
5567
  PayloadFeature class expects:
5567
5568
  identification, valuepart, multiplicity1, multiplicity2, ownedRelationship (OwnedFeatureTyping), pfsp
5568
5569
  For 'accept VehicleStartSignal': ownedRelationship contains the type name.
5570
+ For 'accept msg : M': identification + pfsp (v0.88.0 — previously
5571
+ hardcoded to None, so the member's name and typing were dropped).
5569
5572
  """
5570
5573
  if ctx is None:
5571
5574
  return None
@@ -5598,14 +5601,49 @@ def _visit_payload_feature(ctx):
5598
5601
  }
5599
5602
  }
5600
5603
 
5604
+ # identification (``accept msg : M`` — first grammar alternative:
5605
+ # ``identification payloadFeatureSpecializationPart valuePart?``)
5606
+ identification = None
5607
+ if hasattr(ctx, 'identification') and ctx.identification():
5608
+ ident = ctx.identification()
5609
+ if ident:
5610
+ name_list = ident.name() if hasattr(ident, 'name') else None
5611
+ if name_list and isinstance(name_list, list):
5612
+ if len(name_list) == 2:
5613
+ shortname = name_list[0].getText()
5614
+ name = name_list[1].getText()
5615
+ elif len(name_list) == 1:
5616
+ name_text = name_list[0].getText()
5617
+ name = name_text
5618
+ shortname = None
5619
+ else:
5620
+ name = None
5621
+ shortname = None
5622
+ identification = {
5623
+ "name": "Identification",
5624
+ "declaredShortName": shortname,
5625
+ "declaredName": name
5626
+ }
5627
+
5628
+ # pfsp (the ``: M[1]`` specializations after the name)
5629
+ pfsp = None
5630
+ if hasattr(ctx, 'payloadFeatureSpecializationPart') and ctx.payloadFeatureSpecializationPart():
5631
+ pfsp = _build_pfsp_from_ctx(ctx.payloadFeatureSpecializationPart())
5632
+
5633
+ # valuePart (``accept msg = 3`` — ``identification valuePart``
5634
+ # alternative)
5635
+ valuepart = None
5636
+ if hasattr(ctx, 'valuePart') and ctx.valuePart():
5637
+ valuepart = _visit_value_part(ctx.valuePart())
5638
+
5601
5639
  return {
5602
5640
  "name": "PayloadFeature",
5603
- "identification": None,
5604
- "valuepart": None,
5641
+ "identification": identification,
5642
+ "valuepart": valuepart,
5605
5643
  "multiplicity1": None,
5606
5644
  "multiplicity2": None,
5607
5645
  "ownedRelationship": owned_rel,
5608
- "pfsp": None
5646
+ "pfsp": pfsp
5609
5647
  }
5610
5648
 
5611
5649
 
@@ -10008,6 +10046,21 @@ def _visit_definition_body_item_dict(item_ctx, is_interface=False):
10008
10046
  inner_element = None
10009
10047
  wrapper = None
10010
10048
 
10049
+ # Check for importRule first (first grammar alternative).
10050
+ # Imports are legal in every body — usage bodies included
10051
+ # (``part p1 { private import Q::*; }``). Reuse the package-body
10052
+ # Import dict shape and wrap it directly as the body item's
10053
+ # relationship (DefinitionBodyItem dispatches on item["name"],
10054
+ # same convention as RootNamespace) — previously silently
10055
+ # dropped (v0.88.0).
10056
+ if hasattr(item_ctx, 'importRule') and item_ctx.importRule():
10057
+ import_dict = _visit_import_rule_dict(item_ctx.importRule())
10058
+ if import_dict is not None:
10059
+ return {
10060
+ "name": "InterfaceBodyItem" if is_interface else "DefinitionBodyItem",
10061
+ "ownedRelationship": [import_dict],
10062
+ }
10063
+
10011
10064
  # Check for occurrenceUsageElement (part, item, port, action, etc.)
10012
10065
  if hasattr(item_ctx, 'occurrenceUsageElement') and item_ctx.occurrenceUsageElement():
10013
10066
  occ_elem = item_ctx.occurrenceUsageElement()
@@ -14168,6 +14221,24 @@ def _build_full_specialization_from_ud(ud):
14168
14221
  if not specs and multiplicity is None:
14169
14222
  return None
14170
14223
 
14224
+ specialization_list = _feature_specialization_dicts(specs)
14225
+
14226
+ return {
14227
+ "name": "FeatureSpecializationPart",
14228
+ "specialization": specialization_list,
14229
+ "multiplicity": multiplicity,
14230
+ "specialization2": [],
14231
+ "multiplicity2": None,
14232
+ }
14233
+
14234
+
14235
+ def _feature_specialization_dicts(specs):
14236
+ """Build FeatureSpecialization dicts from featureSpecialization ctxs.
14237
+
14238
+ Shared core for the FeatureSpecializationPart (usages) and
14239
+ PayloadFeatureSpecializationPart (payload features, e.g. accept
14240
+ members) builders. Handles typings, redefinitions, subsettings and
14241
+ references."""
14171
14242
  specialization_list = []
14172
14243
 
14173
14244
  for spec in specs:
@@ -14292,12 +14363,43 @@ def _build_full_specialization_from_ud(ud):
14292
14363
  }
14293
14364
  })
14294
14365
 
14366
+ return specialization_list
14367
+
14368
+
14369
+ def _build_pfsp_from_ctx(psp_ctx):
14370
+ """Build a PayloadFeatureSpecializationPart dict from a
14371
+ payloadFeatureSpecializationPart context.
14372
+
14373
+ Grammar: ``featureSpecialization+ multiplicityPart?
14374
+ featureSpecialization* | multiplicityPart featureSpecialization+``.
14375
+ Used by payload features (e.g. ``accept msg : M[1]``) — v0.88.0,
14376
+ previously hardcoded to None so the member's typing was dropped.
14377
+ """
14378
+ if psp_ctx is None:
14379
+ return None
14380
+
14381
+ first_group = []
14382
+ second_group = []
14383
+ seen_multiplicity = False
14384
+ for child in psp_ctx.children or []:
14385
+ child_name = type(child).__name__
14386
+ if child_name == 'MultiplicityPartContext':
14387
+ seen_multiplicity = True
14388
+ elif child_name == 'FeatureSpecializationContext':
14389
+ (second_group if seen_multiplicity else first_group).append(child)
14390
+
14391
+ specs = first_group + second_group
14392
+ specialization_list = _feature_specialization_dicts(specs)
14393
+ mp = _get_multiplicity_part(psp_ctx)
14394
+
14395
+ if not specialization_list and mp is None:
14396
+ return None
14397
+
14295
14398
  return {
14296
- "name": "FeatureSpecializationPart",
14297
- "specialization": specialization_list,
14298
- "multiplicity": multiplicity,
14299
- "specialization2": [],
14300
- "multiplicity2": None,
14399
+ "name": "PayloadFeatureSpecializationPart",
14400
+ "ownedRelationship": _feature_specialization_dicts(first_group),
14401
+ "ownedRelationship2": _feature_specialization_dicts(second_group),
14402
+ "mp": mp,
14301
14403
  }
14302
14404
 
14303
14405
 
@@ -970,6 +970,26 @@ class Package(Searchable):
970
970
  """
971
971
  return list(self._imports)
972
972
 
973
+ def _add_metadata_child(self, mf):
974
+ """Surface a MetadataFeature grammar object as a Metadata child.
975
+
976
+ Package-level ``metadata m1 : MD;`` members parse into a
977
+ MetadataFeature (the ``@``-annotation form) which the public-API
978
+ tree previously dropped (v0.88.0)."""
979
+ md_obj = Metadata()
980
+ md_obj.grammar = mf
981
+ ident = getattr(mf, 'identification', None)
982
+ declared = getattr(ident, 'declaredName', None)
983
+ if declared:
984
+ md_obj.name = declared
985
+ typing = getattr(mf, 'typing', None)
986
+ qn = getattr(getattr(getattr(typing, 'type', None), 'type', None), 'names', None)
987
+ if qn:
988
+ md_obj._typed_by_name = '::'.join(qn)
989
+ md_obj.parent = self
990
+ self.children.append(md_obj)
991
+ return md_obj
992
+
973
993
  def load_from_grammar(self, grammar):
974
994
  """Load package structure from a parsed grammar object.
975
995
 
@@ -1295,6 +1315,30 @@ class Package(Searchable):
1295
1315
  m.name = feat_decl.identification.declaredName
1296
1316
  m.parent = self
1297
1317
  self.children.append(m)
1318
+ elif inner_class == "AnnotatingElement":
1319
+ # v0.88.0: a package-level ``metadata m1 : MD;`` member
1320
+ # parses as DefinitionElement -> AnnotatingElement ->
1321
+ # MetadataFeature (the ``@``-annotation form). Surface it
1322
+ # as a navigable Metadata public-API object — previously
1323
+ # it was silently skipped and find('m1') failed. The
1324
+ # dump path already round-trips it through the grammar
1325
+ # tree, so this is purely API-side. Other annotating
1326
+ # elements (Documentation, CommentSysML,
1327
+ # TextualRepresentation) keep their existing handling.
1328
+ mf = getattr(inner_element, 'children', None)
1329
+ if mf is not None and mf.__class__.__name__ == "MetadataFeature":
1330
+ self._add_metadata_child(mf)
1331
+ else:
1332
+ print(f"[Package.load_from_grammar] Unknown class: {inner_class} - skipping") # pragma: no cover
1333
+ elif inner_class == "NonOccurrenceUsageElement":
1334
+ # v0.88.0: the rebuilt shape after _ensure_body wraps a
1335
+ # MetadataFeature the same way attribute usages are
1336
+ # wrapped — surface it like the AnnotatingElement form.
1337
+ mf = getattr(inner_element, 'children', None)
1338
+ if mf is not None and mf.__class__.__name__ == "MetadataFeature":
1339
+ self._add_metadata_child(mf)
1340
+ else:
1341
+ print(f"[Package.load_from_grammar] Unknown class: {inner_class} - skipping") # pragma: no cover
1298
1342
  elif inner_class == "RenderingDefinition":
1299
1343
  r = Rendering()
1300
1344
  r.grammar = inner_element
@@ -5098,6 +5098,12 @@ class DefinitionBodyItem:
5098
5098
  self.children.append(NonOccurrenceUsageMember(item))
5099
5099
  elif item["name"] == "DefinitionMember":
5100
5100
  self.children.append(DefinitionMember(item))
5101
+ elif item["name"] == "Import":
5102
+ # Imports are legal in usage bodies too
5103
+ # (``part p1 { private import Q::*; }``) —
5104
+ # same dict shape as package-body imports
5105
+ # (v0.88.0).
5106
+ self.children.append(Import(item))
5101
5107
  else:
5102
5108
  print(f"DefinitionBodyItem: unknown relationship {definition}") # pragma: no cover
5103
5109
 
@@ -5255,6 +5261,13 @@ class NonOccurrenceUsageElement:
5255
5261
  self.children = CalculationUsage(definition["ownedRelatedElement"])
5256
5262
  elif name == "MetadataUsage":
5257
5263
  self.children = MetadataUsage(definition["ownedRelatedElement"])
5264
+ elif name == "MetadataFeature":
5265
+ # v0.88.0: a Metadata public-API child re-serializes its
5266
+ # MetadataFeature grammar through NonOccurrenceUsageElement
5267
+ # (the _NonOccurrenceUsage wrapping) — accept it here so
5268
+ # the rebuild round-trips instead of crashing on
5269
+ # children=None.
5270
+ self.children = MetadataFeature(definition["ownedRelatedElement"])
5258
5271
  elif name == "EndFeatureUsage":
5259
5272
  self.children = EndFeatureUsage(definition["ownedRelatedElement"])
5260
5273
  elif name == "AssertConstraintUsage":
@@ -7318,17 +7331,22 @@ class PayloadFeatureSpecializationPart:
7318
7331
  if self.mp is None:
7319
7332
  for child in self.children:
7320
7333
  output.append(child.dump())
7334
+ elif len(self.children) == 0:
7335
+ # multiplicityPart featureSpecialization+ alternative —
7336
+ # multiplicity genuinely comes first (``[1] : M``).
7337
+ output.append(self.mp.dump())
7338
+ for child in self.children2:
7339
+ output.append(child.dump())
7321
7340
  else:
7322
- if len(self.children2) == 0:
7323
- output.append(self.mp.dump())
7324
- for child in self.children:
7325
- output.append(child.dump())
7326
- else:
7327
- for child in self.children:
7328
- output.append(child.dump())
7329
- output.append(self.mp.dump())
7330
- for child in self.children2:
7331
- output.append(child.dump())
7341
+ # featureSpecialization+ multiplicityPart? featureSpecialization*
7342
+ # — natural source order (``: M[1]``). The previous
7343
+ # mp-first rendering produced ``[1] : M`` for the first
7344
+ # alternative, which does not re-parse (v0.88.0).
7345
+ for child in self.children:
7346
+ output.append(child.dump())
7347
+ output.append(self.mp.dump())
7348
+ for child in self.children2:
7349
+ output.append(child.dump())
7332
7350
  return "".join(output)
7333
7351
 
7334
7352
  def get_definition(self):
@@ -1098,6 +1098,14 @@ class Usage(Searchable):
1098
1098
  a.grammar = inner
1099
1099
  a.parent = self
1100
1100
  self.children.append(a)
1101
+ elif inner.__class__.__name__ == "RenderingUsage":
1102
+ # v0.88.0: nested ``rendering r2 : E;`` inside a
1103
+ # part/item body was dumped (via the grammar
1104
+ # tree) but never surfaced as a public-API
1105
+ # Rendering child.
1106
+ r = Rendering().load_from_grammar(inner)
1107
+ r.parent = self
1108
+ self.children.append(r)
1101
1109
  elif inner.__class__.__name__ == "PortionUsage":
1102
1110
  c = Part().load_from_grammar(inner)
1103
1111
  c.parent = self
File without changes
File without changes
File without changes
File without changes
File without changes