sysmlpy 0.96.3__tar.gz → 0.96.4__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 (177) hide show
  1. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/PKG-INFO +1 -1
  2. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/pyproject.toml +1 -1
  3. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/__init__.py +1 -1
  4. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/interchange.py +153 -6
  5. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/LICENSE +0 -0
  6. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/README.md +0 -0
  7. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/__main__.py +0 -0
  8. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/README.md +0 -0
  9. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  10. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  11. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  12. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  13. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  14. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  15. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  16. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  17. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  18. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  19. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  20. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr_parser.py +0 -0
  21. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/antlr_visitor.py +0 -0
  22. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/boxes_view.py +0 -0
  23. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/definition.py +0 -0
  24. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/dfa_cache.py +0 -0
  25. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/diff.py +0 -0
  26. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/evaluator.py +0 -0
  27. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/examples/attribute_values.py +0 -0
  28. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/examples/part_attributes.py +0 -0
  29. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  30. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/formatting.py +0 -0
  31. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  32. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  33. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  34. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  35. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  36. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  37. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  38. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  39. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  40. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  41. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  42. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  43. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  44. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  45. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  46. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  47. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/grammar/classes.py +0 -0
  48. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/ipython_magic.py +0 -0
  49. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLLexer.g4 +0 -0
  50. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLLexer.interp +0 -0
  51. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLLexer.py +0 -0
  52. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLLexer.tokens +0 -0
  53. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParser.g4 +0 -0
  54. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParser.interp +0 -0
  55. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParser.py +0 -0
  56. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParser.tokens +0 -0
  57. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParserVisitor.py +0 -0
  58. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/README.md +0 -0
  59. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/__init__.py +0 -0
  60. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/kerml.py +0 -0
  61. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/kerml/kerml_visitor.py +0 -0
  62. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/LICENSE +0 -0
  63. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/README.md +0 -0
  64. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/__init__.py +0 -0
  65. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  66. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  67. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  68. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  69. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  70. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  71. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  72. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  73. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  74. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  75. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  76. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  77. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  78. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  79. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  80. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  81. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  82. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  83. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  84. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  85. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  86. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  87. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  88. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  89. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  90. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  91. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  92. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  93. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  94. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  95. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  96. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  97. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  98. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  99. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  100. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  101. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  102. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  103. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  104. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  105. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  106. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  107. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  108. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  109. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  110. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  111. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  112. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  113. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  114. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  115. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  116. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  117. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  118. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  119. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  120. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  121. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  122. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  123. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  124. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  125. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  126. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  127. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  128. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  129. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  130. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  131. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  132. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  133. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  134. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  135. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  136. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  137. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  138. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  139. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  140. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  141. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  142. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  143. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  144. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  145. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  146. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  147. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  148. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Items.sysml +0 -0
  149. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  150. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  151. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  152. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  153. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  154. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/States.sysml +0 -0
  155. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  156. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  157. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  158. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Views.sysml +0 -0
  159. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/lsp/__init__.py +0 -0
  160. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/lsp/__main__.py +0 -0
  161. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/lsp/protocol.py +0 -0
  162. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/lsp/server.py +0 -0
  163. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/lsp/stdio.py +0 -0
  164. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/mdtables.py +0 -0
  165. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/navigate.py +0 -0
  166. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/plantuml.py +0 -0
  167. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/project.py +0 -0
  168. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/repl.py +0 -0
  169. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/reqif_io.py +0 -0
  170. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/semantic.py +0 -0
  171. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/sim.py +0 -0
  172. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/spreadsheet.py +0 -0
  173. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/store.py +0 -0
  174. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/traceability.py +0 -0
  175. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/us_customary_units.txt +0 -0
  176. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/usage.py +0 -0
  177. {sysmlpy-0.96.3 → sysmlpy-0.96.4}/src/sysmlpy/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysmlpy
3
- Version: 0.96.3
3
+ Version: 0.96.4
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.96.3"
9
+ version = "0.96.4"
10
10
  description = ""
11
11
  authors = [{ name = "Jon R. Fox (mycr0ft)", email = "jon.fox@drfox.com" }]
12
12
  readme = "README.md"
@@ -36,7 +36,7 @@ __all__ = [
36
36
  "render_state_transition_view_svg", "boxes_view",
37
37
  ]
38
38
  __author__ = "Jon Fox"
39
- __version__ = "0.96.3"
39
+ __version__ = "0.96.4"
40
40
 
41
41
  from sysmlpy.usage import (
42
42
  Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
@@ -62,6 +62,7 @@ Public surface:
62
62
  from __future__ import annotations
63
63
 
64
64
  import json as _json
65
+ import re as _re
65
66
  import uuid as _uuid
66
67
  from collections import Counter as _Counter
67
68
  from pathlib import Path as _Path
@@ -170,10 +171,16 @@ class _StableIdAssigner:
170
171
  - Unnamed element below a declared ancestor: hashes the anchor QN,
171
172
  the structural path from that ancestor (dictionary keys +
172
173
  sibling indexes), and the ``@type`` — so it moves only if the
173
- structure *between* it and its named anchor changes, never when
174
+ structure *between* it and its named ancestor changes, never when
174
175
  unrelated siblings elsewhere shift indexes.
175
176
  - Root: hashes the tree path under the fixed ``"root"`` anchor.
176
177
 
178
+ **Explicit ids (Phase 2b):** a ``doc /* @id: … */`` comment on the
179
+ element overrides derivation entirely — "never re-mint over an
180
+ explicit id". Harvested from the public element tree (`.doc`)
181
+ before flattening and keyed by declared QN path
182
+ (:func:`_harvest_doc_ids`); duplicate claims of one id raise.
183
+
177
184
  Same-name sibling collisions (two ``part def Engine`` under one
178
185
  parent) share a base hash; the occurrence index among content-key
179
186
  siblings is appended so ids stay unique. Elements in a collision
@@ -181,16 +188,65 @@ class _StableIdAssigner:
181
188
  documented degradation for L2 (see docs/stable-identities.md).
182
189
  """
183
190
 
184
- def __init__(self):
191
+ def __init__(self, explicit_ids: "dict | None" = None):
185
192
  #: base content-key -> next occurrence index
186
193
  self._occurrence: dict = {}
187
- #: node id() -> assigned @id (each dict node is visited once)
188
- self._assigned: dict = {}
194
+ #: declared QN path (dot-joined str) -> explicit id from
195
+ #: ``doc /* @id: … */`` comments (Phase 2b — overrides
196
+ #: derivation entirely)
197
+ self._explicit: dict = dict(explicit_ids or {})
198
+ #: explicit id value -> adopting declared QN path (duplicate
199
+ #: claims of the same id from different elements raise)
200
+ self._id_owner: dict = {}
201
+ #: ('adopted', qn_str, struct_path) — one node of each identity
202
+ #: path adopts; wrapper re-visits keep derived ids
203
+ self._adopted: set = set()
189
204
 
190
205
  def id_for(self, node: dict, qn_path: tuple, struct_path: tuple) -> str:
191
206
  ident = _identification_of(node) if isinstance(node, dict) else None
192
207
  own_name = (ident or {}).get("declaredName")
193
208
  type_name = node.get("name") if isinstance(node, dict) else None
209
+ # Explicit-id lookup: match the SHORT declared path — qn_path
210
+ # accumulates the element's own name once per nested
211
+ # declaration/identification wrapper level (PackageDeclaration →
212
+ # DefinitionDeclaration → …), so 'P' arrives as 'P',
213
+ # 'P.P', … 'P.P.P'. The harvested doc-id key ('P') therefore
214
+ # matches a *suffix-deduped* qn: dedupe consecutive repeats and
215
+ # collapse to the minimal unique path.
216
+ qn_str = _dedupe_repeat_tail(qn_path, own_name)
217
+ if qn_str and own_name and qn_str in self._explicit and \
218
+ qn_str.rsplit(".", 1)[-1] == own_name and \
219
+ type_name == "Identification":
220
+ # Adoption: the node carrying the Identification whose
221
+ # DEDUPED path equals the harvest key adopts the explicit
222
+ # id ('Car' → 'TR', 'Car.Engine' → 'EN'). Repeat-tail
223
+ # collapsing means Identification 'Car' arrives as
224
+ # 'Car.Car'/'Car.Car.Car' while 'Car' alone is the Package
225
+ # node — both collapse to the key, so gate on the node
226
+ # being an Identification (Package and PackageDeclaration
227
+ # keep derived ids — probe2j, Phase 2b build).
228
+ #
229
+ # Uniqueness is enforced on the ID VALUE, not per QN key:
230
+ # two different elements claiming the same explicit id
231
+ # ('P'→X and 'Q'→X) collide here (probe2l) — a hard export
232
+ # error, not a silent duplicate.
233
+ explicit = self._explicit[qn_str]
234
+ prior_owner = self._id_owner.get(explicit)
235
+ if prior_owner is None:
236
+ self._id_owner[explicit] = qn_str
237
+ return explicit
238
+ if prior_owner != qn_str:
239
+ raise ValueError(
240
+ f"Duplicate explicit @id claim: {explicit} declared "
241
+ f"by both '{prior_owner}' and '{qn_str}'")
242
+ return explicit
243
+ # prior_owner == qn_str: re-visit of the same element —
244
+ # fall through to derived id below (element ids stay unique
245
+ # in the graph).
246
+ else:
247
+ explicit = None
248
+ if explicit:
249
+ return explicit
194
250
  if own_name:
195
251
  qn = "|".join(qn_path + (own_name,))
196
252
  key = f"{qn}|{type_name}"
@@ -206,6 +262,70 @@ class _StableIdAssigner:
206
262
  return "sysml:" + str(_uuid.uuid5(STABLE_NAMESPACE, key))
207
263
 
208
264
 
265
+ def _dedupe_repeat_tail(qn_path: tuple, own_name: "str | None") -> str:
266
+ """Minimal declared-name path for explicit-id lookup.
267
+
268
+ The visitor dict nests wrappers (``PackageDeclaration``,
269
+ ``DefinitionDeclaration``, ``Identification``) that each repeat the
270
+ element's own declaredName, so the flattener delivers
271
+ ``('P','P','P')``-style paths. Dedupe *consecutive repeats* and
272
+ take the result — 'P.P.P' and 'P' both reduce to 'P', 'P.Engine'
273
+ stays 'P.Engine'. (Regular id derivation is untouched: it uses
274
+ ``qn_path`` + separators directly and never collides because the
275
+ hash keys include the structural path for unnamed nodes.)
276
+ """
277
+ seq = qn_path + ((own_name,) if own_name else ())
278
+ out: list = []
279
+ for seg in seq:
280
+ if seg and (not out or out[-1] != seg):
281
+ out.append(seg)
282
+ # collapse nested repeats of the SAME name chain ('P','P' ← level
283
+ # nesting) while keeping genuinely distinct segments
284
+ return ".".join(out)
285
+
286
+
287
+ _ID_IN_DOC = _re.compile(r"@id:\s*([^\s*/]+)")
288
+
289
+
290
+ def _harvest_doc_ids(model) -> "dict | None":
291
+ """Harvest explicit ids from ``doc /* @id: … */`` comments.
292
+
293
+ Walks the *public* element tree (``.doc`` is populated on every
294
+ element kind) and maps each element's declared qualified-name path
295
+ to the id claimed in its doc comment. Keys match the assigner's
296
+ identity paths (both are chains of declared names; the Model
297
+ root's per-parse uuid name is skipped). Returns ``None`` when no
298
+ element claims an id, so the flag stays inert on plain models.
299
+ """
300
+ found: dict = {}
301
+
302
+ def _walk(el, stack: tuple):
303
+ name = getattr(el, "doc_name", None)
304
+ if name is None:
305
+ name = getattr(el, "name", None)
306
+ if name is not None and not _MODEL_NAME_RE.match(str(name)):
307
+ stack = stack + (str(name),)
308
+ doc = getattr(el, "doc", None)
309
+ if doc:
310
+ m = _ID_IN_DOC.search(str(doc))
311
+ if m:
312
+ qn = " ".join(stack) if False else ".".join(stack)
313
+ found[qn] = m.group(1).strip()
314
+ elif str(doc).strip().startswith("@id:"):
315
+ m2 = _re.match(r"@id:\s*([^\s*/]+)", str(doc).strip())
316
+ if m2 and stack:
317
+ found[".".join(stack)] = m2.group(1).strip()
318
+ for child in getattr(el, "children", []):
319
+ _walk(child, stack)
320
+
321
+ _walk(model, ())
322
+ return found or None
323
+
324
+
325
+ _MODEL_NAME_RE = _re.compile(r"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}"
326
+ r"-[89ab][0-9a-f]{3}-[0-9a-f]{12}$")
327
+
328
+
209
329
  def _struct_text(struct_path: tuple) -> str:
210
330
  return ">".join(f"{key}:{i}" for key, i in struct_path)
211
331
 
@@ -359,7 +479,7 @@ def _extract_properties(source):
359
479
 
360
480
 
361
481
  def to_interchange(source, *, vocabulary=None, explicit_terms=False,
362
- stable_ids=False, reconcile_with=None):
482
+ stable_ids=False, reconcile_with=None, doc_ids=False):
363
483
  """Export a model to the SysML v2 JSON interchange representation.
364
484
 
365
485
  Parameters
@@ -400,6 +520,17 @@ def to_interchange(source, *, vocabulary=None, explicit_terms=False,
400
520
  doc = to_interchange(model, stable_ids=True)
401
521
  Path("model.json").write_text(interchange_to_json_text(doc))
402
522
 
523
+ doc_ids : bool
524
+ When true (implies ``stable_ids=True``), honor **explicit ids**
525
+ carried in the model's own text: a ``doc /* @id: <id> */``
526
+ comment on any element fixes that element's ``@id`` for its
527
+ declared qualified-name lifetime — derivation never overrides
528
+ it, and it survives *any* edit (ancestor renames, re-nesting,
529
+ moving between files) because it is written into the source.
530
+ Two elements claiming the same id raise ``ValueError``. This
531
+ is the source-carried identity mechanism (Phase 2b,
532
+ ``docs/stable-identities.md`` option C).
533
+
403
534
  Returns
404
535
  -------
405
536
  dict
@@ -438,7 +569,23 @@ def to_interchange(source, *, vocabulary=None, explicit_terms=False,
438
569
  )
439
570
 
440
571
  graph: list = []
441
- assigner = _StableIdAssigner() if (stable_ids or reconcile_with) else None
572
+ explicit = None
573
+ if doc_ids:
574
+ # Harvest explicit ids from the model's own doc comments. Needs
575
+ # the public element tree — a re-parsed Model (source was str /
576
+ # dump text) is walked the same as a passed-in Model.
577
+ model_obj = source if hasattr(source, "children") else None
578
+ if model_obj is None:
579
+ try:
580
+ model_obj = source # caller passed a Model-like object
581
+ except Exception:
582
+ model_obj = None
583
+ if model_obj is not None:
584
+ explicit = _harvest_doc_ids(model_obj)
585
+ if doc_ids and not (stable_ids or reconcile_with):
586
+ stable_ids = True # explicit ids ride the stable-id machinery
587
+ assigner = (_StableIdAssigner(explicit_ids=explicit)
588
+ if (stable_ids or reconcile_with) else None)
442
589
  root_id = _flatten(root_dict, "root", "ownedRelationship", 0, graph,
443
590
  assigner=assigner)
444
591
  context = dict(INTERCHANGE_CONTEXT)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes