sysmlpy 0.90.1__tar.gz → 0.91.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.
- sysmlpy-0.90.1/README.md → sysmlpy-0.91.0/PKG-INFO +81 -0
- sysmlpy-0.90.1/PKG-INFO → sysmlpy-0.91.0/README.md +47 -32
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/pyproject.toml +3 -1
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/__init__.py +1 -1
- sysmlpy-0.91.0/src/sysmlpy/ipython_magic.py +251 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/LICENSE +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/__main__.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/README.md +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr_parser.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr_visitor.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/boxes_view.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/definition.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/dfa_cache.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/diff.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/evaluator.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/examples/attribute_values.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/examples/part_attributes.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/examples/tuples_sequences.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/formatting.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/grammar/classes.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/interchange.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/LICENSE +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/README.md +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/__init__.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/States.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/lsp/__init__.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/lsp/__main__.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/lsp/protocol.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/lsp/server.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/lsp/stdio.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/navigate.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/plantuml.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/project.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/semantic.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/sim.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/spreadsheet.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/store.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/traceability.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/us_customary_units.txt +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/usage.py +0 -0
- {sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/validator.py +0 -0
|
@@ -1,3 +1,36 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sysmlpy
|
|
3
|
+
Version: 0.91.0
|
|
4
|
+
Summary:
|
|
5
|
+
License-File: LICENSE
|
|
6
|
+
Author: Jon R. Fox (mycr0ft)
|
|
7
|
+
Author-email: jon.fox@drfox.com
|
|
8
|
+
Requires-Python: >=3.9,<4.0
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Provides-Extra: cayley
|
|
17
|
+
Provides-Extra: graph
|
|
18
|
+
Provides-Extra: jupyter
|
|
19
|
+
Provides-Extra: kuzu
|
|
20
|
+
Provides-Extra: sim
|
|
21
|
+
Provides-Extra: xlsx
|
|
22
|
+
Requires-Dist: antlr4-python3-runtime (>=4.13)
|
|
23
|
+
Requires-Dist: arrow (>=1.4.0,<2.0.0)
|
|
24
|
+
Requires-Dist: ipython (>=8.0) ; extra == "jupyter"
|
|
25
|
+
Requires-Dist: kuzu (>=0.7,<0.12) ; extra == "kuzu"
|
|
26
|
+
Requires-Dist: networkx (>=3.0) ; extra == "graph"
|
|
27
|
+
Requires-Dist: openpyxl (>=3.1) ; extra == "xlsx"
|
|
28
|
+
Requires-Dist: pint (>=0.24)
|
|
29
|
+
Requires-Dist: pyyaml (>=6.0)
|
|
30
|
+
Requires-Dist: requests (>=2.31) ; extra == "cayley"
|
|
31
|
+
Requires-Dist: transitions (>=0.9,<0.10) ; extra == "sim"
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
1
34
|
# sysmlpy
|
|
2
35
|
[](https://badge.fury.io/py/sysmlpy)[](https://pypi.python.org/pypi/sysmlpy/)[](https://lbesson.mit-license.org/)
|
|
3
36
|
|
|
@@ -41,6 +74,7 @@ sysmlpy requires the following Python packages:
|
|
|
41
74
|
- [kuzu](https://kuzudb.com/) — embedded graph database with disk persistence and Cypher queries (install with `pip install sysmlpy[kuzu]`)
|
|
42
75
|
- [cayley](https://cayley.io/) — graph database via HTTP API, supports BoltDB/LevelDB backends (install with `pip install sysmlpy[cayley]`)
|
|
43
76
|
- [PlantUML](https://plantuml.com/) **v1.2020.0+** — diagram rendering (requires Java + PlantUML JAR or [PlantUML server](https://www.plantuml.com/plantuml)). The generator uses `<style>` blocks and `skinparam` stereotype selectors introduced in v1.2020.
|
|
77
|
+
- [IPython](https://ipython.org/) **v8.0+** — the `%%sysml` Jupyter cell magic (install with `pip install sysmlpy[jupyter]`; see [Jupyter integration](#jupyter-integration))
|
|
44
78
|
|
|
45
79
|
## Installation
|
|
46
80
|
|
|
@@ -53,6 +87,52 @@ Multiple installation methods are supported by sysmlpy, including:
|
|
|
53
87
|
|  | PyPI | ``python -m pip install sysmlpy[cayley]`` (with Cayley graph DB) |
|
|
54
88
|
|  | GitHub | ``python -m pip install https://github.com/mycr0ft/sysmlpy/archive/refs/heads/main.zip`` |
|
|
55
89
|
|
|
90
|
+
## Jupyter integration
|
|
91
|
+
|
|
92
|
+
With the `jupyter` extra installed (`pip install sysmlpy[jupyter]`), the
|
|
93
|
+
`%%sysml` cell magic lets you write SysML v2 textual notation directly in
|
|
94
|
+
notebook cells, parsed and accumulated into a persistent session `Model`
|
|
95
|
+
exposed in the notebook namespace as `model` (alias `_sysml`):
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
# once per notebook
|
|
99
|
+
%load_ext sysmlpy.ipython_magic
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```sysml
|
|
103
|
+
%%sysml
|
|
104
|
+
package Vehicle {
|
|
105
|
+
part def Engine {
|
|
106
|
+
attribute fuelRate : Real;
|
|
107
|
+
}
|
|
108
|
+
part def Vehicle {
|
|
109
|
+
part engine : Vehicle::Engine;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Re-declaring a package merges at *package-member* granularity: elements
|
|
115
|
+
with the same `name` and `sysml_type` replace prior definitions; sibling
|
|
116
|
+
members are preserved. Line magics mirror the OMG Pilot Implementation
|
|
117
|
+
Jupyter kernel's command set:
|
|
118
|
+
|
|
119
|
+
| Magic | Purpose |
|
|
120
|
+
|-------|---------|
|
|
121
|
+
| `%sysml_reset` | Discard the session model |
|
|
122
|
+
| `%sysml_list [NAME]` | List packages, or find elements by exact declared name |
|
|
123
|
+
| `%sysml_show NAME [--json]` | `dump()` of the AST rooted at a named element |
|
|
124
|
+
| `%sysml_viz NAME... [--view V]` | PlantUML view (general\|interconnection\|action\|package\|tree) |
|
|
125
|
+
|
|
126
|
+
Cell options: `%%sysml --reset` (fresh model), `--file PATH` (parse from a
|
|
127
|
+
file; use `-` as the cell body), `--show` (print the round-tripped model).
|
|
128
|
+
Parse errors report to stderr with line/column and never discard the
|
|
129
|
+
session model. The full magic-command reference — the complete set of the
|
|
130
|
+
official [OMG Pilot Implementation Jupyter
|
|
131
|
+
kernel](https://github.com/Systems-Modeling/SysML-v2-Pilot-Implementation/tree/master/org.omg.sysml.jupyter.kernel)
|
|
132
|
+
and the mapping to this implementation — is in the
|
|
133
|
+
[sysml-copier](https://github.com/mycr0ft/sysml-copier) template's
|
|
134
|
+
`docs/sysml-magics.md`.
|
|
135
|
+
|
|
56
136
|
## Command-Line Tools
|
|
57
137
|
|
|
58
138
|
sysmlpy ships a CLI (`sysmlpy`, plus `sysmlpy-lsp` for editor support).
|
|
@@ -797,3 +877,4 @@ Two companion tools for the SysML v2 community, created by the same author:
|
|
|
797
877
|
|
|
798
878
|
## License
|
|
799
879
|
sysmlpy is released under the MIT license, hence allowing commercial use of the library.
|
|
880
|
+
|
|
@@ -1,34 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: sysmlpy
|
|
3
|
-
Version: 0.90.1
|
|
4
|
-
Summary:
|
|
5
|
-
License-File: LICENSE
|
|
6
|
-
Author: Jon R. Fox (mycr0ft)
|
|
7
|
-
Author-email: jon.fox@drfox.com
|
|
8
|
-
Requires-Python: >=3.9,<4.0
|
|
9
|
-
Classifier: Programming Language :: Python :: 3
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
-
Provides-Extra: cayley
|
|
17
|
-
Provides-Extra: graph
|
|
18
|
-
Provides-Extra: kuzu
|
|
19
|
-
Provides-Extra: sim
|
|
20
|
-
Provides-Extra: xlsx
|
|
21
|
-
Requires-Dist: antlr4-python3-runtime (>=4.13)
|
|
22
|
-
Requires-Dist: arrow (>=1.4.0,<2.0.0)
|
|
23
|
-
Requires-Dist: kuzu (>=0.7,<0.12) ; extra == "kuzu"
|
|
24
|
-
Requires-Dist: networkx (>=3.0) ; extra == "graph"
|
|
25
|
-
Requires-Dist: openpyxl (>=3.1) ; extra == "xlsx"
|
|
26
|
-
Requires-Dist: pint (>=0.24)
|
|
27
|
-
Requires-Dist: pyyaml (>=6.0)
|
|
28
|
-
Requires-Dist: requests (>=2.31) ; extra == "cayley"
|
|
29
|
-
Requires-Dist: transitions (>=0.9,<0.10) ; extra == "sim"
|
|
30
|
-
Description-Content-Type: text/markdown
|
|
31
|
-
|
|
32
1
|
# sysmlpy
|
|
33
2
|
[](https://badge.fury.io/py/sysmlpy)[](https://pypi.python.org/pypi/sysmlpy/)[](https://lbesson.mit-license.org/)
|
|
34
3
|
|
|
@@ -72,6 +41,7 @@ sysmlpy requires the following Python packages:
|
|
|
72
41
|
- [kuzu](https://kuzudb.com/) — embedded graph database with disk persistence and Cypher queries (install with `pip install sysmlpy[kuzu]`)
|
|
73
42
|
- [cayley](https://cayley.io/) — graph database via HTTP API, supports BoltDB/LevelDB backends (install with `pip install sysmlpy[cayley]`)
|
|
74
43
|
- [PlantUML](https://plantuml.com/) **v1.2020.0+** — diagram rendering (requires Java + PlantUML JAR or [PlantUML server](https://www.plantuml.com/plantuml)). The generator uses `<style>` blocks and `skinparam` stereotype selectors introduced in v1.2020.
|
|
44
|
+
- [IPython](https://ipython.org/) **v8.0+** — the `%%sysml` Jupyter cell magic (install with `pip install sysmlpy[jupyter]`; see [Jupyter integration](#jupyter-integration))
|
|
75
45
|
|
|
76
46
|
## Installation
|
|
77
47
|
|
|
@@ -84,6 +54,52 @@ Multiple installation methods are supported by sysmlpy, including:
|
|
|
84
54
|
|  | PyPI | ``python -m pip install sysmlpy[cayley]`` (with Cayley graph DB) |
|
|
85
55
|
|  | GitHub | ``python -m pip install https://github.com/mycr0ft/sysmlpy/archive/refs/heads/main.zip`` |
|
|
86
56
|
|
|
57
|
+
## Jupyter integration
|
|
58
|
+
|
|
59
|
+
With the `jupyter` extra installed (`pip install sysmlpy[jupyter]`), the
|
|
60
|
+
`%%sysml` cell magic lets you write SysML v2 textual notation directly in
|
|
61
|
+
notebook cells, parsed and accumulated into a persistent session `Model`
|
|
62
|
+
exposed in the notebook namespace as `model` (alias `_sysml`):
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
# once per notebook
|
|
66
|
+
%load_ext sysmlpy.ipython_magic
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
```sysml
|
|
70
|
+
%%sysml
|
|
71
|
+
package Vehicle {
|
|
72
|
+
part def Engine {
|
|
73
|
+
attribute fuelRate : Real;
|
|
74
|
+
}
|
|
75
|
+
part def Vehicle {
|
|
76
|
+
part engine : Vehicle::Engine;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Re-declaring a package merges at *package-member* granularity: elements
|
|
82
|
+
with the same `name` and `sysml_type` replace prior definitions; sibling
|
|
83
|
+
members are preserved. Line magics mirror the OMG Pilot Implementation
|
|
84
|
+
Jupyter kernel's command set:
|
|
85
|
+
|
|
86
|
+
| Magic | Purpose |
|
|
87
|
+
|-------|---------|
|
|
88
|
+
| `%sysml_reset` | Discard the session model |
|
|
89
|
+
| `%sysml_list [NAME]` | List packages, or find elements by exact declared name |
|
|
90
|
+
| `%sysml_show NAME [--json]` | `dump()` of the AST rooted at a named element |
|
|
91
|
+
| `%sysml_viz NAME... [--view V]` | PlantUML view (general\|interconnection\|action\|package\|tree) |
|
|
92
|
+
|
|
93
|
+
Cell options: `%%sysml --reset` (fresh model), `--file PATH` (parse from a
|
|
94
|
+
file; use `-` as the cell body), `--show` (print the round-tripped model).
|
|
95
|
+
Parse errors report to stderr with line/column and never discard the
|
|
96
|
+
session model. The full magic-command reference — the complete set of the
|
|
97
|
+
official [OMG Pilot Implementation Jupyter
|
|
98
|
+
kernel](https://github.com/Systems-Modeling/SysML-v2-Pilot-Implementation/tree/master/org.omg.sysml.jupyter.kernel)
|
|
99
|
+
and the mapping to this implementation — is in the
|
|
100
|
+
[sysml-copier](https://github.com/mycr0ft/sysml-copier) template's
|
|
101
|
+
`docs/sysml-magics.md`.
|
|
102
|
+
|
|
87
103
|
## Command-Line Tools
|
|
88
104
|
|
|
89
105
|
sysmlpy ships a CLI (`sysmlpy`, plus `sysmlpy-lsp` for editor support).
|
|
@@ -828,4 +844,3 @@ Two companion tools for the SysML v2 community, created by the same author:
|
|
|
828
844
|
|
|
829
845
|
## License
|
|
830
846
|
sysmlpy is released under the MIT license, hence allowing commercial use of the library.
|
|
831
|
-
|
|
@@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "sysmlpy"
|
|
9
|
-
version = "0.
|
|
9
|
+
version = "0.91.0"
|
|
10
10
|
description = ""
|
|
11
11
|
authors = [{ name = "Jon R. Fox (mycr0ft)", email = "jon.fox@drfox.com" }]
|
|
12
12
|
readme = "README.md"
|
|
@@ -23,6 +23,7 @@ openpyxl = { version = ">=3.1", optional = true }
|
|
|
23
23
|
arrow = "^1.4.0"
|
|
24
24
|
transitions = {version = "^0.9", optional = true}
|
|
25
25
|
requests = { version = ">=2.31", optional = true }
|
|
26
|
+
ipython = { version = ">=8.0", optional = true }
|
|
26
27
|
|
|
27
28
|
[tool.poetry.extras]
|
|
28
29
|
graph = ["networkx"]
|
|
@@ -30,6 +31,7 @@ kuzu = ["kuzu"]
|
|
|
30
31
|
xlsx = ["openpyxl"]
|
|
31
32
|
sim = ["transitions"]
|
|
32
33
|
cayley = ["requests"]
|
|
34
|
+
jupyter = ["ipython"]
|
|
33
35
|
|
|
34
36
|
[tool.poetry.scripts]
|
|
35
37
|
sysmlpy = "sysmlpy.__main__:main"
|
|
@@ -34,7 +34,7 @@ __all__ = [
|
|
|
34
34
|
"render_state_transition_view_svg", "boxes_view",
|
|
35
35
|
]
|
|
36
36
|
__author__ = "Jon Fox"
|
|
37
|
-
__version__ = "0.
|
|
37
|
+
__version__ = "0.91.0"
|
|
38
38
|
|
|
39
39
|
from sysmlpy.usage import (
|
|
40
40
|
Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"""%%sysml cell magic: parse and accumulate SysML v2 models in IPython/Jupyter.
|
|
2
|
+
|
|
3
|
+
Load once per notebook:
|
|
4
|
+
|
|
5
|
+
%load_ext sysmlpy.ipython_magic
|
|
6
|
+
|
|
7
|
+
Then write SysML v2 textual notation in `%%sysml` cells:
|
|
8
|
+
|
|
9
|
+
%%sysml
|
|
10
|
+
package Vehicle {
|
|
11
|
+
part def Engine {
|
|
12
|
+
attribute fuelRate : Real;
|
|
13
|
+
}
|
|
14
|
+
part def Vehicle {
|
|
15
|
+
part engine : Vehicle::Engine;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
The parsed model accumulates across cells into a persistent `Model` exposed in
|
|
20
|
+
the notebook namespace as `model` (alias `_sysml`). Re-declaring a package
|
|
21
|
+
merges at package-member granularity: a re-declared element (matched by name +
|
|
22
|
+
sysml_type) replaces the prior definition; other members are preserved.
|
|
23
|
+
|
|
24
|
+
Line magics (analogues of the OMG Pilot Implementation kernel commands —
|
|
25
|
+
see docs/sysml-magics.md in sysml-copier or the module docstrings):
|
|
26
|
+
|
|
27
|
+
%sysml_reset discard the session model
|
|
28
|
+
%sysml_list [NAME] list packages, or find elements by exact name
|
|
29
|
+
%sysml_show NAME [--json] print the AST rooted at a named element
|
|
30
|
+
%sysml_viz NAME [--view V] PlantUML view of a named element
|
|
31
|
+
|
|
32
|
+
Requires the `jupyter` extra: pip install sysmlpy[jupyter]
|
|
33
|
+
"""
|
|
34
|
+
from __future__ import annotations
|
|
35
|
+
|
|
36
|
+
from pathlib import Path
|
|
37
|
+
|
|
38
|
+
from IPython.core.magic import Magics, cell_magic, line_magic, magics_class
|
|
39
|
+
from IPython.core.magic_arguments import (
|
|
40
|
+
argument,
|
|
41
|
+
magic_arguments,
|
|
42
|
+
parse_argstring,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@magics_class
|
|
47
|
+
class SysMLMagics(Magics):
|
|
48
|
+
def __init__(self, shell):
|
|
49
|
+
super().__init__(shell)
|
|
50
|
+
self.model = None # persistent session Model
|
|
51
|
+
|
|
52
|
+
# -- helpers -----------------------------------------------------------
|
|
53
|
+
def _publish(self):
|
|
54
|
+
"""(Re-)bind the session model into the user namespace."""
|
|
55
|
+
self.shell.push({"model": self.model, "_sysml": self.model})
|
|
56
|
+
|
|
57
|
+
def _analyze(self, model, source: str) -> list[str]:
|
|
58
|
+
"""Best-effort semantic diagnostics (analyzer API may vary)."""
|
|
59
|
+
out: list[str] = []
|
|
60
|
+
try:
|
|
61
|
+
from sysmlpy import SemanticAnalyzer
|
|
62
|
+
|
|
63
|
+
result = SemanticAnalyzer(model).analyze(source)
|
|
64
|
+
for issue in getattr(result, "issues", []) or []:
|
|
65
|
+
out.append(f"[semantic] [{issue.code}] {issue.message}")
|
|
66
|
+
except Exception:
|
|
67
|
+
pass
|
|
68
|
+
return out
|
|
69
|
+
|
|
70
|
+
def _merge(self, model) -> int:
|
|
71
|
+
"""Merge freshly parsed packages into the session model.
|
|
72
|
+
|
|
73
|
+
Member-granularity merge: within a package of the same name, a
|
|
74
|
+
re-declared element (matched by name+sysml_type) replaces the prior
|
|
75
|
+
definition; other members are preserved. New packages are appended.
|
|
76
|
+
Returns the number of replaced members.
|
|
77
|
+
"""
|
|
78
|
+
if self.model is None:
|
|
79
|
+
self.model = model
|
|
80
|
+
return 0
|
|
81
|
+
replaced = 0
|
|
82
|
+
for pkg in getattr(model, "packages", []):
|
|
83
|
+
existing_pkg = next(
|
|
84
|
+
(c for c in self.model.children
|
|
85
|
+
if getattr(c, "name", None) == pkg.name),
|
|
86
|
+
None,
|
|
87
|
+
)
|
|
88
|
+
if existing_pkg is None:
|
|
89
|
+
self.model.children.append(pkg)
|
|
90
|
+
continue
|
|
91
|
+
for member in getattr(pkg, "children", []):
|
|
92
|
+
key = (getattr(member, "name", None),
|
|
93
|
+
getattr(member, "sysml_type", None))
|
|
94
|
+
children = existing_pkg.children
|
|
95
|
+
for i, old in enumerate(children):
|
|
96
|
+
if (getattr(old, "name", None),
|
|
97
|
+
getattr(old, "sysml_type", None)) == key:
|
|
98
|
+
children[i] = member
|
|
99
|
+
replaced += 1
|
|
100
|
+
break
|
|
101
|
+
else:
|
|
102
|
+
children.append(member)
|
|
103
|
+
return replaced
|
|
104
|
+
|
|
105
|
+
# -- the cell magic ----------------------------------------------------
|
|
106
|
+
@magic_arguments()
|
|
107
|
+
@argument("--reset", action="store_true", help="discard the session model first")
|
|
108
|
+
@argument("--file", default=None, metavar="PATH",
|
|
109
|
+
help="parse SysML from PATH instead of the cell body (use '-' as the body)")
|
|
110
|
+
@argument("--show", action="store_true",
|
|
111
|
+
help="print the round-tripped model text after merge")
|
|
112
|
+
@cell_magic
|
|
113
|
+
def sysml(self, line: str, cell: str):
|
|
114
|
+
"""Parse a cell of SysML v2 textual notation into the session model."""
|
|
115
|
+
import sys
|
|
116
|
+
|
|
117
|
+
args = parse_argstring(self.sysml, line)
|
|
118
|
+
|
|
119
|
+
if args.reset:
|
|
120
|
+
self.model = None
|
|
121
|
+
|
|
122
|
+
if args.file:
|
|
123
|
+
source = Path(args.file).read_text(encoding="utf-8")
|
|
124
|
+
else:
|
|
125
|
+
source = cell
|
|
126
|
+
|
|
127
|
+
from sysmlpy import parse
|
|
128
|
+
|
|
129
|
+
model, errors = parse(source)
|
|
130
|
+
if errors:
|
|
131
|
+
for e in errors:
|
|
132
|
+
print(f"[parse] {e}", file=sys.stderr)
|
|
133
|
+
return None
|
|
134
|
+
|
|
135
|
+
replaced = self._merge(model)
|
|
136
|
+
for w in self._analyze(model, source):
|
|
137
|
+
print(w, file=sys.stderr)
|
|
138
|
+
self._publish()
|
|
139
|
+
|
|
140
|
+
if args.show:
|
|
141
|
+
print(str(self.model))
|
|
142
|
+
total = len(getattr(self.model, "packages", []))
|
|
143
|
+
note = f", {replaced} redefined" if replaced else ""
|
|
144
|
+
print(f"sysml: model updated — {total} package(s) loaded{note}")
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
# -- line magics (OMG kernel command analogues) ------------------------
|
|
148
|
+
@line_magic
|
|
149
|
+
def sysml_reset(self, line: str = ""):
|
|
150
|
+
"""%sysml_reset — discard the persistent SysML session model."""
|
|
151
|
+
self.model = None
|
|
152
|
+
self.shell.user_ns.pop("model", None)
|
|
153
|
+
self.shell.user_ns.pop("_sysml", None)
|
|
154
|
+
print("sysml: session model discarded")
|
|
155
|
+
|
|
156
|
+
@line_magic
|
|
157
|
+
def sysml_list(self, line: str = ""):
|
|
158
|
+
"""%sysml_list [NAME] — list packages, or find elements by exact name.
|
|
159
|
+
|
|
160
|
+
Without an argument, lists top-level packages. With a name, lists all
|
|
161
|
+
elements whose declared name matches exactly (any depth). Use
|
|
162
|
+
model.find(sysml_type=...) from Python for richer queries.
|
|
163
|
+
"""
|
|
164
|
+
if self.model is None:
|
|
165
|
+
print("sysml: no model loaded — run a %%sysml cell first")
|
|
166
|
+
return None
|
|
167
|
+
name = line.strip() or None
|
|
168
|
+
if name is None:
|
|
169
|
+
for pkg in getattr(self.model, "packages", []):
|
|
170
|
+
print(pkg.name)
|
|
171
|
+
return None
|
|
172
|
+
results = self.model.find(name)
|
|
173
|
+
if not results:
|
|
174
|
+
print(f"sysml: no elements named {name!r}")
|
|
175
|
+
for r in results:
|
|
176
|
+
print(f"{r.sysml_type:14} {r.name}")
|
|
177
|
+
return None
|
|
178
|
+
|
|
179
|
+
@magic_arguments()
|
|
180
|
+
@argument("--json", action="store_true",
|
|
181
|
+
help="JSON representation (dump() output piped through json when possible)")
|
|
182
|
+
@argument("name", help="element name (exact declared name)")
|
|
183
|
+
@line_magic
|
|
184
|
+
def sysml_show(self, line: str):
|
|
185
|
+
"""%sysml_show NAME [--json] — print the AST rooted at a named element."""
|
|
186
|
+
import json as _json
|
|
187
|
+
|
|
188
|
+
args = parse_argstring(self.sysml_show, line)
|
|
189
|
+
if self.model is None:
|
|
190
|
+
print("sysml: no model loaded — run a %%sysml cell first")
|
|
191
|
+
return None
|
|
192
|
+
results = self.model.find(args.name)
|
|
193
|
+
if not results:
|
|
194
|
+
print(f"sysml: no elements named {args.name!r}")
|
|
195
|
+
return None
|
|
196
|
+
for r in results:
|
|
197
|
+
text = r.dump() if hasattr(r, "dump") else str(r)
|
|
198
|
+
if args.json:
|
|
199
|
+
try:
|
|
200
|
+
parsed = _json.loads(text)
|
|
201
|
+
print(_json.dumps(parsed, indent=2))
|
|
202
|
+
except (_json.JSONDecodeError, TypeError):
|
|
203
|
+
print(text)
|
|
204
|
+
else:
|
|
205
|
+
print(text)
|
|
206
|
+
return None
|
|
207
|
+
|
|
208
|
+
@magic_arguments()
|
|
209
|
+
@argument("--view", default="general", metavar="VIEW",
|
|
210
|
+
help="general|interconnection|action|package|tree")
|
|
211
|
+
@argument("names", nargs="+", help="element name(s) to visualize")
|
|
212
|
+
@line_magic
|
|
213
|
+
def sysml_viz(self, line: str):
|
|
214
|
+
"""%sysml_viz NAME [--view VIEW] — PlantUML view of a named element."""
|
|
215
|
+
args = parse_argstring(self.sysml_viz, line)
|
|
216
|
+
if self.model is None:
|
|
217
|
+
print("sysml: no model loaded — run a %%sysml cell first")
|
|
218
|
+
return None
|
|
219
|
+
|
|
220
|
+
from sysmlpy import plantuml as pl
|
|
221
|
+
|
|
222
|
+
views = {
|
|
223
|
+
"general": pl.as_general_view,
|
|
224
|
+
"interconnection": pl.as_interconnection_view,
|
|
225
|
+
"action": pl.as_action_flow_view,
|
|
226
|
+
"package": pl.as_package_view,
|
|
227
|
+
"tree": pl.as_tree_diagram,
|
|
228
|
+
}
|
|
229
|
+
view = args.view.lower()
|
|
230
|
+
func = views.get(view)
|
|
231
|
+
if func is None:
|
|
232
|
+
print(f"sysml: unknown view {args.view!r}; "
|
|
233
|
+
f"one of {', '.join(views)}")
|
|
234
|
+
return None
|
|
235
|
+
for name in args.names:
|
|
236
|
+
results = self.model.find(name)
|
|
237
|
+
if not results:
|
|
238
|
+
print(f"sysml: no elements named {name!r}")
|
|
239
|
+
continue
|
|
240
|
+
for r in results:
|
|
241
|
+
try:
|
|
242
|
+
print(func(r, style="bw"))
|
|
243
|
+
except Exception as e:
|
|
244
|
+
print(f"sysml: could not render {name!r}: {e}")
|
|
245
|
+
return None
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def load_ipython_extension(ipython):
|
|
249
|
+
magics = SysMLMagics(ipython)
|
|
250
|
+
ipython.register_magics(magics)
|
|
251
|
+
ipython.user_ns.setdefault("_sysml_magics", magics)
|
|
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.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp
RENAMED
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py
RENAMED
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/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
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml
RENAMED
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml
RENAMED
|
File without changes
|
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/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.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml
RENAMED
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml
RENAMED
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml
RENAMED
|
File without changes
|
|
File without changes
|
{sysmlpy-0.90.1 → sysmlpy-0.91.0}/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.90.1 → sysmlpy-0.91.0}/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
|