sysmlpy 0.96.3__tar.gz → 0.97.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 (178) hide show
  1. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/PKG-INFO +58 -1
  2. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/README.md +56 -0
  3. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/pyproject.toml +3 -1
  4. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/__init__.py +3 -3
  5. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/__main__.py +61 -1
  6. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr_visitor.py +30 -2
  7. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/boxes_view.py +329 -51
  8. sysmlpy-0.97.0/src/sysmlpy/ci_check.py +315 -0
  9. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/dfa_cache.py +22 -5
  10. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/interchange.py +220 -6
  11. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/LICENSE +0 -0
  12. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/README.md +0 -0
  13. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  14. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  15. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  16. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  17. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  18. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  19. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  20. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  21. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  22. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  23. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  24. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/antlr_parser.py +0 -0
  25. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/definition.py +0 -0
  26. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/diff.py +0 -0
  27. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/evaluator.py +0 -0
  28. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/examples/attribute_values.py +0 -0
  29. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/examples/part_attributes.py +0 -0
  30. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  31. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/formatting.py +0 -0
  32. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  33. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  34. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  35. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  36. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  37. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  38. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  39. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  40. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  41. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  42. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  43. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  44. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  45. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  46. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  47. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  48. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/grammar/classes.py +0 -0
  49. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/ipython_magic.py +0 -0
  50. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLLexer.g4 +0 -0
  51. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLLexer.interp +0 -0
  52. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLLexer.py +0 -0
  53. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLLexer.tokens +0 -0
  54. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLParser.g4 +0 -0
  55. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLParser.interp +0 -0
  56. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLParser.py +0 -0
  57. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLParser.tokens +0 -0
  58. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/KerMLParserVisitor.py +0 -0
  59. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/README.md +0 -0
  60. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/__init__.py +0 -0
  61. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/kerml.py +0 -0
  62. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/kerml/kerml_visitor.py +0 -0
  63. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/LICENSE +0 -0
  64. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/README.md +0 -0
  65. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/__init__.py +0 -0
  66. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  67. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  68. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  69. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  70. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  71. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  72. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  73. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  74. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  75. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  76. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  77. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  78. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  79. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  80. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  81. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  82. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  83. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  84. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  85. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  86. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  87. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  88. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  89. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  90. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  91. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  92. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  93. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  94. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  95. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  96. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  97. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  98. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  99. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  100. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  101. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  102. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  103. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  104. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  105. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  106. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  107. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  108. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  109. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  110. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  111. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  112. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  113. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  114. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  115. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  116. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  117. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  118. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  119. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  120. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  121. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  122. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  123. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  124. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  125. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  126. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  127. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  128. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  129. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  130. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  131. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  132. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  133. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  134. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  135. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  136. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  137. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  138. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  139. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  140. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  141. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  142. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  143. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  144. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  145. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  146. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  147. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  148. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  149. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
  150. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  151. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  152. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  153. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  154. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  155. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/States.sysml +0 -0
  156. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  157. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  158. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  159. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
  160. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/lsp/__init__.py +0 -0
  161. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/lsp/__main__.py +0 -0
  162. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/lsp/protocol.py +0 -0
  163. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/lsp/server.py +0 -0
  164. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/lsp/stdio.py +0 -0
  165. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/mdtables.py +0 -0
  166. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/navigate.py +0 -0
  167. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/plantuml.py +0 -0
  168. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/project.py +0 -0
  169. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/repl.py +0 -0
  170. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/reqif_io.py +0 -0
  171. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/semantic.py +0 -0
  172. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/sim.py +0 -0
  173. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/spreadsheet.py +0 -0
  174. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/store.py +0 -0
  175. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/traceability.py +0 -0
  176. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/us_customary_units.txt +0 -0
  177. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/src/sysmlpy/usage.py +0 -0
  178. {sysmlpy-0.96.3 → sysmlpy-0.97.0}/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.97.0
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: Jon R. Fox (mycr0ft)
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Classifier: Programming Language :: Python :: 3.14
16
16
  Classifier: Programming Language :: Python :: 3.15
17
+ Provides-Extra: boxes
17
18
  Provides-Extra: cayley
18
19
  Provides-Extra: graph
19
20
  Provides-Extra: jupyter
@@ -182,6 +183,7 @@ threshold or operational error, `2` = parse/load failure — so
182
183
  |---------|---------|
183
184
  | `sysmlpy parse <file>` | Parse a file and print a representation |
184
185
  | `sysmlpy analyze <file...>` | Semantic analysis; CI-friendly exit codes |
186
+ | `sysmlpy ci <paths...>` | CI check: parse gate (blocking) + semantics (advisory/strict) — shared engine of the GitHub Action, GitLab template, pre-commit hooks |
185
187
  | `sysmlpy diff <old> <new>` | Semantic model diff (text/markdown/json) |
186
188
  | `sysmlpy view <file>` | Render a PlantUML / Markdown / HTML view |
187
189
  | `sysmlpy format <file...>` | Pretty-print (canonicalize) SysML files (alias `fmt`) |
@@ -223,10 +225,65 @@ sysml> %quit
223
225
 
224
226
  # Excel workbook of the tabular views
225
227
  sysmlpy xlsx bill_of_materials.sysml -o bom.xlsx
228
+
229
+ # CI: check every model in a tree — parse failures block, semantics advisory
230
+ sysmlpy ci models
226
231
  ```
227
232
 
228
233
  Every subcommand accepts `--help` for its own flags.
229
234
 
235
+ ## CI Integration (GitHub Actions, GitLab, pre-commit)
236
+
237
+ `sysmlpy ci` is the one engine behind all the CI integrations — parse
238
+ failures always block; semantic findings are **advisory** by default
239
+ (known analyzer limitations on units-heavy models — see
240
+ `docs/ci-integration.md`), and `--semantic strict` promotes semantics to
241
+ blocking once your codebase is analyzer-clean.
242
+
243
+ **GitHub Actions** — this repo ships a reusable workflow; in your repo:
244
+
245
+ ```yaml
246
+ jobs:
247
+ sysml-check:
248
+ uses: mycr0ft/sysmlpy/.github/workflows/sysml-check.yml@v0.96.4
249
+ with:
250
+ paths: models
251
+ semantic: advisory # off | advisory | strict
252
+ ```
253
+
254
+ This repo's own pushes/PRs dogfood the same workflow
255
+ (`sysml-dogfood.yml` calling it with `install: source`) over the
256
+ bundled standard library and the showcase fixtures — the gate that
257
+ found the two real visitor crashes on named multiplicity bounds
258
+ (`[nCauses]`, `[wallNumber]`) in the bundled library.
259
+
260
+ **GitLab CI** — include the template from this repo:
261
+
262
+ ```yaml
263
+ include:
264
+ - project: mycr0ft/sysmlpy
265
+ ref: v0.96.4
266
+ file: .gitlab/sysml-check.gitlab-ci.yml
267
+
268
+ sysml-check:
269
+ extends: .sysml-check
270
+ variables:
271
+ SYSML_PATHS: "models src"
272
+ ```
273
+
274
+ **pre-commit** — check at commit time:
275
+
276
+ ```yaml
277
+ repos:
278
+ - repo: https://github.com/mycr0ft/sysmlpy
279
+ rev: v0.96.4
280
+ hooks:
281
+ - id: sysmlpy-ci # parse gate + advisory semantics
282
+ ```
283
+
284
+ Full options (excludes, library path, version pinning, DFA cache for
285
+ faster re-runs, and the promote-to-strict path): `docs/ci-integration.md`.
286
+
230
287
  ## Documentation
231
288
 
232
289
  Documentation can be found [here.](https://mycr0ft.github.io/sysmlpy/)
@@ -146,6 +146,7 @@ threshold or operational error, `2` = parse/load failure — so
146
146
  |---------|---------|
147
147
  | `sysmlpy parse <file>` | Parse a file and print a representation |
148
148
  | `sysmlpy analyze <file...>` | Semantic analysis; CI-friendly exit codes |
149
+ | `sysmlpy ci <paths...>` | CI check: parse gate (blocking) + semantics (advisory/strict) — shared engine of the GitHub Action, GitLab template, pre-commit hooks |
149
150
  | `sysmlpy diff <old> <new>` | Semantic model diff (text/markdown/json) |
150
151
  | `sysmlpy view <file>` | Render a PlantUML / Markdown / HTML view |
151
152
  | `sysmlpy format <file...>` | Pretty-print (canonicalize) SysML files (alias `fmt`) |
@@ -187,10 +188,65 @@ sysml> %quit
187
188
 
188
189
  # Excel workbook of the tabular views
189
190
  sysmlpy xlsx bill_of_materials.sysml -o bom.xlsx
191
+
192
+ # CI: check every model in a tree — parse failures block, semantics advisory
193
+ sysmlpy ci models
190
194
  ```
191
195
 
192
196
  Every subcommand accepts `--help` for its own flags.
193
197
 
198
+ ## CI Integration (GitHub Actions, GitLab, pre-commit)
199
+
200
+ `sysmlpy ci` is the one engine behind all the CI integrations — parse
201
+ failures always block; semantic findings are **advisory** by default
202
+ (known analyzer limitations on units-heavy models — see
203
+ `docs/ci-integration.md`), and `--semantic strict` promotes semantics to
204
+ blocking once your codebase is analyzer-clean.
205
+
206
+ **GitHub Actions** — this repo ships a reusable workflow; in your repo:
207
+
208
+ ```yaml
209
+ jobs:
210
+ sysml-check:
211
+ uses: mycr0ft/sysmlpy/.github/workflows/sysml-check.yml@v0.96.4
212
+ with:
213
+ paths: models
214
+ semantic: advisory # off | advisory | strict
215
+ ```
216
+
217
+ This repo's own pushes/PRs dogfood the same workflow
218
+ (`sysml-dogfood.yml` calling it with `install: source`) over the
219
+ bundled standard library and the showcase fixtures — the gate that
220
+ found the two real visitor crashes on named multiplicity bounds
221
+ (`[nCauses]`, `[wallNumber]`) in the bundled library.
222
+
223
+ **GitLab CI** — include the template from this repo:
224
+
225
+ ```yaml
226
+ include:
227
+ - project: mycr0ft/sysmlpy
228
+ ref: v0.96.4
229
+ file: .gitlab/sysml-check.gitlab-ci.yml
230
+
231
+ sysml-check:
232
+ extends: .sysml-check
233
+ variables:
234
+ SYSML_PATHS: "models src"
235
+ ```
236
+
237
+ **pre-commit** — check at commit time:
238
+
239
+ ```yaml
240
+ repos:
241
+ - repo: https://github.com/mycr0ft/sysmlpy
242
+ rev: v0.96.4
243
+ hooks:
244
+ - id: sysmlpy-ci # parse gate + advisory semantics
245
+ ```
246
+
247
+ Full options (excludes, library path, version pinning, DFA cache for
248
+ faster re-runs, and the promote-to-strict path): `docs/ci-integration.md`.
249
+
194
250
  ## Documentation
195
251
 
196
252
  Documentation can be found [here.](https://mycr0ft.github.io/sysmlpy/)
@@ -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.97.0"
10
10
  description = ""
11
11
  authors = [{ name = "Jon R. Fox (mycr0ft)", email = "jon.fox@drfox.com" }]
12
12
  readme = "README.md"
@@ -34,6 +34,7 @@ sim = ["transitions"]
34
34
  reqif = ["reqif"]
35
35
  cayley = ["requests"]
36
36
  jupyter = ["ipython"]
37
+ boxes = ["diagramboxes"]
37
38
 
38
39
  [tool.poetry.scripts]
39
40
  sysmlpy = "sysmlpy.__main__:main"
@@ -43,6 +44,7 @@ sysmlpy-lsp = "sysmlpy.lsp.stdio:main"
43
44
  pytest = ">=8.0,<9.0"
44
45
 
45
46
  [tool.pytest.ini_options]
47
+ norecursedirs = ["tests/kerml_batteries"]
46
48
  markers = [
47
49
  "conformance: OMG 2026-03 XPect parse conformance suite (slow; deselect with -m 'not conformance')",
48
50
  ]
@@ -20,7 +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
+ "reconcile_ids", "qn_registry",
24
24
  "reqif_import", "reqif_import_model", "reqif_export",
25
25
  "evaluate_expression", "evaluate_calculation", "collect_values",
26
26
  "check_constraints", "ConstraintReport", "ConstraintResult",
@@ -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,
@@ -58,7 +58,7 @@ from sysmlpy.traceability import (
58
58
  )
59
59
  from sysmlpy.interchange import (
60
60
  to_interchange, from_interchange, interchange_to_json_text,
61
- reconcile_ids,
61
+ reconcile_ids, qn_registry,
62
62
  )
63
63
  from sysmlpy.reqif_io import (
64
64
  reqif_import, reqif_import_model, reqif_export,
@@ -6,6 +6,7 @@ Subcommands
6
6
  -----------
7
7
  parse Parse a SysML file and print a representation (default: repr()).
8
8
  analyze Run semantic analysis on one or more files; CI-friendly exit codes.
9
+ ci CI check: parse gate (blocking) + semantics (advisory/strict).
9
10
  view Render a PlantUML / Markdown / HTML view of a model.
10
11
  diff Semantic diff of two SysML files (review workflows).
11
12
  format Canonicalize (pretty-print) SysML files (alias: fmt).
@@ -22,6 +23,8 @@ Legacy flat invocation (``sysmlpy FILE --dump`` etc.) is preserved for
22
23
  backward compatibility and behaves exactly like ``sysmlpy parse``.
23
24
  """
24
25
 
26
+ from __future__ import annotations
27
+
25
28
  import argparse
26
29
  import inspect
27
30
  import json
@@ -34,7 +37,7 @@ from sysmlpy import loads
34
37
  # Subcommand table, also used to detect the legacy flat invocation form.
35
38
  SUBCOMMANDS = ("parse", "analyze", "view", "trace", "export", "import",
36
39
  "reqif-import", "reqif-export",
37
- "eval", "xlsx", "sim", "diff", "format", "fmt", "repl")
40
+ "eval", "xlsx", "sim", "diff", "format", "fmt", "repl", "ci")
38
41
 
39
42
 
40
43
  # ---------------------------------------------------------------------------
@@ -215,6 +218,26 @@ def cmd_analyze(args) -> int:
215
218
  return 1 if errors else 0
216
219
 
217
220
 
221
+ # ---------------------------------------------------------------------------
222
+ # sysmlpy ci
223
+ # ---------------------------------------------------------------------------
224
+
225
+ def cmd_ci(args) -> int:
226
+ from sysmlpy.ci_check import run_check, format_output
227
+
228
+ semantic = args.semantic
229
+ if args.semantic_off:
230
+ semantic = "off"
231
+ result = run_check(
232
+ args.paths,
233
+ semantic=semantic,
234
+ library=args.library,
235
+ exclude=args.exclude or (),
236
+ )
237
+ print(format_output(result, args.format))
238
+ return result.exit_code
239
+
240
+
218
241
  # ---------------------------------------------------------------------------
219
242
  # sysmlpy view
220
243
  # ---------------------------------------------------------------------------
@@ -844,6 +867,43 @@ def build_parser() -> argparse.ArgumentParser:
844
867
  )
845
868
  p_analyze.set_defaults(func=cmd_analyze)
846
869
 
870
+ # -- ci ------------------------------------------------------------------
871
+ p_ci = sub.add_parser(
872
+ "ci",
873
+ help="CI check: parse gate (blocking) + semantics (advisory)",
874
+ description="Check SysML/KerML files the way CI does: every file "
875
+ "must parse (blocking); semantic findings are advisory "
876
+ "unless --semantic strict. Exit 0 clean, 1 findings, "
877
+ "2 operational error.",
878
+ )
879
+ p_ci.add_argument(
880
+ "paths", nargs="+",
881
+ help="Files or directories (searched recursively) to check",
882
+ )
883
+ p_ci.add_argument(
884
+ "--semantic", choices=("off", "advisory", "strict"), default="advisory",
885
+ help="Semantic gate mode (default: advisory — findings reported, "
886
+ "parse failures still block). strict promotes semantics to "
887
+ "blocking; off skips semantic analysis entirely.",
888
+ )
889
+ p_ci.add_argument(
890
+ "--no-semantic", dest="semantic_off", action="store_true",
891
+ help="Shorthand for --semantic off",
892
+ )
893
+ p_ci.add_argument(
894
+ "-l", "--library",
895
+ help="Path to SysML v2 library files for semantic analysis",
896
+ )
897
+ p_ci.add_argument(
898
+ "--exclude", action="append", default=None,
899
+ help="Substring pattern to skip (repeatable), e.g. --exclude third_party/",
900
+ )
901
+ p_ci.add_argument(
902
+ "--format", choices=("text", "json"), default="text",
903
+ help="Output format: human-readable text (default) or JSON",
904
+ )
905
+ p_ci.set_defaults(func=cmd_ci)
906
+
847
907
  # -- diff ----------------------------------------------------------------
848
908
  p_diff = sub.add_parser(
849
909
  "diff",
@@ -7381,7 +7381,7 @@ def _extract_multiplicity_from_ctx(om_ctx):
7381
7381
  }
7382
7382
  ]
7383
7383
  }
7384
- else:
7384
+ elif value_text.isdigit():
7385
7385
  return {
7386
7386
  "name": "MultiplicityExpressionMember",
7387
7387
  "ownedRelatedElement": [
@@ -7390,6 +7390,20 @@ def _extract_multiplicity_from_ctx(om_ctx):
7390
7390
  }
7391
7391
  ]
7392
7392
  }
7393
+ else:
7394
+ # Named multiplicity bound (e.g. '[nCauses]'), as used in
7395
+ # the standard library's succession multiplicities — emit
7396
+ # a feature reference, not an int().
7397
+ return {
7398
+ "name": "MultiplicityExpressionMember",
7399
+ "ownedRelatedElement": [
7400
+ {"name": "MultiplicityRelatedElement", "ownedRelatedElement":
7401
+ {"name": "FeatureReferenceExpression", "ownedRelationship": [
7402
+ {"name": "FeatureReferenceMember", "memberElement": value_text}
7403
+ ]}
7404
+ }
7405
+ ]
7406
+ }
7393
7407
 
7394
7408
  if len(members) == 1:
7395
7409
  bound_dicts = [_make_bound(members[0].getText())]
@@ -7443,7 +7457,7 @@ def _extract_multiplicity_from_mp(mp_ctx):
7443
7457
  }
7444
7458
  ]
7445
7459
  }
7446
- else:
7460
+ elif value_text.isdigit():
7447
7461
  return {
7448
7462
  "name": "MultiplicityExpressionMember",
7449
7463
  "ownedRelatedElement": [
@@ -7452,6 +7466,20 @@ def _extract_multiplicity_from_mp(mp_ctx):
7452
7466
  }
7453
7467
  ]
7454
7468
  }
7469
+ else:
7470
+ # Named multiplicity bound (e.g. '[nCauses]'), as used in
7471
+ # the standard library's succession multiplicities — emit
7472
+ # a feature reference, not an int().
7473
+ return {
7474
+ "name": "MultiplicityExpressionMember",
7475
+ "ownedRelatedElement": [
7476
+ {"name": "MultiplicityRelatedElement", "ownedRelatedElement":
7477
+ {"name": "FeatureReferenceExpression", "ownedRelationship": [
7478
+ {"name": "FeatureReferenceMember", "memberElement": value_text}
7479
+ ]}
7480
+ }
7481
+ ]
7482
+ }
7455
7483
 
7456
7484
  if len(members) == 1:
7457
7485
  bound_dicts = [_make_bound(members[0].getText())]