sysmlpy 0.76.0__tar.gz → 0.78.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 (159) hide show
  1. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/PKG-INFO +85 -60
  2. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/README.md +82 -59
  3. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/pyproject.toml +3 -1
  4. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/__init__.py +6 -3
  5. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/formatting.py +17 -0
  6. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/store.py +210 -91
  7. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/usage.py +7 -4
  8. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/LICENSE +0 -0
  9. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/__main__.py +0 -0
  10. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/README.md +0 -0
  11. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  12. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  13. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  14. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  15. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  16. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  17. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  18. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  19. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  20. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  21. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  22. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr_parser.py +0 -0
  23. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/antlr_visitor.py +0 -0
  24. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/boxes_view.py +0 -0
  25. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/definition.py +0 -0
  26. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/diff.py +0 -0
  27. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/evaluator.py +0 -0
  28. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/examples/attribute_values.py +0 -0
  29. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/examples/part_attributes.py +0 -0
  30. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  31. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  32. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  33. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  34. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  35. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  36. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  37. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  38. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  39. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  40. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  41. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  42. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  43. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  44. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  45. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  46. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  47. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/grammar/classes.py +0 -0
  48. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/interchange.py +0 -0
  49. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/LICENSE +0 -0
  50. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/README.md +0 -0
  51. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/__init__.py +0 -0
  52. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  53. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  54. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  55. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  56. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  57. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  58. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  59. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  60. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  61. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  62. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  63. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  64. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  65. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  66. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  67. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  68. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  69. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  70. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  71. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  72. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  73. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  74. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  75. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  76. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  77. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  78. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  79. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  80. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  81. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  82. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  83. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  84. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  85. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  86. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  87. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  88. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  89. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  90. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  91. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  92. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  93. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  94. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  95. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  96. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  97. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  98. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  99. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  100. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  101. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  102. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  103. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  104. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  105. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  106. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  107. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  108. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  109. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  110. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  111. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  112. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  113. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  114. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  115. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  116. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  117. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  118. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  119. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  120. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  121. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  122. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  123. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  124. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  125. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  126. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  127. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  128. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  129. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  130. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  131. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  132. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  133. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  134. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  135. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
  136. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  137. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  138. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  139. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  140. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  141. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/States.sysml +0 -0
  142. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  143. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  144. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  145. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
  146. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/lsp/__init__.py +0 -0
  147. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/lsp/__main__.py +0 -0
  148. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/lsp/protocol.py +0 -0
  149. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/lsp/server.py +0 -0
  150. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/lsp/stdio.py +0 -0
  151. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/navigate.py +0 -0
  152. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/plantuml.py +0 -0
  153. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/project.py +0 -0
  154. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/semantic.py +0 -0
  155. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/sim.py +0 -0
  156. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/spreadsheet.py +0 -0
  157. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/traceability.py +0 -0
  158. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/us_customary_units.txt +0 -0
  159. {sysmlpy-0.76.0 → sysmlpy-0.78.0}/src/sysmlpy/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysmlpy
3
- Version: 0.76.0
3
+ Version: 0.78.0
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: Jon R. Fox (mycr0ft)
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Classifier: Programming Language :: Python :: 3.14
16
+ Provides-Extra: cayley
16
17
  Provides-Extra: graph
17
18
  Provides-Extra: kuzu
18
19
  Provides-Extra: sim
@@ -24,6 +25,7 @@ Requires-Dist: networkx (>=3.0) ; extra == "graph"
24
25
  Requires-Dist: openpyxl (>=3.1) ; extra == "xlsx"
25
26
  Requires-Dist: pint (>=0.24)
26
27
  Requires-Dist: pyyaml (>=6.0)
28
+ Requires-Dist: requests (>=2.31) ; extra == "cayley"
27
29
  Requires-Dist: transitions (>=0.9,<0.10) ; extra == "sim"
28
30
  Description-Content-Type: text/markdown
29
31
 
@@ -43,23 +45,19 @@ and dropped the textX parser in favor of [an ANTLR4 parser grammar](https://gith
43
45
  changed our unit library to pint.
44
46
  The project had diverged so much from sysml2py that a new name, sysmlpy, was selected.
45
47
 
46
- > **⚠️ Constraints are changing.** As of v0.55.0, `analyze()` performs
47
- > full expression validation: identifiers are **resolved against the
48
- > symbol table** (v0.54.0) and operators are **type- and
49
- > unit-checked** — `flag and n`, `"a" + 5`, and `[m] + [kg]` all raise
50
- > `OPERAND_TYPE_MISMATCH` / `UNIT_DIMENSION_MISMATCH` errors. Deterministic
51
- > literal expressions can be reduced with `const_fold()` (v0.55.0).
52
- > v0.56.0 adds two-stage SLL→LL parsing (38% faster on large models)
53
- > and graph query extensions (`all_paths`, `impact_analysis`,
54
- > `execute_cypher`, …). Track progress in
55
- > [docs/DEVELOPMENT_PLAN.md](docs/DEVELOPMENT_PLAN.md).
56
-
57
- > **Scope reminder** — a green parse result means the file **parsed
58
- > syntactically**. Expression validation (name resolution, type and
59
- > unit checks) runs only when you call `analyze(model)` explicitly.
60
- > Multiplication/division dimension *derivation* (inferring
61
- > `[N]` from `[kg] * [m/s^2]`) is not yet implemented. See
62
- > [STATUS.md §Known Issues](STATUS.md#known-issues).
48
+ **What you get**: full SysML v2 parsing (ANTLR4, 123/123 OMG XPect
49
+ conformance), round-trip `dump()`, a semantic analyzer with 31 rule
50
+ codes (name resolution, type/unit-checked expressions, OCL
51
+ well-formedness), 17 PlantUML views + Java-free boxes rendering,
52
+ state-machine simulation, Excel export, a `sysmlpy diff` semantic
53
+ model differ, and graph storage backends (memory / NetworkX / Kùzu /
54
+ Cayley).
55
+
56
+ > **Scope note** — a green parse result means the file **parsed
57
+ > syntactically**. Expression validation (name resolution, type,
58
+ > unit, and dimension checks) runs when you call `analyze(model)`.
59
+ > Expression validation also derives dimensions through `*` and `/`
60
+ > (`[N]` inferred from `[kg] * [m/s^2]`, v0.75.0).
63
61
 
64
62
  For release history, see [CHANGELOG.md](CHANGELOG.md).
65
63
 
@@ -86,6 +84,50 @@ Multiple installation methods are supported by sysmlpy, including:
86
84
  | ![PyPI logo](https://simpleicons.org/icons/pypi.svg) | PyPI | ``python -m pip install sysmlpy[cayley]`` (with Cayley graph DB) |
87
85
  | ![GitHub logo](https://simpleicons.org/icons/github.svg) | GitHub | ``python -m pip install https://github.com/mycr0ft/sysmlpy/archive/refs/heads/main.zip`` |
88
86
 
87
+ ## Command-Line Tools
88
+
89
+ sysmlpy ships a CLI (`sysmlpy`, plus `sysmlpy-lsp` for editor support).
90
+ Exit codes: `0` = success/clean, `1` = findings at/above the failure
91
+ threshold or operational error, `2` = parse/load failure — so
92
+ `analyze` and `diff` drop straight into CI pipelines.
93
+
94
+ | Command | Purpose |
95
+ |---------|---------|
96
+ | `sysmlpy parse <file>` | Parse a file and print a representation |
97
+ | `sysmlpy analyze <file...>` | Semantic analysis; CI-friendly exit codes |
98
+ | `sysmlpy diff <old> <new>` | Semantic model diff (text/markdown/json) |
99
+ | `sysmlpy view <file>` | Render a PlantUML / Markdown / HTML view |
100
+ | `sysmlpy format <file...>` | Pretty-print (canonicalize) SysML files (alias `fmt`) |
101
+ | `sysmlpy trace <file>` | Requirement traceability & verification coverage |
102
+ | `sysmlpy export <file>` | Export to the JSON interchange format |
103
+ | `sysmlpy import <file>` | Import a JSON interchange document as SysML text |
104
+ | `sysmlpy eval <file>` | Evaluate expressions, attribute values, constraints |
105
+ | `sysmlpy sim <file>` | Simulate a state machine (guards evaluated for real) |
106
+ | `sysmlpy xlsx <file>` | Export tabular views to an Excel workbook |
107
+ | `sysmlpy-lsp` | Language server (stdio) for SysML v2 editors |
108
+
109
+ Examples:
110
+
111
+ ```bash
112
+ # CI gate: fail the build when analysis finds errors (threshold via --fail-on)
113
+ sysmlpy analyze model.sysml
114
+
115
+ # What changed between two revisions?
116
+ sysmlpy diff old.sysml new.sysml --format markdown > changes.md
117
+
118
+ # Canonicalize a model in place, and render a BDD-style view
119
+ sysmlpy format model.sysml
120
+ sysmlpy view model.sysml --view sv > model.puml
121
+
122
+ # Drive a state machine interactively
123
+ sysmlpy sim traffic_light.sysml
124
+
125
+ # Excel workbook of the tabular views
126
+ sysmlpy xlsx bill_of_materials.sysml -o bom.xlsx
127
+ ```
128
+
129
+ Every subcommand accepts `--help` for its own flags.
130
+
89
131
  ## Documentation
90
132
 
91
133
  Documentation can be found [here.](https://mycr0ft.github.io/sysmlpy/)
@@ -128,36 +170,8 @@ for child in sensor:
128
170
  "camera" in sensor # → True
129
171
  ```
130
172
 
131
- It will output the following:
132
- ```
133
- part <'3.1'> Stage_1 {
134
- attribute mass= 100 [kilogram];
135
- attribute thrust= 1199.0 [newton];
136
- }
137
- ```
138
-
139
- The package is able to handle Items, Parts, and Attributes.
140
-
141
- ```python
142
- a = Part(name='camera')
143
- b = Item(name='lens')
144
- d = Attribute(name='mass')
145
- c = Part(name='sensor')
146
- c.add_child(a)
147
- c.add_child(b)
148
- a.add_child(d)
149
- print(c.dump())
150
- ```
151
-
152
- will return:
153
- ```
154
- part sensor {
155
- part camera {
156
- attribute mass;
157
- }
158
- item lens;
159
- }
160
- ```
173
+ `print(sensor.dump())` renders the SysML text shown above:
174
+ `part sensor { part camera { attribute mass= 100[kilogram]; } item lens; }`.
161
175
 
162
176
  Actions
163
177
  -------
@@ -266,10 +280,11 @@ len(model) # → number of direct children
266
280
  print(str(model))
267
281
  # → package Vehicle { ... }
268
282
 
269
- # Typed property accessors
270
- model.packages # direct Package children
271
- model.parts # direct Part children
272
- model.actions # direct Action children
283
+ # Typed property accessors (available on packages and usage elements;
284
+ # a Model root exposes .packages, package nodes expose .parts, etc.)
285
+ model.packages # direct Package children of the model root
286
+ pkg = model.find_one("Vehicle")
287
+ pkg.parts # direct Part children (definitions and usages)
273
288
  ```
274
289
 
275
290
  All search methods accept `sysml_type=` (keyword string or class) and `recursive=`:
@@ -339,9 +354,9 @@ model = loads("""
339
354
  part def Engine;
340
355
  }
341
356
  package Vehicle {
342
- import Types::*;
343
- part myCar : Engine; # resolved via import
344
- part myWheel : Wheel; # undefined!
357
+ private import Types::*;
358
+ part myCar : Engine; // resolved via import
359
+ part myWheel : Wheel; // undefined!
345
360
  }
346
361
  """)
347
362
 
@@ -395,6 +410,11 @@ The analyzer resolves three import patterns with visibility enforcement:
395
410
 
396
411
  ### OCL Well-Formedness Checks
397
412
 
413
+ The analyzer implements **31 rule codes** in total (severity-tagged
414
+ `error`/`warning`), spanning OCL well-formedness, state machines,
415
+ requirements, traceability, connectors, and unit-dimension checks —
416
+ see [STATUS.md](STATUS.md) for the complete catalogue. Highlights:
417
+
398
418
  | Code | Rule | Description |
399
419
  |------|------|-------------|
400
420
  | `DUPLICATE_NAME` | Namespace.duplicate_names | No two members may share the same name in a scope |
@@ -521,16 +541,21 @@ centrality = store.centrality()
521
541
  store.export_graphml("model.graphml")
522
542
  ```
523
543
 
524
- **Running Cayley with Docker:**
544
+ **Running Cayley with Podman or Docker:**
525
545
 
526
546
  ```bash
527
- # In-memory backend
528
- docker run -p 64210:64210 --rm cayley/cayley
547
+ # Simplest (tested): persistent BoltDB inside the container
548
+ podman run -d --name cayley -p 64210:64210 docker.io/cayleygraph/cayley
529
549
 
530
- # Persistent BoltDB backend
531
- docker run -p 64210:64210 -v /data:/data --rm cayley/cayley -db boltdb -dbpath /data/cayley.db
550
+ # Docker equivalents
551
+ docker run -p 64210:64210 --rm cayley/cayley # in-memory backend
552
+ docker run -p 64210:64210 -v /data:/data --rm cayley/cayley \
553
+ -db boltdb -dbpath /data/cayley.db # persistent
532
554
  ```
533
555
 
556
+ Stored subjects are label-namespaced (`<label>:<element_id>`), so
557
+ several stores can share one server without query bleed.
558
+
534
559
  **Quad Model:** Elements are stored as quads where the subject is the element UUID, predicates are property names (e.g., `name`, `sysml_type`), and objects are property values. Relationships are stored as quads where the predicate is the relationship type (e.g., `parent_child`, `typed_by`). Labels provide namespace isolation for multi-tenant scenarios.
535
560
 
536
561
  ## PlantUML Visualizations
@@ -14,23 +14,19 @@ and dropped the textX parser in favor of [an ANTLR4 parser grammar](https://gith
14
14
  changed our unit library to pint.
15
15
  The project had diverged so much from sysml2py that a new name, sysmlpy, was selected.
16
16
 
17
- > **⚠️ Constraints are changing.** As of v0.55.0, `analyze()` performs
18
- > full expression validation: identifiers are **resolved against the
19
- > symbol table** (v0.54.0) and operators are **type- and
20
- > unit-checked** — `flag and n`, `"a" + 5`, and `[m] + [kg]` all raise
21
- > `OPERAND_TYPE_MISMATCH` / `UNIT_DIMENSION_MISMATCH` errors. Deterministic
22
- > literal expressions can be reduced with `const_fold()` (v0.55.0).
23
- > v0.56.0 adds two-stage SLL→LL parsing (38% faster on large models)
24
- > and graph query extensions (`all_paths`, `impact_analysis`,
25
- > `execute_cypher`, …). Track progress in
26
- > [docs/DEVELOPMENT_PLAN.md](docs/DEVELOPMENT_PLAN.md).
27
-
28
- > **Scope reminder** — a green parse result means the file **parsed
29
- > syntactically**. Expression validation (name resolution, type and
30
- > unit checks) runs only when you call `analyze(model)` explicitly.
31
- > Multiplication/division dimension *derivation* (inferring
32
- > `[N]` from `[kg] * [m/s^2]`) is not yet implemented. See
33
- > [STATUS.md §Known Issues](STATUS.md#known-issues).
17
+ **What you get**: full SysML v2 parsing (ANTLR4, 123/123 OMG XPect
18
+ conformance), round-trip `dump()`, a semantic analyzer with 31 rule
19
+ codes (name resolution, type/unit-checked expressions, OCL
20
+ well-formedness), 17 PlantUML views + Java-free boxes rendering,
21
+ state-machine simulation, Excel export, a `sysmlpy diff` semantic
22
+ model differ, and graph storage backends (memory / NetworkX / Kùzu /
23
+ Cayley).
24
+
25
+ > **Scope note** — a green parse result means the file **parsed
26
+ > syntactically**. Expression validation (name resolution, type,
27
+ > unit, and dimension checks) runs when you call `analyze(model)`.
28
+ > Expression validation also derives dimensions through `*` and `/`
29
+ > (`[N]` inferred from `[kg] * [m/s^2]`, v0.75.0).
34
30
 
35
31
  For release history, see [CHANGELOG.md](CHANGELOG.md).
36
32
 
@@ -57,6 +53,50 @@ Multiple installation methods are supported by sysmlpy, including:
57
53
  | ![PyPI logo](https://simpleicons.org/icons/pypi.svg) | PyPI | ``python -m pip install sysmlpy[cayley]`` (with Cayley graph DB) |
58
54
  | ![GitHub logo](https://simpleicons.org/icons/github.svg) | GitHub | ``python -m pip install https://github.com/mycr0ft/sysmlpy/archive/refs/heads/main.zip`` |
59
55
 
56
+ ## Command-Line Tools
57
+
58
+ sysmlpy ships a CLI (`sysmlpy`, plus `sysmlpy-lsp` for editor support).
59
+ Exit codes: `0` = success/clean, `1` = findings at/above the failure
60
+ threshold or operational error, `2` = parse/load failure — so
61
+ `analyze` and `diff` drop straight into CI pipelines.
62
+
63
+ | Command | Purpose |
64
+ |---------|---------|
65
+ | `sysmlpy parse <file>` | Parse a file and print a representation |
66
+ | `sysmlpy analyze <file...>` | Semantic analysis; CI-friendly exit codes |
67
+ | `sysmlpy diff <old> <new>` | Semantic model diff (text/markdown/json) |
68
+ | `sysmlpy view <file>` | Render a PlantUML / Markdown / HTML view |
69
+ | `sysmlpy format <file...>` | Pretty-print (canonicalize) SysML files (alias `fmt`) |
70
+ | `sysmlpy trace <file>` | Requirement traceability & verification coverage |
71
+ | `sysmlpy export <file>` | Export to the JSON interchange format |
72
+ | `sysmlpy import <file>` | Import a JSON interchange document as SysML text |
73
+ | `sysmlpy eval <file>` | Evaluate expressions, attribute values, constraints |
74
+ | `sysmlpy sim <file>` | Simulate a state machine (guards evaluated for real) |
75
+ | `sysmlpy xlsx <file>` | Export tabular views to an Excel workbook |
76
+ | `sysmlpy-lsp` | Language server (stdio) for SysML v2 editors |
77
+
78
+ Examples:
79
+
80
+ ```bash
81
+ # CI gate: fail the build when analysis finds errors (threshold via --fail-on)
82
+ sysmlpy analyze model.sysml
83
+
84
+ # What changed between two revisions?
85
+ sysmlpy diff old.sysml new.sysml --format markdown > changes.md
86
+
87
+ # Canonicalize a model in place, and render a BDD-style view
88
+ sysmlpy format model.sysml
89
+ sysmlpy view model.sysml --view sv > model.puml
90
+
91
+ # Drive a state machine interactively
92
+ sysmlpy sim traffic_light.sysml
93
+
94
+ # Excel workbook of the tabular views
95
+ sysmlpy xlsx bill_of_materials.sysml -o bom.xlsx
96
+ ```
97
+
98
+ Every subcommand accepts `--help` for its own flags.
99
+
60
100
  ## Documentation
61
101
 
62
102
  Documentation can be found [here.](https://mycr0ft.github.io/sysmlpy/)
@@ -99,36 +139,8 @@ for child in sensor:
99
139
  "camera" in sensor # → True
100
140
  ```
101
141
 
102
- It will output the following:
103
- ```
104
- part <'3.1'> Stage_1 {
105
- attribute mass= 100 [kilogram];
106
- attribute thrust= 1199.0 [newton];
107
- }
108
- ```
109
-
110
- The package is able to handle Items, Parts, and Attributes.
111
-
112
- ```python
113
- a = Part(name='camera')
114
- b = Item(name='lens')
115
- d = Attribute(name='mass')
116
- c = Part(name='sensor')
117
- c.add_child(a)
118
- c.add_child(b)
119
- a.add_child(d)
120
- print(c.dump())
121
- ```
122
-
123
- will return:
124
- ```
125
- part sensor {
126
- part camera {
127
- attribute mass;
128
- }
129
- item lens;
130
- }
131
- ```
142
+ `print(sensor.dump())` renders the SysML text shown above:
143
+ `part sensor { part camera { attribute mass= 100[kilogram]; } item lens; }`.
132
144
 
133
145
  Actions
134
146
  -------
@@ -237,10 +249,11 @@ len(model) # → number of direct children
237
249
  print(str(model))
238
250
  # → package Vehicle { ... }
239
251
 
240
- # Typed property accessors
241
- model.packages # direct Package children
242
- model.parts # direct Part children
243
- model.actions # direct Action children
252
+ # Typed property accessors (available on packages and usage elements;
253
+ # a Model root exposes .packages, package nodes expose .parts, etc.)
254
+ model.packages # direct Package children of the model root
255
+ pkg = model.find_one("Vehicle")
256
+ pkg.parts # direct Part children (definitions and usages)
244
257
  ```
245
258
 
246
259
  All search methods accept `sysml_type=` (keyword string or class) and `recursive=`:
@@ -310,9 +323,9 @@ model = loads("""
310
323
  part def Engine;
311
324
  }
312
325
  package Vehicle {
313
- import Types::*;
314
- part myCar : Engine; # resolved via import
315
- part myWheel : Wheel; # undefined!
326
+ private import Types::*;
327
+ part myCar : Engine; // resolved via import
328
+ part myWheel : Wheel; // undefined!
316
329
  }
317
330
  """)
318
331
 
@@ -366,6 +379,11 @@ The analyzer resolves three import patterns with visibility enforcement:
366
379
 
367
380
  ### OCL Well-Formedness Checks
368
381
 
382
+ The analyzer implements **31 rule codes** in total (severity-tagged
383
+ `error`/`warning`), spanning OCL well-formedness, state machines,
384
+ requirements, traceability, connectors, and unit-dimension checks —
385
+ see [STATUS.md](STATUS.md) for the complete catalogue. Highlights:
386
+
369
387
  | Code | Rule | Description |
370
388
  |------|------|-------------|
371
389
  | `DUPLICATE_NAME` | Namespace.duplicate_names | No two members may share the same name in a scope |
@@ -492,16 +510,21 @@ centrality = store.centrality()
492
510
  store.export_graphml("model.graphml")
493
511
  ```
494
512
 
495
- **Running Cayley with Docker:**
513
+ **Running Cayley with Podman or Docker:**
496
514
 
497
515
  ```bash
498
- # In-memory backend
499
- docker run -p 64210:64210 --rm cayley/cayley
516
+ # Simplest (tested): persistent BoltDB inside the container
517
+ podman run -d --name cayley -p 64210:64210 docker.io/cayleygraph/cayley
500
518
 
501
- # Persistent BoltDB backend
502
- docker run -p 64210:64210 -v /data:/data --rm cayley/cayley -db boltdb -dbpath /data/cayley.db
519
+ # Docker equivalents
520
+ docker run -p 64210:64210 --rm cayley/cayley # in-memory backend
521
+ docker run -p 64210:64210 -v /data:/data --rm cayley/cayley \
522
+ -db boltdb -dbpath /data/cayley.db # persistent
503
523
  ```
504
524
 
525
+ Stored subjects are label-namespaced (`<label>:<element_id>`), so
526
+ several stores can share one server without query bleed.
527
+
505
528
  **Quad Model:** Elements are stored as quads where the subject is the element UUID, predicates are property names (e.g., `name`, `sysml_type`), and objects are property values. Relationships are stored as quads where the predicate is the relationship type (e.g., `parent_child`, `typed_by`). Labels provide namespace isolation for multi-tenant scenarios.
506
529
 
507
530
  ## PlantUML Visualizations
@@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api"
6
6
 
7
7
  [project]
8
8
  name = "sysmlpy"
9
- version = "0.76.0"
9
+ version = "0.78.0"
10
10
  description = ""
11
11
  authors = [{ name = "Jon R. Fox (mycr0ft)", email = "jon.fox@drfox.com" }]
12
12
  readme = "README.md"
@@ -22,12 +22,14 @@ kuzu = { version = ">=0.7,<0.12", optional = true }
22
22
  openpyxl = { version = ">=3.1", optional = true }
23
23
  arrow = "^1.4.0"
24
24
  transitions = {version = "^0.9", optional = true}
25
+ requests = { version = ">=2.31", optional = true }
25
26
 
26
27
  [tool.poetry.extras]
27
28
  graph = ["networkx"]
28
29
  kuzu = ["kuzu"]
29
30
  xlsx = ["openpyxl"]
30
31
  sim = ["transitions"]
32
+ cayley = ["requests"]
31
33
 
32
34
  [tool.poetry.scripts]
33
35
  sysmlpy = "sysmlpy.__main__:main"
@@ -34,7 +34,7 @@ __all__ = [
34
34
  "render_state_transition_view_svg", "boxes_view",
35
35
  ]
36
36
  __author__ = "Jon Fox"
37
- __version__ = "0.76.0"
37
+ __version__ = "0.78.0"
38
38
 
39
39
  from sysmlpy.usage import (
40
40
  Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
@@ -243,8 +243,11 @@ def load_partial(text):
243
243
  partial, errors = _parse_with_recovery(source)
244
244
  if errors:
245
245
  raise PartialParseError(errors, partial, source)
246
- from sysmlpy.formatting import classtree
247
- return classtree(partial)
246
+ # Success path returns a real Model (matching the docstring and
247
+ # load()); before v0.78.0 this returned a RootNamespace grammar
248
+ # object by mistake.
249
+ from sysmlpy.definition import Model
250
+ return Model()._load_definition(partial["ownedRelationship"])
248
251
 
249
252
 
250
253
  def load(fp) -> Model:
@@ -44,4 +44,21 @@ def reformat(model):
44
44
 
45
45
 
46
46
  def classtree(model):
47
+ """Convert a model into a dumpable RootNamespace tree.
48
+
49
+ Accepts:
50
+ - a visitor grammar dict (historical input shape, e.g. from
51
+ ``load_grammar(text)``),
52
+ - a public-API ``Model`` from ``loads(text)`` — its ``.grammar``
53
+ is already a ``RootNamespace`` and is returned directly.
54
+
55
+ ``tree.dump()`` then renders SysML text. Passing a ``Model``
56
+ used to raise ``TypeError``; the README/TUTORIAL documented the
57
+ Model form, so it is now supported (v0.78.0).
58
+ """
59
+ if isinstance(model, dict):
60
+ return RootNamespace(model)
61
+ grammar = getattr(model, "grammar", None)
62
+ if grammar is not None and grammar.__class__.__name__ == "RootNamespace":
63
+ return grammar
47
64
  return RootNamespace(model)