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