sysmlpy 0.69.0__tar.gz → 0.69.1__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 (158) hide show
  1. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/PKG-INFO +1 -1
  2. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/pyproject.toml +1 -1
  3. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/__init__.py +1 -1
  4. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/semantic.py +174 -5
  5. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/LICENSE +0 -0
  6. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/README.md +0 -0
  7. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/__main__.py +0 -0
  8. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/README.md +0 -0
  9. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  10. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  11. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  12. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  13. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  14. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  15. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  16. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  17. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  18. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  19. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  20. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr_parser.py +0 -0
  21. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr_visitor.py +0 -0
  22. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/boxes_view.py +0 -0
  23. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/definition.py +0 -0
  24. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/evaluator.py +0 -0
  25. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/examples/attribute_values.py +0 -0
  26. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/examples/part_attributes.py +0 -0
  27. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  28. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/formatting.py +0 -0
  29. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  30. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  31. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  32. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  33. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  34. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  35. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  36. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  37. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  38. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  39. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  40. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  41. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  42. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  43. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  44. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  45. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/classes.py +0 -0
  46. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/interchange.py +0 -0
  47. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/LICENSE +0 -0
  48. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/README.md +0 -0
  49. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/__init__.py +0 -0
  50. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  51. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  52. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  53. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  54. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  55. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  56. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  57. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  58. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  59. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  60. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  61. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  62. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  63. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  64. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  65. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  66. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  67. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  68. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  69. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  70. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  71. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  72. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  73. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  74. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  75. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  76. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  77. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  78. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  79. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  80. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  81. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  82. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  83. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  84. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  85. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  86. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  87. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  88. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  89. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  90. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  91. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  92. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  93. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  94. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  95. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  96. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  97. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  98. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  99. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  100. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  101. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  102. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  103. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  104. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  105. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  106. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  107. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  108. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  109. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  110. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  111. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  112. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  113. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  114. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  115. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  116. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  117. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  118. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  119. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  120. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  121. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  122. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  123. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  124. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  125. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  126. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  127. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  128. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  129. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  130. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  131. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  132. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  133. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Items.sysml +0 -0
  134. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  135. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  136. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  137. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  138. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  139. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/States.sysml +0 -0
  140. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  141. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  142. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  143. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Views.sysml +0 -0
  144. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/__init__.py +0 -0
  145. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/__main__.py +0 -0
  146. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/protocol.py +0 -0
  147. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/server.py +0 -0
  148. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/stdio.py +0 -0
  149. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/navigate.py +0 -0
  150. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/plantuml.py +0 -0
  151. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/project.py +0 -0
  152. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/sim.py +0 -0
  153. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/spreadsheet.py +0 -0
  154. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/store.py +0 -0
  155. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/traceability.py +0 -0
  156. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/us_customary_units.txt +0 -0
  157. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/usage.py +0 -0
  158. {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysmlpy
3
- Version: 0.69.0
3
+ Version: 0.69.1
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.69.0"
9
+ version = "0.69.1"
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.69.0"
37
+ __version__ = "0.69.1"
38
38
 
39
39
  from sysmlpy.usage import (
40
40
  Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
@@ -1236,6 +1236,55 @@ class ExpressionIdentifierCollector:
1236
1236
  self._walk(child, results, child_scope)
1237
1237
 
1238
1238
 
1239
+ def _find_payload_parameters(node: Any) -> list:
1240
+ """Locate every ``PayloadParameter`` dict in a grammar tree."""
1241
+ out: list = []
1242
+
1243
+ def walk(n: Any) -> None:
1244
+ if isinstance(n, dict):
1245
+ if n.get("name") == "PayloadParameter":
1246
+ out.append(n)
1247
+ for v in n.values():
1248
+ if isinstance(v, (dict, list)):
1249
+ walk(v)
1250
+ elif isinstance(n, list):
1251
+ for item in n:
1252
+ if isinstance(item, (dict, list)):
1253
+ walk(item)
1254
+
1255
+ walk(node)
1256
+ return out
1257
+
1258
+
1259
+ def _payload_reference(payload: Any) -> str | None:
1260
+ """The name a ``PayloadParameter`` refers to, if any.
1261
+
1262
+ Bare ``accept Sig`` → the OwnedFeatureTyping QualifiedName.
1263
+ Guarded ``accept Sig when ...`` → ``identification.declaredName``
1264
+ (only when no typing is present — with both, the identification
1265
+ is a fresh declaration, not a reference).
1266
+ """
1267
+ if not isinstance(payload, dict):
1268
+ return None
1269
+ feature = payload.get("feature") or {}
1270
+ rels = feature.get("ownedRelationship")
1271
+ rel_list = rels if isinstance(rels, list) else [rels] if isinstance(rels, dict) else []
1272
+ for rel in rel_list:
1273
+ t = ((rel.get("type") or {}).get("type") or {}) \
1274
+ if isinstance(rel, dict) else {}
1275
+ names = t.get("names")
1276
+ if isinstance(names, list) and names:
1277
+ return "::".join(str(n) for n in names)
1278
+ if rel_list:
1279
+ return None # typed payload — identification is a declaration
1280
+ ident = payload.get("identification")
1281
+ if isinstance(ident, dict):
1282
+ name = ident.get("declaredName")
1283
+ if name:
1284
+ return str(name)
1285
+ return None
1286
+
1287
+
1239
1288
  def _find_owned_expressions(node: Any) -> list[dict]:
1240
1289
  """Locate every ``OwnedExpression`` dict in a grammar definition tree."""
1241
1290
  out: list[dict] = []
@@ -2329,6 +2378,8 @@ class SemanticAnalyzer:
2329
2378
  issues.extend(self._check_connector_ends_compatible(model))
2330
2379
  issues.extend(self._check_multiplicity_bounds_valid(model))
2331
2380
  issues.extend(self._check_state_machines(model))
2381
+ issues.extend(self._check_trigger_payloads(model, symtab, lib_roots))
2382
+ issues.extend(self._check_requirement_coverage(model))
2332
2383
 
2333
2384
  # Step 6: Stylistic checks (warnings, not errors)
2334
2385
  if style_checks:
@@ -2914,6 +2965,124 @@ class SemanticAnalyzer:
2914
2965
 
2915
2966
  # -- OCL well-formedness constraints ------------------------------------
2916
2967
 
2968
+ def _check_trigger_payloads(
2969
+ self,
2970
+ model: Any,
2971
+ symtab: "SymbolTable",
2972
+ lib_roots: list,
2973
+ ) -> list[SemanticIssue]:
2974
+ """Resolve ``accept <Sig>`` trigger payload references (Goal 9).
2975
+
2976
+ The shorthand ``accept <Sig> [when <expr>]`` binds a transition
2977
+ trigger to a payload/signal definition. A typo there is
2978
+ silent today: the transition simply never fires, and nothing
2979
+ in analyze() looks at payload names. Two parse shapes exist
2980
+ (both verified against the visitor output):
2981
+
2982
+ - bare ``accept Sig`` — PayloadParameter carries an
2983
+ OwnedFeatureTyping → QualifiedName reference;
2984
+ - guarded ``accept Sig when expr`` — the visitor parks the
2985
+ name in ``identification.declaredName`` with no typing.
2986
+
2987
+ In both the name is meant as a reference to a declared
2988
+ definition, so each payload name is resolved against the
2989
+ symbol table in the transition's scope. Unresolved payloads
2990
+ produce UNRESOLVED_TRIGGER_PAYLOAD errors. When both an
2991
+ identification and a typing are present (``accept e : T``),
2992
+ only the typing is a reference — the identification is a
2993
+ fresh declaration.
2994
+ """
2995
+ issues: list[SemanticIssue] = []
2996
+ try:
2997
+ from sysmlpy.sim import load_model_grammar
2998
+ visit = load_model_grammar(model)
2999
+ except Exception:
3000
+ return issues
3001
+
3002
+ for element, scope_path in self._walk_usages(model):
3003
+ # Transitions live inside State definitions' grammar trees
3004
+ # (no TransitionUsage object of their own) — extracting at
3005
+ # the State level attributes each payload to exactly one
3006
+ # element and keeps the scope path correct.
3007
+ if type(element).__name__ != "State":
3008
+ continue
3009
+ grammar_def = None
3010
+ grammar = getattr(element, "grammar", None)
3011
+ if grammar is None:
3012
+ continue
3013
+ try:
3014
+ grammar_def = grammar.get_definition()
3015
+ except Exception:
3016
+ continue
3017
+ if not isinstance(grammar_def, dict):
3018
+ continue
3019
+ for payload in _find_payload_parameters(grammar_def):
3020
+ ref = _payload_reference(payload)
3021
+ if not ref:
3022
+ continue
3023
+ if self._is_resolved(ref, symtab, scope_path, lib_roots):
3024
+ continue
3025
+ issues.append(SemanticIssue(
3026
+ severity="error",
3027
+ code="UNRESOLVED_TRIGGER_PAYLOAD",
3028
+ message=(
3029
+ f"Accept trigger payload '{ref}' in "
3030
+ f"{type(element).__name__} "
3031
+ f"'{getattr(element, 'name', '<anonymous>')}' "
3032
+ "does not resolve to a defined symbol; the "
3033
+ "transition can never fire"),
3034
+ element=element,
3035
+ reference=ref,
3036
+ ))
3037
+ return issues
3038
+
3039
+ @staticmethod
3040
+ def _walk_usages(model: Any):
3041
+ """Yield ``(element, scope_path)`` for every usage-like element."""
3042
+ def walk(element, scope_path):
3043
+ name = getattr(element, "name", None)
3044
+ elem_type = type(element).__name__
3045
+ is_container = getattr(element, "is_definition", False) or elem_type == "Package"
3046
+ child_scope = scope_path
3047
+ if is_container and name is not None and elem_type != "Model":
3048
+ child_scope = scope_path + [name]
3049
+ yield element, scope_path
3050
+ for child in getattr(element, "children", []):
3051
+ yield from walk(child, child_scope)
3052
+
3053
+ yield from walk(model, [])
3054
+
3055
+ def _check_requirement_coverage(self, model: Any) -> list[SemanticIssue]:
3056
+ """Cross-check requirement traceability coverage (Goal 9).
3057
+
3058
+ Reuses the Goal 2 traceability extractor: every requirement
3059
+ *usage* with no ``satisfy`` *and* no ``verify`` relationship
3060
+ yields a REQUIREMENT_UNCOVERED warning. ``requirement def``
3061
+ declarations are categories/templates, not traceable
3062
+ instances, and are never flagged. Partially covered
3063
+ requirements (satisfied but unverified or vice versa) are not
3064
+ flagged — that is a project-progress signal, not a
3065
+ well-formedness problem.
3066
+ """
3067
+ issues: list[SemanticIssue] = []
3068
+ try:
3069
+ from sysmlpy.traceability import extract_traceability
3070
+ report = extract_traceability(model)
3071
+ except Exception:
3072
+ return issues
3073
+ for trace in report.uncovered():
3074
+ if getattr(trace, "is_definition", False):
3075
+ continue
3076
+ issues.append(SemanticIssue(
3077
+ severity="warning",
3078
+ code="REQUIREMENT_UNCOVERED",
3079
+ message=(
3080
+ f"Requirement '{trace.name}' has no satisfy and "
3081
+ "no verify relationships"),
3082
+ reference=trace.name,
3083
+ ))
3084
+ return issues
3085
+
2917
3086
  def _check_state_machines(self, model: Any) -> list[SemanticIssue]:
2918
3087
  """OCL well-formedness for ``state def`` machines (Goal 9).
2919
3088
 
@@ -2930,12 +3099,12 @@ class SemanticAnalyzer:
2930
3099
  issues: list[SemanticIssue] = []
2931
3100
  try:
2932
3101
  # Lazy import: sim pulls the boxes-view collector and the
2933
- # evaluator; no import cycle at module level.
3102
+ # evaluator; no import cycle at module level. The sim
3103
+ # extra is optional — skip these checks without it.
2934
3104
  from sysmlpy.sim import SimulationError, build_state_machine
2935
-
2936
- visit = None
2937
- from sysmlpy import boxes_view as _bv
2938
- visit = _bv # noqa: F841 — ensures boxes_view loads once
3105
+ except ImportError:
3106
+ return issues
3107
+ try:
2939
3108
  machines = self._collect_machines(model)
2940
3109
  except SimulationError:
2941
3110
  return issues
File without changes
File without changes
File without changes
File without changes
File without changes