sysmlpy 0.96.0__tar.gz → 0.96.2__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.
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/PKG-INFO +74 -2
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/README.md +73 -1
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/pyproject.toml +1 -1
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/__init__.py +89 -2
- sysmlpy-0.96.2/src/sysmlpy/antlr/SysMLv2Parser.interp +914 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/SysMLv2Parser.py +5986 -6802
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -126
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -70
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr_visitor.py +186 -47
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/definition.py +39 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/dfa_cache.py +14 -1
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +31 -80
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/classes.py +38 -3
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/usage.py +254 -4
- sysmlpy-0.96.0/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -928
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/LICENSE +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/__main__.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/README.md +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/antlr_parser.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/boxes_view.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/diff.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/evaluator.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/examples/attribute_values.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/examples/part_attributes.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/examples/tuples_sequences.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/formatting.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/README.md +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/interchange.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/ipython_magic.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLLexer.g4 +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLLexer.interp +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLLexer.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLLexer.tokens +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLParser.g4 +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLParser.interp +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLParser.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLParser.tokens +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/KerMLParserVisitor.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/README.md +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/__init__.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/kerml.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/kerml/kerml_visitor.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/LICENSE +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/README.md +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/__init__.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Base.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Links.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Actions.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Cases.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Connections.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Flows.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Items.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Parts.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Ports.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/States.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/SysML.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/library/systems/Views.sysml +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/lsp/__init__.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/lsp/__main__.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/lsp/protocol.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/lsp/server.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/lsp/stdio.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/mdtables.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/navigate.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/plantuml.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/project.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/repl.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/reqif_io.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/semantic.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/sim.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/spreadsheet.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/store.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/traceability.py +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/src/sysmlpy/us_customary_units.txt +0 -0
- {sysmlpy-0.96.0 → sysmlpy-0.96.2}/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
|
+
Version: 0.96.2
|
|
4
4
|
Summary:
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Author: Jon R. Fox (mycr0ft)
|
|
@@ -439,7 +439,79 @@ tree = classtree(model)
|
|
|
439
439
|
print(tree.dump())
|
|
440
440
|
```
|
|
441
441
|
|
|
442
|
-
**All
|
|
442
|
+
**All 168 grammar round-trip tests pass** (100%). Covered categories: packages, parts, items, ports, interfaces, binding connectors, flow connections, all action forms (definition, shorthand, succession, decomposition), expressions, calculations, constraints, state definitions, requirements, analysis cases, control flow (if/else, while, loop, fork, join, decision, send, accept, terminate), trade studies, views, viewpoints, render states, portion usages, and annotations.
|
|
443
|
+
|
|
444
|
+
### Doc comments, interface ends, and flows (v0.96.1)
|
|
445
|
+
|
|
446
|
+
These constructs are easy to lose between the parser and the API — v0.96.1 makes them first-class and round-trip-safe:
|
|
447
|
+
|
|
448
|
+
- **`doc /* ... */` comments** — on a package, on any part/item/port/action/... usage or definition, and inside interface bodies — are captured as a `.doc` attribute (a plain string) and re-emitted by `dump()`/`classtree()`, even when the comment shares its body with ports, attributes, or other members.
|
|
449
|
+
- **Interface ends** — `end <name>;` and `end <name> ::> part.port;` members of an interface body — are captured as `Interface.ends` (name, type, multiplicity tuples) and `Interface.iface_connections` (`::>` target paths), and survive a dump round-trip.
|
|
450
|
+
- **`flow <source> to <target>;`** — parses into a `Flow` child of the owning part, re-emits in the dump, and renders as a flow edge in the Interconnection View.
|
|
451
|
+
|
|
452
|
+
```python
|
|
453
|
+
from sysmlpy import loads, as_interconnection_view
|
|
454
|
+
from sysmlpy.formatting import classtree
|
|
455
|
+
|
|
456
|
+
text = """package WaterSystem {
|
|
457
|
+
doc /* package doc: the coffee water loop */
|
|
458
|
+
|
|
459
|
+
part def WaterTank {
|
|
460
|
+
doc /* stores the water */
|
|
461
|
+
port waterOut;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
part def Brewer {
|
|
465
|
+
doc /* heats and brews */
|
|
466
|
+
port waterInlet;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
interface def WaterSupply {
|
|
470
|
+
doc /* the supply contract */
|
|
471
|
+
end supplierPort;
|
|
472
|
+
end consumerPort;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
part def CoffeeMachine {
|
|
476
|
+
doc /* makes coffee */
|
|
477
|
+
part waterTank : WaterTank;
|
|
478
|
+
part brewer : Brewer;
|
|
479
|
+
|
|
480
|
+
interface waterLine : WaterSupply {
|
|
481
|
+
doc /* internal plumbing */
|
|
482
|
+
end supplierPort ::> waterTank.waterOut;
|
|
483
|
+
end consumerPort ::> brewer.waterInlet;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
flow waterTank.waterOut to brewer.waterInlet;
|
|
487
|
+
}
|
|
488
|
+
}"""
|
|
489
|
+
|
|
490
|
+
model = loads(text)
|
|
491
|
+
package = model.children[0]
|
|
492
|
+
|
|
493
|
+
# doc text on every element
|
|
494
|
+
assert package.doc == "package doc: the coffee water loop"
|
|
495
|
+
tank = package.find("WaterTank")[0]
|
|
496
|
+
assert tank.doc == "stores the water"
|
|
497
|
+
|
|
498
|
+
# interface ends: names and ::> targets
|
|
499
|
+
machine = package.find("CoffeeMachine")[0]
|
|
500
|
+
water_line = next(c for c in machine.children if type(c).__name__ == "Interface")
|
|
501
|
+
assert [e[0] for e in water_line.ends] == ["supplierPort", "consumerPort"]
|
|
502
|
+
assert water_line.iface_connections == [
|
|
503
|
+
("supplierPort", "waterTank.waterOut"),
|
|
504
|
+
("consumerPort", "brewer.waterInlet"),
|
|
505
|
+
]
|
|
506
|
+
|
|
507
|
+
# flows show up in the Interconnection View
|
|
508
|
+
assert "flow" in as_interconnection_view(model)
|
|
509
|
+
|
|
510
|
+
# and everything survives the dump round-trip (docs included)
|
|
511
|
+
assert "stores the water" in classtree(model).dump()
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
See `examples/doc_ends_flows.py` for the full walk through the parse → grammar → API layers.
|
|
443
515
|
|
|
444
516
|
## Semantic Analysis
|
|
445
517
|
|
|
@@ -403,7 +403,79 @@ tree = classtree(model)
|
|
|
403
403
|
print(tree.dump())
|
|
404
404
|
```
|
|
405
405
|
|
|
406
|
-
**All
|
|
406
|
+
**All 168 grammar round-trip tests pass** (100%). Covered categories: packages, parts, items, ports, interfaces, binding connectors, flow connections, all action forms (definition, shorthand, succession, decomposition), expressions, calculations, constraints, state definitions, requirements, analysis cases, control flow (if/else, while, loop, fork, join, decision, send, accept, terminate), trade studies, views, viewpoints, render states, portion usages, and annotations.
|
|
407
|
+
|
|
408
|
+
### Doc comments, interface ends, and flows (v0.96.1)
|
|
409
|
+
|
|
410
|
+
These constructs are easy to lose between the parser and the API — v0.96.1 makes them first-class and round-trip-safe:
|
|
411
|
+
|
|
412
|
+
- **`doc /* ... */` comments** — on a package, on any part/item/port/action/... usage or definition, and inside interface bodies — are captured as a `.doc` attribute (a plain string) and re-emitted by `dump()`/`classtree()`, even when the comment shares its body with ports, attributes, or other members.
|
|
413
|
+
- **Interface ends** — `end <name>;` and `end <name> ::> part.port;` members of an interface body — are captured as `Interface.ends` (name, type, multiplicity tuples) and `Interface.iface_connections` (`::>` target paths), and survive a dump round-trip.
|
|
414
|
+
- **`flow <source> to <target>;`** — parses into a `Flow` child of the owning part, re-emits in the dump, and renders as a flow edge in the Interconnection View.
|
|
415
|
+
|
|
416
|
+
```python
|
|
417
|
+
from sysmlpy import loads, as_interconnection_view
|
|
418
|
+
from sysmlpy.formatting import classtree
|
|
419
|
+
|
|
420
|
+
text = """package WaterSystem {
|
|
421
|
+
doc /* package doc: the coffee water loop */
|
|
422
|
+
|
|
423
|
+
part def WaterTank {
|
|
424
|
+
doc /* stores the water */
|
|
425
|
+
port waterOut;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
part def Brewer {
|
|
429
|
+
doc /* heats and brews */
|
|
430
|
+
port waterInlet;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
interface def WaterSupply {
|
|
434
|
+
doc /* the supply contract */
|
|
435
|
+
end supplierPort;
|
|
436
|
+
end consumerPort;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
part def CoffeeMachine {
|
|
440
|
+
doc /* makes coffee */
|
|
441
|
+
part waterTank : WaterTank;
|
|
442
|
+
part brewer : Brewer;
|
|
443
|
+
|
|
444
|
+
interface waterLine : WaterSupply {
|
|
445
|
+
doc /* internal plumbing */
|
|
446
|
+
end supplierPort ::> waterTank.waterOut;
|
|
447
|
+
end consumerPort ::> brewer.waterInlet;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
flow waterTank.waterOut to brewer.waterInlet;
|
|
451
|
+
}
|
|
452
|
+
}"""
|
|
453
|
+
|
|
454
|
+
model = loads(text)
|
|
455
|
+
package = model.children[0]
|
|
456
|
+
|
|
457
|
+
# doc text on every element
|
|
458
|
+
assert package.doc == "package doc: the coffee water loop"
|
|
459
|
+
tank = package.find("WaterTank")[0]
|
|
460
|
+
assert tank.doc == "stores the water"
|
|
461
|
+
|
|
462
|
+
# interface ends: names and ::> targets
|
|
463
|
+
machine = package.find("CoffeeMachine")[0]
|
|
464
|
+
water_line = next(c for c in machine.children if type(c).__name__ == "Interface")
|
|
465
|
+
assert [e[0] for e in water_line.ends] == ["supplierPort", "consumerPort"]
|
|
466
|
+
assert water_line.iface_connections == [
|
|
467
|
+
("supplierPort", "waterTank.waterOut"),
|
|
468
|
+
("consumerPort", "brewer.waterInlet"),
|
|
469
|
+
]
|
|
470
|
+
|
|
471
|
+
# flows show up in the Interconnection View
|
|
472
|
+
assert "flow" in as_interconnection_view(model)
|
|
473
|
+
|
|
474
|
+
# and everything survives the dump round-trip (docs included)
|
|
475
|
+
assert "stores the water" in classtree(model).dump()
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
See `examples/doc_ends_flows.py` for the full walk through the parse → grammar → API layers.
|
|
407
479
|
|
|
408
480
|
## Semantic Analysis
|
|
409
481
|
|
|
@@ -8,7 +8,7 @@ Uses the ANTLR4 parser for full SysML v2 grammar support.
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
__all__ = [
|
|
11
|
-
"load", "loads", "parse", "load_grammar", "load_antlr", "load_grammar_antlr",
|
|
11
|
+
"load", "loads", "load_wrapped", "loads_wrapped", "parse", "load_grammar", "load_antlr", "load_grammar_antlr",
|
|
12
12
|
"load_files", "load_project", "load_with_dependencies",
|
|
13
13
|
"Searchable",
|
|
14
14
|
"Store", "InMemoryStore", "NetworkXStore", "KuzuStore", "CayleyStore", "create_store", "new_id",
|
|
@@ -35,7 +35,7 @@ __all__ = [
|
|
|
35
35
|
"render_state_transition_view_svg", "boxes_view",
|
|
36
36
|
]
|
|
37
37
|
__author__ = "Jon Fox"
|
|
38
|
-
__version__ = "0.96.
|
|
38
|
+
__version__ = "0.96.2"
|
|
39
39
|
|
|
40
40
|
from sysmlpy.usage import (
|
|
41
41
|
Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
|
|
@@ -311,6 +311,93 @@ def loads(s: str, library=None, rescue_language="English") -> Model:
|
|
|
311
311
|
rescue_language=rescue_language)
|
|
312
312
|
|
|
313
313
|
|
|
314
|
+
def _is_bare_top_level(s: str) -> bool:
|
|
315
|
+
"""True when *s* starts with a top-level definition/usage keyword
|
|
316
|
+
rather than a (library) package — the same textual probe
|
|
317
|
+
:meth:`sysmlpy.definition.Model.load` uses for its strict guard."""
|
|
318
|
+
s_stripped = s.strip() if isinstance(s, str) else s
|
|
319
|
+
if not isinstance(s_stripped, str) or not s_stripped.split():
|
|
320
|
+
return False
|
|
321
|
+
invalid_starts = ['item', 'part', 'port', 'attribute', 'action', 'state',
|
|
322
|
+
'connection', 'interface', 'requirement', 'case', 'use',
|
|
323
|
+
'calc', 'constraint', 'concern', 'ref', 'flow', 'allocation',
|
|
324
|
+
'view', 'viewpoint', 'rendering', 'metadata', 'individual']
|
|
325
|
+
return s_stripped.split(None, 1)[0] in invalid_starts
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def loads_wrapped(s: str, package_name="Snippets", library=None,
|
|
329
|
+
rescue_language="English") -> Model:
|
|
330
|
+
"""Load bare top-level SysML (no enclosing package) into a Model by
|
|
331
|
+
wrapping it in a synthetic package.
|
|
332
|
+
|
|
333
|
+
OMG example and training snippets frequently open directly with
|
|
334
|
+
``part def Camera { ... }`` or ``action def DecisionTest { ... }``.
|
|
335
|
+
:func:`loads` / ``Model.load`` deliberately reject that form ("Base
|
|
336
|
+
Model must be encapsulated by a package"). This loader accepts it:
|
|
337
|
+
the source is wrapped as ``package <package_name> { ... }`` and then
|
|
338
|
+
parsed exactly like :func:`loads`. Content already carrying a
|
|
339
|
+
top-level package (or ``standard library package``) passes through
|
|
340
|
+
untouched, so the function is safe to call unconditionally on file
|
|
341
|
+
text.
|
|
342
|
+
|
|
343
|
+
Parameters
|
|
344
|
+
----------
|
|
345
|
+
s : str
|
|
346
|
+
The SysML v2 source code to parse.
|
|
347
|
+
package_name : str, optional
|
|
348
|
+
Name of the synthetic package. Defaults to ``"Snippets"``.
|
|
349
|
+
library : str or Path, optional
|
|
350
|
+
Path to SysML v2 library files for resolving imports.
|
|
351
|
+
|
|
352
|
+
Returns
|
|
353
|
+
-------
|
|
354
|
+
Model
|
|
355
|
+
Model instance with one child: the synthetic package.
|
|
356
|
+
|
|
357
|
+
.. versionadded:: 0.96.1
|
|
358
|
+
"""
|
|
359
|
+
if _is_bare_top_level(s):
|
|
360
|
+
s = "package %s {\n%s\n}\n" % (package_name, s.rstrip("\n"))
|
|
361
|
+
return loads(s, library=library, rescue_language=rescue_language)
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
def load_wrapped(fp, package_name="Snippets", library=None) -> Model:
|
|
365
|
+
"""File-pointer twin of :func:`loads_wrapped`.
|
|
366
|
+
|
|
367
|
+
Deserialize ``fp`` (a ``.read()``-supporting file-like object) —
|
|
368
|
+
wrapping bare top-level definitions in a synthetic package when
|
|
369
|
+
needed — to a Model object. Content with a top-level package passes
|
|
370
|
+
through untouched.
|
|
371
|
+
|
|
372
|
+
Parameters
|
|
373
|
+
----------
|
|
374
|
+
fp : _io.TextIOWrapper
|
|
375
|
+
File pointer to a SysML v2.0 document.
|
|
376
|
+
package_name : str, optional
|
|
377
|
+
Name of the synthetic package. Defaults to ``"Snippets"``.
|
|
378
|
+
library : str or Path, optional
|
|
379
|
+
Path to SysML v2 library files for resolving imports.
|
|
380
|
+
|
|
381
|
+
Returns
|
|
382
|
+
-------
|
|
383
|
+
Model
|
|
384
|
+
Model instance structured utilizing SysML v2.0 grammar.
|
|
385
|
+
|
|
386
|
+
Raises
|
|
387
|
+
------
|
|
388
|
+
TypeError
|
|
389
|
+
Input was not a ``.read()``-supporting file-like object.
|
|
390
|
+
|
|
391
|
+
.. versionadded:: 0.96.1
|
|
392
|
+
"""
|
|
393
|
+
if not hasattr(fp, "read"):
|
|
394
|
+
raise TypeError(
|
|
395
|
+
f"the SysML object must be a file-like object, "
|
|
396
|
+
f"not {fp.__class__.__name__}"
|
|
397
|
+
)
|
|
398
|
+
return loads_wrapped(fp.read(), package_name=package_name, library=library)
|
|
399
|
+
|
|
400
|
+
|
|
314
401
|
def parse(s: str, library=None):
|
|
315
402
|
"""Parse SysML source, returning (model, errors) rather than raising.
|
|
316
403
|
|