sysmlpy 0.96.2__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 (178) hide show
  1. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/PKG-INFO +65 -1
  2. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/README.md +64 -0
  3. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/pyproject.toml +1 -1
  4. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/__init__.py +3 -1
  5. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/__main__.py +29 -1
  6. sysmlpy-0.96.4/src/sysmlpy/interchange.py +896 -0
  7. sysmlpy-0.96.2/src/sysmlpy/interchange.py +0 -467
  8. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/LICENSE +0 -0
  9. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/README.md +0 -0
  10. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  11. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  12. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  13. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  14. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  15. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  16. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  17. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  18. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  19. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  20. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  21. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr_parser.py +0 -0
  22. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/antlr_visitor.py +0 -0
  23. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/boxes_view.py +0 -0
  24. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/definition.py +0 -0
  25. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/dfa_cache.py +0 -0
  26. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/diff.py +0 -0
  27. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/evaluator.py +0 -0
  28. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/examples/attribute_values.py +0 -0
  29. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/examples/part_attributes.py +0 -0
  30. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  31. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/formatting.py +0 -0
  32. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  33. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  34. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  35. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  36. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  37. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  38. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  39. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  40. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  41. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  42. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  43. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  44. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  45. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  46. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  47. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  48. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/grammar/classes.py +0 -0
  49. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/ipython_magic.py +0 -0
  50. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLLexer.g4 +0 -0
  51. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLLexer.interp +0 -0
  52. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLLexer.py +0 -0
  53. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLLexer.tokens +0 -0
  54. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParser.g4 +0 -0
  55. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParser.interp +0 -0
  56. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParser.py +0 -0
  57. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParser.tokens +0 -0
  58. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/KerMLParserVisitor.py +0 -0
  59. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/README.md +0 -0
  60. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/__init__.py +0 -0
  61. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/kerml.py +0 -0
  62. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/kerml/kerml_visitor.py +0 -0
  63. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/LICENSE +0 -0
  64. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/README.md +0 -0
  65. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/__init__.py +0 -0
  66. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  67. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  68. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  69. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  70. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  71. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  72. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  73. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  74. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  75. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  76. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  77. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  78. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  79. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  80. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  81. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  82. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  83. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  84. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  85. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  86. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  87. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  88. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  89. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  90. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  91. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  92. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  93. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  94. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  95. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  96. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  97. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  98. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  99. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  100. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  101. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  102. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  103. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  104. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  105. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  106. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  107. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  108. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  109. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  110. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  111. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  112. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  113. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  114. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  115. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  116. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  117. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  118. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  119. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  120. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  121. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  122. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  123. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  124. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  125. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  126. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  127. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  128. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  129. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  130. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  131. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  132. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  133. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  134. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  135. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  136. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  137. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  138. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  139. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  140. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  141. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  142. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  143. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  144. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  145. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  146. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  147. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  148. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  149. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Items.sysml +0 -0
  150. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  151. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  152. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  153. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  154. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  155. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/States.sysml +0 -0
  156. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  157. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  158. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  159. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/library/systems/Views.sysml +0 -0
  160. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/lsp/__init__.py +0 -0
  161. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/lsp/__main__.py +0 -0
  162. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/lsp/protocol.py +0 -0
  163. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/lsp/server.py +0 -0
  164. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/lsp/stdio.py +0 -0
  165. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/mdtables.py +0 -0
  166. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/navigate.py +0 -0
  167. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/plantuml.py +0 -0
  168. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/project.py +0 -0
  169. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/repl.py +0 -0
  170. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/reqif_io.py +0 -0
  171. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/semantic.py +0 -0
  172. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/sim.py +0 -0
  173. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/spreadsheet.py +0 -0
  174. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/store.py +0 -0
  175. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/traceability.py +0 -0
  176. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/us_customary_units.txt +0 -0
  177. {sysmlpy-0.96.2 → sysmlpy-0.96.4}/src/sysmlpy/usage.py +0 -0
  178. {sysmlpy-0.96.2 → 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.2
3
+ Version: 0.96.4
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: Jon R. Fox (mycr0ft)
@@ -987,6 +987,70 @@ See [`docs/plantuml-examples/`](docs/plantuml-examples/) for all rendered exampl
987
987
  | 15 | Relationship Matrix (GridView) | Relationship Matrix |
988
988
  | 16 | Tabular View — Color | Tabular View (color) |
989
989
 
990
+ ## Element Identity: Stable Interchange IDs
991
+
992
+ Element `@id`s in interchange exports follow one of two schemes, and a
993
+ reconciliation mechanism that follows the model across edits:
994
+
995
+ **Default — position-derived (deterministic per source text).** Every
996
+ `@graph` element gets `uuid5` from its tree position (parent id + key +
997
+ index). Same source text ⇒ byte-identical JSON in any process.
998
+
999
+ ```python
1000
+ from sysmlpy import to_interchange
1001
+ document = to_interchange(model) # position-derived @ids
1002
+ ```
1003
+
1004
+ **`stable_ids=True` — content-addressed (L2 idempotency).** Named
1005
+ elements hash their declared qualified-name path + metaclass type;
1006
+ unnamed elements hash the nearest named anchor plus the structural path
1007
+ from it. Inserting or reordering unrelated elements elsewhere leaves
1008
+ untouched ids unchanged:
1009
+
1010
+ ```python
1011
+ document = to_interchange(model, stable_ids=True)
1012
+ ```
1013
+
1014
+ ```bash
1015
+ sysmlpy export model.sysml --stable-ids
1016
+ ```
1017
+
1018
+ **`reconcile_ids` — a registry sidecar (L3 identity).** Content ids
1019
+ still re-mint when an *ancestor is renamed* (the qualified-name path
1020
+ changes) or an element moves to a different parent. To follow a model
1021
+ across its lifetime, keep the previous export as a **registry file**
1022
+ and reconcile each new export against it: every element whose
1023
+ (declared name, type) matches exactly one registry entry adopts the
1024
+ registry's id. Matching is injective — ambiguous (duplicated) keys
1025
+ match nothing and keep derived ids, so the document stays unique.
1026
+
1027
+ ```python
1028
+ from pathlib import Path
1029
+ from sysmlpy import loads, to_interchange, interchange_to_json_text
1030
+
1031
+ registry_path = Path("model.json")
1032
+ document = (to_interchange(model, stable_ids=True)
1033
+ if not registry_path.exists() else
1034
+ to_interchange(model, reconcile_with=registry_path))
1035
+ registry_path.write_text(interchange_to_json_text(document))
1036
+ ```
1037
+
1038
+ Or as a one-liner on the CLI — the registry file is typically also the
1039
+ output file, making every export a fixed point after the first:
1040
+
1041
+ ```bash
1042
+ sysmlpy export model.sysml --reconcile-with model.json -o model.json
1043
+ ```
1044
+
1045
+ Round-trip guarantee: `from_interchange` on a reconciled document
1046
+ rebuilds the live model; re-exporting it *with the reconciled document
1047
+ as its registry* reproduces the identical `@graph`. Elements renamed
1048
+ so thoroughly that no name matches fall back to fresh derived ids
1049
+ (becoming new registry entries on the next write). See
1050
+ `docs/stable-identities.md` for the full analysis and
1051
+ `examples/element_identity.py` for a runnable walkthrough of all
1052
+ identity layers.
1053
+
990
1054
  ## ReqIF Interchange (Requirements Interchange Format)
991
1055
 
992
1056
  sysmlpy imports and exports **ReqIF 1.0** — the OMG requirements interchange
@@ -951,6 +951,70 @@ See [`docs/plantuml-examples/`](docs/plantuml-examples/) for all rendered exampl
951
951
  | 15 | Relationship Matrix (GridView) | Relationship Matrix |
952
952
  | 16 | Tabular View — Color | Tabular View (color) |
953
953
 
954
+ ## Element Identity: Stable Interchange IDs
955
+
956
+ Element `@id`s in interchange exports follow one of two schemes, and a
957
+ reconciliation mechanism that follows the model across edits:
958
+
959
+ **Default — position-derived (deterministic per source text).** Every
960
+ `@graph` element gets `uuid5` from its tree position (parent id + key +
961
+ index). Same source text ⇒ byte-identical JSON in any process.
962
+
963
+ ```python
964
+ from sysmlpy import to_interchange
965
+ document = to_interchange(model) # position-derived @ids
966
+ ```
967
+
968
+ **`stable_ids=True` — content-addressed (L2 idempotency).** Named
969
+ elements hash their declared qualified-name path + metaclass type;
970
+ unnamed elements hash the nearest named anchor plus the structural path
971
+ from it. Inserting or reordering unrelated elements elsewhere leaves
972
+ untouched ids unchanged:
973
+
974
+ ```python
975
+ document = to_interchange(model, stable_ids=True)
976
+ ```
977
+
978
+ ```bash
979
+ sysmlpy export model.sysml --stable-ids
980
+ ```
981
+
982
+ **`reconcile_ids` — a registry sidecar (L3 identity).** Content ids
983
+ still re-mint when an *ancestor is renamed* (the qualified-name path
984
+ changes) or an element moves to a different parent. To follow a model
985
+ across its lifetime, keep the previous export as a **registry file**
986
+ and reconcile each new export against it: every element whose
987
+ (declared name, type) matches exactly one registry entry adopts the
988
+ registry's id. Matching is injective — ambiguous (duplicated) keys
989
+ match nothing and keep derived ids, so the document stays unique.
990
+
991
+ ```python
992
+ from pathlib import Path
993
+ from sysmlpy import loads, to_interchange, interchange_to_json_text
994
+
995
+ registry_path = Path("model.json")
996
+ document = (to_interchange(model, stable_ids=True)
997
+ if not registry_path.exists() else
998
+ to_interchange(model, reconcile_with=registry_path))
999
+ registry_path.write_text(interchange_to_json_text(document))
1000
+ ```
1001
+
1002
+ Or as a one-liner on the CLI — the registry file is typically also the
1003
+ output file, making every export a fixed point after the first:
1004
+
1005
+ ```bash
1006
+ sysmlpy export model.sysml --reconcile-with model.json -o model.json
1007
+ ```
1008
+
1009
+ Round-trip guarantee: `from_interchange` on a reconciled document
1010
+ rebuilds the live model; re-exporting it *with the reconciled document
1011
+ as its registry* reproduces the identical `@graph`. Elements renamed
1012
+ so thoroughly that no name matches fall back to fresh derived ids
1013
+ (becoming new registry entries on the next write). See
1014
+ `docs/stable-identities.md` for the full analysis and
1015
+ `examples/element_identity.py` for a runnable walkthrough of all
1016
+ identity layers.
1017
+
954
1018
  ## ReqIF Interchange (Requirements Interchange Format)
955
1019
 
956
1020
  sysmlpy imports and exports **ReqIF 1.0** — the OMG requirements interchange
@@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api"
6
6
 
7
7
  [project]
8
8
  name = "sysmlpy"
9
- version = "0.96.2"
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"
@@ -20,6 +20,7 @@ __all__ = [
20
20
  "as_sequence_view", "as_case_view", "as_browser_view",
21
21
  "extract_traceability", "TraceabilityReport", "RequirementTrace",
22
22
  "to_interchange", "from_interchange", "interchange_to_json_text",
23
+ "reconcile_ids",
23
24
  "reqif_import", "reqif_import_model", "reqif_export",
24
25
  "evaluate_expression", "evaluate_calculation", "collect_values",
25
26
  "check_constraints", "ConstraintReport", "ConstraintResult",
@@ -35,7 +36,7 @@ __all__ = [
35
36
  "render_state_transition_view_svg", "boxes_view",
36
37
  ]
37
38
  __author__ = "Jon Fox"
38
- __version__ = "0.96.2"
39
+ __version__ = "0.96.4"
39
40
 
40
41
  from sysmlpy.usage import (
41
42
  Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
@@ -57,6 +58,7 @@ from sysmlpy.traceability import (
57
58
  )
58
59
  from sysmlpy.interchange import (
59
60
  to_interchange, from_interchange, interchange_to_json_text,
61
+ reconcile_ids,
60
62
  )
61
63
  from sysmlpy.reqif_io import (
62
64
  reqif_import, reqif_import_model, reqif_export,
@@ -393,8 +393,22 @@ def cmd_export(args) -> int:
393
393
  print(f"Parse error: {e}", file=sys.stderr)
394
394
  return 2
395
395
 
396
+ # --reconcile-with <registry>: adopt ids from the previous export
397
+ # (the registry file itself is typically the output path — ids stay
398
+ # stable from then on, even across edits that re-mint derived ids).
399
+ reconcile_with = None
400
+ if getattr(args, "reconcile_with", None):
401
+ reg_path = Path(args.reconcile_with)
402
+ if reg_path.exists():
403
+ reconcile_with = reg_path
404
+ else:
405
+ print(f"Registry file '{reg_path}' not found — minting fresh "
406
+ "stable ids (delete the flag or create the file to "
407
+ "reconcile).", file=sys.stderr)
408
+
396
409
  try:
397
- document = to_interchange(model)
410
+ document = to_interchange(model, stable_ids=args.stable_ids,
411
+ reconcile_with=reconcile_with)
398
412
  except Exception as e:
399
413
  print(f"Error: export failed on this model: {e}", file=sys.stderr)
400
414
  return 1
@@ -967,6 +981,20 @@ def build_parser() -> argparse.ArgumentParser:
967
981
  "--compact", action="store_true",
968
982
  help="Emit compact JSON (no indentation)",
969
983
  )
984
+ p_export.add_argument(
985
+ "--stable-ids", action="store_true",
986
+ help="Content-address element @ids (L2 idempotency): ids follow "
987
+ "declared qualified-name paths, so inserting/reordering "
988
+ "unrelated elements elsewhere leaves untouched ids unchanged",
989
+ )
990
+ p_export.add_argument(
991
+ "--reconcile-with", metavar="REGISTRY",
992
+ help="Adopt element @ids from a previous export document (implies "
993
+ "--stable-ids); ids of name-matched elements survive edits "
994
+ "(L3 identity): re-export repeatedly with "
995
+ "'--reconcile-with model.json -o model.json' to keep ids "
996
+ "stable across the model's lifetime",
997
+ )
970
998
  p_export.add_argument(
971
999
  "-l", "--library",
972
1000
  help="Path to SysML v2 library files to use for parsing",