sysmlpy 0.69.1__tar.gz → 0.70.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 (158) hide show
  1. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/PKG-INFO +1 -1
  2. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/pyproject.toml +1 -1
  3. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/__init__.py +1 -1
  4. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/semantic.py +96 -0
  5. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/LICENSE +0 -0
  6. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/README.md +0 -0
  7. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/__main__.py +0 -0
  8. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/README.md +0 -0
  9. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  10. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  11. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  12. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  13. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  14. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  15. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  16. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  17. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  18. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  19. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  20. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr_parser.py +0 -0
  21. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/antlr_visitor.py +0 -0
  22. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/boxes_view.py +0 -0
  23. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/definition.py +0 -0
  24. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/evaluator.py +0 -0
  25. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/examples/attribute_values.py +0 -0
  26. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/examples/part_attributes.py +0 -0
  27. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  28. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/formatting.py +0 -0
  29. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  30. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  31. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  32. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  33. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  34. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  35. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  36. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  37. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  38. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  39. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  40. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  41. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  42. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  43. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  44. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  45. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/grammar/classes.py +0 -0
  46. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/interchange.py +0 -0
  47. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/LICENSE +0 -0
  48. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/README.md +0 -0
  49. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/__init__.py +0 -0
  50. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  51. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  52. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  53. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  54. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  55. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  56. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  57. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  58. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  59. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  60. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  61. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  62. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  63. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  64. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  65. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  66. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  67. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  68. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  69. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  70. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  71. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  72. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  73. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  74. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  75. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  76. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  77. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  78. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  79. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  80. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  81. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  82. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  83. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  84. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  85. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  86. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  87. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  88. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  89. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  90. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  91. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  92. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  93. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  94. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  95. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  96. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  97. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  98. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  99. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  100. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  101. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  102. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  103. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  104. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  105. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  106. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  107. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  108. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  109. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  110. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  111. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  112. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  113. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  114. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  115. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  116. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  117. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  118. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  119. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  120. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  121. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  122. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  123. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  124. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  125. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  126. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  127. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  128. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  129. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  130. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  131. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  132. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  133. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
  134. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  135. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  136. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  137. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  138. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  139. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/States.sysml +0 -0
  140. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  141. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  142. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  143. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
  144. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/lsp/__init__.py +0 -0
  145. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/lsp/__main__.py +0 -0
  146. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/lsp/protocol.py +0 -0
  147. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/lsp/server.py +0 -0
  148. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/lsp/stdio.py +0 -0
  149. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/navigate.py +0 -0
  150. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/plantuml.py +0 -0
  151. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/project.py +0 -0
  152. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/sim.py +0 -0
  153. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/spreadsheet.py +0 -0
  154. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/store.py +0 -0
  155. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/traceability.py +0 -0
  156. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/us_customary_units.txt +0 -0
  157. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/usage.py +0 -0
  158. {sysmlpy-0.69.1 → sysmlpy-0.70.0}/src/sysmlpy/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysmlpy
3
- Version: 0.69.1
3
+ Version: 0.70.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.69.1"
9
+ version = "0.70.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.69.1"
37
+ __version__ = "0.70.0"
38
38
 
39
39
  from sysmlpy.usage import (
40
40
  Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
@@ -2380,6 +2380,7 @@ class SemanticAnalyzer:
2380
2380
  issues.extend(self._check_state_machines(model))
2381
2381
  issues.extend(self._check_trigger_payloads(model, symtab, lib_roots))
2382
2382
  issues.extend(self._check_requirement_coverage(model))
2383
+ issues.extend(self._check_trace_targets(model, symtab, lib_roots))
2383
2384
 
2384
2385
  # Step 6: Stylistic checks (warnings, not errors)
2385
2386
  if style_checks:
@@ -3083,6 +3084,101 @@ class SemanticAnalyzer:
3083
3084
  ))
3084
3085
  return issues
3085
3086
 
3087
+ def _check_trace_targets(
3088
+ self,
3089
+ model: Any,
3090
+ symtab: "SymbolTable",
3091
+ lib_roots: list,
3092
+ ) -> list[SemanticIssue]:
3093
+ """Resolve ``satisfy <req> by <part>`` targets (Goal 9).
3094
+
3095
+ A typo'd satisfy target is silent today — worse, the Goal 2
3096
+ traceability extractor materializes the dangling edge as a
3097
+ *phantom requirement* in coverage reports, so the real
3098
+ requirement reads uncovered while a fake one appears traced.
3099
+ Each satisfy target reference is resolved against the symbol
3100
+ table in the satisfying part's scope; unresolved targets
3101
+ produce UNRESOLVED_TRACE_TARGET errors.
3102
+ """
3103
+ issues: list[SemanticIssue] = []
3104
+ for element, scope_path in self._walk_usages(model):
3105
+ grammar = getattr(element, "grammar", None)
3106
+ if grammar is None or \
3107
+ grammar.__class__.__name__ != "SatisfyRequirementUsage":
3108
+ continue
3109
+ ors = getattr(grammar, "ors", None)
3110
+ if ors is None:
3111
+ continue
3112
+ try:
3113
+ ref = ors.dump().strip().rstrip(";").strip()
3114
+ except Exception:
3115
+ continue
3116
+ if not ref:
3117
+ continue
3118
+ if self._is_resolved(ref, symtab, scope_path, lib_roots):
3119
+ # Kind check: the target must be a requirement.
3120
+ # (Library-resolved targets yield no element here and
3121
+ # are left alone — conservative by design.)
3122
+ found = self._resolve_element(ref, symtab, scope_path)
3123
+ if found is not None and \
3124
+ type(found).__name__ != "Requirement":
3125
+ issues.append(SemanticIssue(
3126
+ severity="warning",
3127
+ code="TRACE_TARGET_NOT_REQUIREMENT",
3128
+ message=(
3129
+ f"satisfy target '{ref}' resolves to a "
3130
+ f"{type(found).__name__}, not a "
3131
+ "requirement"),
3132
+ element=element,
3133
+ reference=ref,
3134
+ ))
3135
+ continue
3136
+ issues.append(SemanticIssue(
3137
+ severity="error",
3138
+ code="UNRESOLVED_TRACE_TARGET",
3139
+ message=(
3140
+ f"satisfy target '{ref}' in "
3141
+ f"{type(element).__name__} "
3142
+ f"'{getattr(element, 'name', '<anonymous>')}' does "
3143
+ "not resolve to a defined requirement"),
3144
+ element=element,
3145
+ reference=ref,
3146
+ ))
3147
+ return issues
3148
+
3149
+ @staticmethod
3150
+ def _resolve_element(
3151
+ ref_str: str,
3152
+ symtab: "SymbolTable",
3153
+ scope_path: list[str],
3154
+ ):
3155
+ """The model element *ref_str* resolves to, if any.
3156
+
3157
+ Mirrors the symbol-table walk of :meth:`_is_resolved` (without
3158
+ the library-index shortcuts, which resolve to no model
3159
+ element).
3160
+ """
3161
+ current = symtab
3162
+ for scope_name in scope_path:
3163
+ child = current._children.get(scope_name)
3164
+ if child is not None:
3165
+ current = child
3166
+ else:
3167
+ break
3168
+ found = current.lookup(ref_str)
3169
+ if found is not None:
3170
+ return found
3171
+ if "::" in ref_str:
3172
+ parts = ref_str.split("::")
3173
+ table = current
3174
+ for part in parts[:-1]:
3175
+ found = table.lookup(part)
3176
+ if found is None:
3177
+ return None
3178
+ table = table._children.get(part, table)
3179
+ return table.lookup(parts[-1])
3180
+ return None
3181
+
3086
3182
  def _check_state_machines(self, model: Any) -> list[SemanticIssue]:
3087
3183
  """OCL well-formedness for ``state def`` machines (Goal 9).
3088
3184
 
File without changes
File without changes
File without changes
File without changes
File without changes