sysmlpy 0.69.0__tar.gz → 0.69.1__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.69.0 → sysmlpy-0.69.1}/PKG-INFO +1 -1
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/pyproject.toml +1 -1
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/__init__.py +1 -1
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/semantic.py +174 -5
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/LICENSE +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/README.md +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/__main__.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/README.md +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr_parser.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr_visitor.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/boxes_view.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/definition.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/evaluator.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/examples/attribute_values.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/examples/part_attributes.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/examples/tuples_sequences.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/formatting.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/README.md +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/grammar/classes.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/interchange.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/LICENSE +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/README.md +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/__init__.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Base.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Links.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Actions.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Cases.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Connections.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Flows.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Items.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Parts.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Ports.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/States.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/SysML.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/systems/Views.sysml +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/__init__.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/__main__.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/protocol.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/server.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/lsp/stdio.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/navigate.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/plantuml.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/project.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/sim.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/spreadsheet.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/store.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/traceability.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/us_customary_units.txt +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/usage.py +0 -0
- {sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/validator.py +0 -0
|
@@ -34,7 +34,7 @@ __all__ = [
|
|
|
34
34
|
"render_state_transition_view_svg", "boxes_view",
|
|
35
35
|
]
|
|
36
36
|
__author__ = "Jon Fox"
|
|
37
|
-
__version__ = "0.69.
|
|
37
|
+
__version__ = "0.69.1"
|
|
38
38
|
|
|
39
39
|
from sysmlpy.usage import (
|
|
40
40
|
Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
|
|
@@ -1236,6 +1236,55 @@ class ExpressionIdentifierCollector:
|
|
|
1236
1236
|
self._walk(child, results, child_scope)
|
|
1237
1237
|
|
|
1238
1238
|
|
|
1239
|
+
def _find_payload_parameters(node: Any) -> list:
|
|
1240
|
+
"""Locate every ``PayloadParameter`` dict in a grammar tree."""
|
|
1241
|
+
out: list = []
|
|
1242
|
+
|
|
1243
|
+
def walk(n: Any) -> None:
|
|
1244
|
+
if isinstance(n, dict):
|
|
1245
|
+
if n.get("name") == "PayloadParameter":
|
|
1246
|
+
out.append(n)
|
|
1247
|
+
for v in n.values():
|
|
1248
|
+
if isinstance(v, (dict, list)):
|
|
1249
|
+
walk(v)
|
|
1250
|
+
elif isinstance(n, list):
|
|
1251
|
+
for item in n:
|
|
1252
|
+
if isinstance(item, (dict, list)):
|
|
1253
|
+
walk(item)
|
|
1254
|
+
|
|
1255
|
+
walk(node)
|
|
1256
|
+
return out
|
|
1257
|
+
|
|
1258
|
+
|
|
1259
|
+
def _payload_reference(payload: Any) -> str | None:
|
|
1260
|
+
"""The name a ``PayloadParameter`` refers to, if any.
|
|
1261
|
+
|
|
1262
|
+
Bare ``accept Sig`` → the OwnedFeatureTyping QualifiedName.
|
|
1263
|
+
Guarded ``accept Sig when ...`` → ``identification.declaredName``
|
|
1264
|
+
(only when no typing is present — with both, the identification
|
|
1265
|
+
is a fresh declaration, not a reference).
|
|
1266
|
+
"""
|
|
1267
|
+
if not isinstance(payload, dict):
|
|
1268
|
+
return None
|
|
1269
|
+
feature = payload.get("feature") or {}
|
|
1270
|
+
rels = feature.get("ownedRelationship")
|
|
1271
|
+
rel_list = rels if isinstance(rels, list) else [rels] if isinstance(rels, dict) else []
|
|
1272
|
+
for rel in rel_list:
|
|
1273
|
+
t = ((rel.get("type") or {}).get("type") or {}) \
|
|
1274
|
+
if isinstance(rel, dict) else {}
|
|
1275
|
+
names = t.get("names")
|
|
1276
|
+
if isinstance(names, list) and names:
|
|
1277
|
+
return "::".join(str(n) for n in names)
|
|
1278
|
+
if rel_list:
|
|
1279
|
+
return None # typed payload — identification is a declaration
|
|
1280
|
+
ident = payload.get("identification")
|
|
1281
|
+
if isinstance(ident, dict):
|
|
1282
|
+
name = ident.get("declaredName")
|
|
1283
|
+
if name:
|
|
1284
|
+
return str(name)
|
|
1285
|
+
return None
|
|
1286
|
+
|
|
1287
|
+
|
|
1239
1288
|
def _find_owned_expressions(node: Any) -> list[dict]:
|
|
1240
1289
|
"""Locate every ``OwnedExpression`` dict in a grammar definition tree."""
|
|
1241
1290
|
out: list[dict] = []
|
|
@@ -2329,6 +2378,8 @@ class SemanticAnalyzer:
|
|
|
2329
2378
|
issues.extend(self._check_connector_ends_compatible(model))
|
|
2330
2379
|
issues.extend(self._check_multiplicity_bounds_valid(model))
|
|
2331
2380
|
issues.extend(self._check_state_machines(model))
|
|
2381
|
+
issues.extend(self._check_trigger_payloads(model, symtab, lib_roots))
|
|
2382
|
+
issues.extend(self._check_requirement_coverage(model))
|
|
2332
2383
|
|
|
2333
2384
|
# Step 6: Stylistic checks (warnings, not errors)
|
|
2334
2385
|
if style_checks:
|
|
@@ -2914,6 +2965,124 @@ class SemanticAnalyzer:
|
|
|
2914
2965
|
|
|
2915
2966
|
# -- OCL well-formedness constraints ------------------------------------
|
|
2916
2967
|
|
|
2968
|
+
def _check_trigger_payloads(
|
|
2969
|
+
self,
|
|
2970
|
+
model: Any,
|
|
2971
|
+
symtab: "SymbolTable",
|
|
2972
|
+
lib_roots: list,
|
|
2973
|
+
) -> list[SemanticIssue]:
|
|
2974
|
+
"""Resolve ``accept <Sig>`` trigger payload references (Goal 9).
|
|
2975
|
+
|
|
2976
|
+
The shorthand ``accept <Sig> [when <expr>]`` binds a transition
|
|
2977
|
+
trigger to a payload/signal definition. A typo there is
|
|
2978
|
+
silent today: the transition simply never fires, and nothing
|
|
2979
|
+
in analyze() looks at payload names. Two parse shapes exist
|
|
2980
|
+
(both verified against the visitor output):
|
|
2981
|
+
|
|
2982
|
+
- bare ``accept Sig`` — PayloadParameter carries an
|
|
2983
|
+
OwnedFeatureTyping → QualifiedName reference;
|
|
2984
|
+
- guarded ``accept Sig when expr`` — the visitor parks the
|
|
2985
|
+
name in ``identification.declaredName`` with no typing.
|
|
2986
|
+
|
|
2987
|
+
In both the name is meant as a reference to a declared
|
|
2988
|
+
definition, so each payload name is resolved against the
|
|
2989
|
+
symbol table in the transition's scope. Unresolved payloads
|
|
2990
|
+
produce UNRESOLVED_TRIGGER_PAYLOAD errors. When both an
|
|
2991
|
+
identification and a typing are present (``accept e : T``),
|
|
2992
|
+
only the typing is a reference — the identification is a
|
|
2993
|
+
fresh declaration.
|
|
2994
|
+
"""
|
|
2995
|
+
issues: list[SemanticIssue] = []
|
|
2996
|
+
try:
|
|
2997
|
+
from sysmlpy.sim import load_model_grammar
|
|
2998
|
+
visit = load_model_grammar(model)
|
|
2999
|
+
except Exception:
|
|
3000
|
+
return issues
|
|
3001
|
+
|
|
3002
|
+
for element, scope_path in self._walk_usages(model):
|
|
3003
|
+
# Transitions live inside State definitions' grammar trees
|
|
3004
|
+
# (no TransitionUsage object of their own) — extracting at
|
|
3005
|
+
# the State level attributes each payload to exactly one
|
|
3006
|
+
# element and keeps the scope path correct.
|
|
3007
|
+
if type(element).__name__ != "State":
|
|
3008
|
+
continue
|
|
3009
|
+
grammar_def = None
|
|
3010
|
+
grammar = getattr(element, "grammar", None)
|
|
3011
|
+
if grammar is None:
|
|
3012
|
+
continue
|
|
3013
|
+
try:
|
|
3014
|
+
grammar_def = grammar.get_definition()
|
|
3015
|
+
except Exception:
|
|
3016
|
+
continue
|
|
3017
|
+
if not isinstance(grammar_def, dict):
|
|
3018
|
+
continue
|
|
3019
|
+
for payload in _find_payload_parameters(grammar_def):
|
|
3020
|
+
ref = _payload_reference(payload)
|
|
3021
|
+
if not ref:
|
|
3022
|
+
continue
|
|
3023
|
+
if self._is_resolved(ref, symtab, scope_path, lib_roots):
|
|
3024
|
+
continue
|
|
3025
|
+
issues.append(SemanticIssue(
|
|
3026
|
+
severity="error",
|
|
3027
|
+
code="UNRESOLVED_TRIGGER_PAYLOAD",
|
|
3028
|
+
message=(
|
|
3029
|
+
f"Accept trigger payload '{ref}' in "
|
|
3030
|
+
f"{type(element).__name__} "
|
|
3031
|
+
f"'{getattr(element, 'name', '<anonymous>')}' "
|
|
3032
|
+
"does not resolve to a defined symbol; the "
|
|
3033
|
+
"transition can never fire"),
|
|
3034
|
+
element=element,
|
|
3035
|
+
reference=ref,
|
|
3036
|
+
))
|
|
3037
|
+
return issues
|
|
3038
|
+
|
|
3039
|
+
@staticmethod
|
|
3040
|
+
def _walk_usages(model: Any):
|
|
3041
|
+
"""Yield ``(element, scope_path)`` for every usage-like element."""
|
|
3042
|
+
def walk(element, scope_path):
|
|
3043
|
+
name = getattr(element, "name", None)
|
|
3044
|
+
elem_type = type(element).__name__
|
|
3045
|
+
is_container = getattr(element, "is_definition", False) or elem_type == "Package"
|
|
3046
|
+
child_scope = scope_path
|
|
3047
|
+
if is_container and name is not None and elem_type != "Model":
|
|
3048
|
+
child_scope = scope_path + [name]
|
|
3049
|
+
yield element, scope_path
|
|
3050
|
+
for child in getattr(element, "children", []):
|
|
3051
|
+
yield from walk(child, child_scope)
|
|
3052
|
+
|
|
3053
|
+
yield from walk(model, [])
|
|
3054
|
+
|
|
3055
|
+
def _check_requirement_coverage(self, model: Any) -> list[SemanticIssue]:
|
|
3056
|
+
"""Cross-check requirement traceability coverage (Goal 9).
|
|
3057
|
+
|
|
3058
|
+
Reuses the Goal 2 traceability extractor: every requirement
|
|
3059
|
+
*usage* with no ``satisfy`` *and* no ``verify`` relationship
|
|
3060
|
+
yields a REQUIREMENT_UNCOVERED warning. ``requirement def``
|
|
3061
|
+
declarations are categories/templates, not traceable
|
|
3062
|
+
instances, and are never flagged. Partially covered
|
|
3063
|
+
requirements (satisfied but unverified or vice versa) are not
|
|
3064
|
+
flagged — that is a project-progress signal, not a
|
|
3065
|
+
well-formedness problem.
|
|
3066
|
+
"""
|
|
3067
|
+
issues: list[SemanticIssue] = []
|
|
3068
|
+
try:
|
|
3069
|
+
from sysmlpy.traceability import extract_traceability
|
|
3070
|
+
report = extract_traceability(model)
|
|
3071
|
+
except Exception:
|
|
3072
|
+
return issues
|
|
3073
|
+
for trace in report.uncovered():
|
|
3074
|
+
if getattr(trace, "is_definition", False):
|
|
3075
|
+
continue
|
|
3076
|
+
issues.append(SemanticIssue(
|
|
3077
|
+
severity="warning",
|
|
3078
|
+
code="REQUIREMENT_UNCOVERED",
|
|
3079
|
+
message=(
|
|
3080
|
+
f"Requirement '{trace.name}' has no satisfy and "
|
|
3081
|
+
"no verify relationships"),
|
|
3082
|
+
reference=trace.name,
|
|
3083
|
+
))
|
|
3084
|
+
return issues
|
|
3085
|
+
|
|
2917
3086
|
def _check_state_machines(self, model: Any) -> list[SemanticIssue]:
|
|
2918
3087
|
"""OCL well-formedness for ``state def`` machines (Goal 9).
|
|
2919
3088
|
|
|
@@ -2930,12 +3099,12 @@ class SemanticAnalyzer:
|
|
|
2930
3099
|
issues: list[SemanticIssue] = []
|
|
2931
3100
|
try:
|
|
2932
3101
|
# Lazy import: sim pulls the boxes-view collector and the
|
|
2933
|
-
# evaluator; no import cycle at module level.
|
|
3102
|
+
# evaluator; no import cycle at module level. The sim
|
|
3103
|
+
# extra is optional — skip these checks without it.
|
|
2934
3104
|
from sysmlpy.sim import SimulationError, build_state_machine
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
visit = _bv # noqa: F841 — ensures boxes_view loads once
|
|
3105
|
+
except ImportError:
|
|
3106
|
+
return issues
|
|
3107
|
+
try:
|
|
2939
3108
|
machines = self._collect_machines(model)
|
|
2940
3109
|
except SimulationError:
|
|
2941
3110
|
return issues
|
|
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.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp
RENAMED
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py
RENAMED
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/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
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml
RENAMED
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml
RENAMED
|
File without changes
|
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/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.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml
RENAMED
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml
RENAMED
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml
RENAMED
|
File without changes
|
|
File without changes
|
{sysmlpy-0.69.0 → sysmlpy-0.69.1}/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.69.0 → sysmlpy-0.69.1}/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
|