sysmlpy 0.12.2__tar.gz → 0.15.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.12.2 → sysmlpy-0.15.0}/PKG-INFO +96 -2
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/README.md +93 -1
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/pyproject.toml +4 -2
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/__init__.py +7 -3
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/definition.py +335 -3
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/classes.py +5 -1
- sysmlpy-0.15.0/src/sysmlpy/plantuml.py +706 -0
- sysmlpy-0.15.0/src/sysmlpy/store.py +1432 -0
- sysmlpy-0.15.0/src/sysmlpy/us_customary_units.txt +36 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/usage.py +604 -6
- sysmlpy-0.15.0/src/sysmlpy/validator.py +606 -0
- sysmlpy-0.12.2/src/sysmlpy/store.py +0 -547
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/LICENSE +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/__main__.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/README.md +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr_parser.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/antlr_visitor.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/examples/attribute_values.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/examples/part_attributes.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/examples/tuples_sequences.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/formatting.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/LICENSE +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/README.md +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/__init__.py +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/States.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
- {sysmlpy-0.12.2 → sysmlpy-0.15.0}/src/sysmlpy/navigate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sysmlpy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.15.0
|
|
4
4
|
Summary: SysML v2.0 Parser
|
|
5
5
|
License: MIT License
|
|
6
6
|
|
|
@@ -32,7 +32,9 @@ Classifier: Programming Language :: Python :: 3
|
|
|
32
32
|
Classifier: License :: OSI Approved :: MIT License
|
|
33
33
|
Classifier: Operating System :: OS Independent
|
|
34
34
|
Provides-Extra: graph
|
|
35
|
+
Provides-Extra: kuzu
|
|
35
36
|
Requires-Dist: antlr4-python3-runtime (>=4.13)
|
|
37
|
+
Requires-Dist: kuzu (>=0.7,<0.12) ; extra == "kuzu"
|
|
36
38
|
Requires-Dist: networkx (>=3.0) ; extra == "graph"
|
|
37
39
|
Requires-Dist: pint (>=0.24)
|
|
38
40
|
Requires-Dist: pyyaml (>=6.0)
|
|
@@ -56,7 +58,9 @@ The project had diverged so much from sysml2py that a new name, sysmlpy, was sel
|
|
|
56
58
|
|
|
57
59
|

|
|
58
60
|
|
|
59
|
-
**v0.
|
|
61
|
+
**v0.14.0:** 100% conformance test pass rate (123/123). Storage abstraction layer with in-memory and NetworkX graph backends. Convenience functions: find_all, count, traverse, to_dict, to_graph, path_between.
|
|
62
|
+
|
|
63
|
+
**v0.14.1:** ISQ unit validation (300+ type-to-dimension mappings), US Customary unit support (21 custom definitions), PlantUML diagram generation with stereotype-based styling, strict import visibility enforcement, and comprehensive API documentation.
|
|
60
64
|
|
|
61
65
|
## Requirements
|
|
62
66
|
sysmlpy requires the following Python packages:
|
|
@@ -66,6 +70,8 @@ sysmlpy requires the following Python packages:
|
|
|
66
70
|
|
|
67
71
|
### Optional Dependencies
|
|
68
72
|
- [networkx](https://networkx.org/) — graph analysis backend (install with `pip install sysmlpy[graph]`)
|
|
73
|
+
- [kuzu](https://kuzudb.com/) — embedded graph database with disk persistence and Cypher queries (install with `pip install sysmlpy[kuzu]`)
|
|
74
|
+
- [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.
|
|
69
75
|
|
|
70
76
|
## Installation
|
|
71
77
|
|
|
@@ -221,6 +227,94 @@ print(tree.dump())
|
|
|
221
227
|
|
|
222
228
|
**61% of the 56 grammar round-trip tests currently pass** (34/56), covering packages, parts, items, ports, interfaces, binding connectors, flow connections, all action forms (definition, shorthand, succession, decomposition), expressions, calculations, and constraints.
|
|
223
229
|
|
|
230
|
+
## PlantUML Visualizations
|
|
231
|
+
|
|
232
|
+
Generate SysML v2 structure diagrams from parsed models using the built-in PlantUML generator. Definitions render with sharp corners and usage elements with rounded corners. Relationships are differentiated by arrow style, thickness, and color — following the [official SysML v2 Pilot Implementation](https://github.com/Systems-Modeling/SysML-v2-Release) approach.
|
|
233
|
+
|
|
234
|
+
```python
|
|
235
|
+
from sysmlpy import loads
|
|
236
|
+
from sysmlpy.plantuml import PlantUMLGenerator
|
|
237
|
+
|
|
238
|
+
text = """package Vehicle {
|
|
239
|
+
part def Wheel {
|
|
240
|
+
attribute radius : LengthValue;
|
|
241
|
+
attribute pressure : PressureValue;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
part def BrakeSystem {
|
|
245
|
+
attribute padThickness : LengthValue;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
part def VehicleAssembly {
|
|
249
|
+
part frontLeft : Wheel;
|
|
250
|
+
part frontRight : Wheel;
|
|
251
|
+
part brakes : BrakeSystem;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
part myVehicle : VehicleAssembly;
|
|
255
|
+
}"""
|
|
256
|
+
|
|
257
|
+
model = loads(text)
|
|
258
|
+
gen = PlantUMLGenerator(model, title="Vehicle Structure")
|
|
259
|
+
print(gen.generate())
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Produces PlantUML source that renders as:
|
|
263
|
+
|
|
264
|
+
```plantuml
|
|
265
|
+
@startuml
|
|
266
|
+
skinparam RoundCorner 0
|
|
267
|
+
skinparam rectangle<<(D,#8B4513) part def>> {
|
|
268
|
+
RoundCorner 0
|
|
269
|
+
BackgroundColor #FFF8F0
|
|
270
|
+
BorderColor #8B4513
|
|
271
|
+
}
|
|
272
|
+
skinparam rectangle<<(P,#32CD32) part>> {
|
|
273
|
+
RoundCorner 15
|
|
274
|
+
BackgroundColor #F0FFF0
|
|
275
|
+
BorderColor #32CD32
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
title Vehicle Structure
|
|
279
|
+
|
|
280
|
+
rectangle "Wheel" as Wheel <<(D,#8B4513) part def>>
|
|
281
|
+
rectangle "BrakeSystem" as BrakeSystem <<(D,#8B4513) part def>>
|
|
282
|
+
rectangle "VehicleAssembly" as VehicleAssembly <<(D,#8B4513) part def>>
|
|
283
|
+
rectangle "myVehicle" as myVehicle <<(P,#32CD32) part>>
|
|
284
|
+
|
|
285
|
+
VehicleAssembly *-- frontLeft : owns
|
|
286
|
+
VehicleAssembly *-- frontRight : owns
|
|
287
|
+
VehicleAssembly *-- brakes : owns
|
|
288
|
+
myVehicle --:|> VehicleAssembly : types
|
|
289
|
+
|
|
290
|
+
legend right
|
|
291
|
+
<b>Legend</b>
|
|
292
|
+
|= Element |= Notation |
|
|
293
|
+
| <<(D,#8B4513) part def>> | Definition (type) |
|
|
294
|
+
| <<(P,#32CD32) part>> | Usage (instance) |
|
|
295
|
+
| --:|> | Feature typing |
|
|
296
|
+
| *-- | Composite containment |
|
|
297
|
+
endlegend
|
|
298
|
+
@enduml
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Filtering and Focus
|
|
302
|
+
|
|
303
|
+
The generator supports filtering to highlight specific elements:
|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
# Show only elements related to 'myVehicle'
|
|
307
|
+
gen = PlantUMLGenerator(model, focus="myVehicle")
|
|
308
|
+
|
|
309
|
+
# Show a custom set of elements
|
|
310
|
+
gen = PlantUMLGenerator(model, elements=["Wheel", "BrakeSystem"])
|
|
311
|
+
|
|
312
|
+
# Limit nesting depth
|
|
313
|
+
gen = PlantUMLGenerator(model, max_depth=2)
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
See [`docs/plantuml-examples/`](docs/plantuml-examples/) for 9 rendered examples covering usage vs definition, relationships, vehicle structure, requirements, interconnections, state machines, and activity diagrams.
|
|
317
|
+
|
|
224
318
|
## Conformance
|
|
225
319
|
|
|
226
320
|
**100% of 123 OMG XPect conformance tests pass** (123/123).
|
|
@@ -14,7 +14,9 @@ The project had diverged so much from sysml2py that a new name, sysmlpy, was sel
|
|
|
14
14
|
|
|
15
15
|

|
|
16
16
|
|
|
17
|
-
**v0.
|
|
17
|
+
**v0.14.0:** 100% conformance test pass rate (123/123). Storage abstraction layer with in-memory and NetworkX graph backends. Convenience functions: find_all, count, traverse, to_dict, to_graph, path_between.
|
|
18
|
+
|
|
19
|
+
**v0.14.1:** ISQ unit validation (300+ type-to-dimension mappings), US Customary unit support (21 custom definitions), PlantUML diagram generation with stereotype-based styling, strict import visibility enforcement, and comprehensive API documentation.
|
|
18
20
|
|
|
19
21
|
## Requirements
|
|
20
22
|
sysmlpy requires the following Python packages:
|
|
@@ -24,6 +26,8 @@ sysmlpy requires the following Python packages:
|
|
|
24
26
|
|
|
25
27
|
### Optional Dependencies
|
|
26
28
|
- [networkx](https://networkx.org/) — graph analysis backend (install with `pip install sysmlpy[graph]`)
|
|
29
|
+
- [kuzu](https://kuzudb.com/) — embedded graph database with disk persistence and Cypher queries (install with `pip install sysmlpy[kuzu]`)
|
|
30
|
+
- [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.
|
|
27
31
|
|
|
28
32
|
## Installation
|
|
29
33
|
|
|
@@ -179,6 +183,94 @@ print(tree.dump())
|
|
|
179
183
|
|
|
180
184
|
**61% of the 56 grammar round-trip tests currently pass** (34/56), covering packages, parts, items, ports, interfaces, binding connectors, flow connections, all action forms (definition, shorthand, succession, decomposition), expressions, calculations, and constraints.
|
|
181
185
|
|
|
186
|
+
## PlantUML Visualizations
|
|
187
|
+
|
|
188
|
+
Generate SysML v2 structure diagrams from parsed models using the built-in PlantUML generator. Definitions render with sharp corners and usage elements with rounded corners. Relationships are differentiated by arrow style, thickness, and color — following the [official SysML v2 Pilot Implementation](https://github.com/Systems-Modeling/SysML-v2-Release) approach.
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
from sysmlpy import loads
|
|
192
|
+
from sysmlpy.plantuml import PlantUMLGenerator
|
|
193
|
+
|
|
194
|
+
text = """package Vehicle {
|
|
195
|
+
part def Wheel {
|
|
196
|
+
attribute radius : LengthValue;
|
|
197
|
+
attribute pressure : PressureValue;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
part def BrakeSystem {
|
|
201
|
+
attribute padThickness : LengthValue;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
part def VehicleAssembly {
|
|
205
|
+
part frontLeft : Wheel;
|
|
206
|
+
part frontRight : Wheel;
|
|
207
|
+
part brakes : BrakeSystem;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
part myVehicle : VehicleAssembly;
|
|
211
|
+
}"""
|
|
212
|
+
|
|
213
|
+
model = loads(text)
|
|
214
|
+
gen = PlantUMLGenerator(model, title="Vehicle Structure")
|
|
215
|
+
print(gen.generate())
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Produces PlantUML source that renders as:
|
|
219
|
+
|
|
220
|
+
```plantuml
|
|
221
|
+
@startuml
|
|
222
|
+
skinparam RoundCorner 0
|
|
223
|
+
skinparam rectangle<<(D,#8B4513) part def>> {
|
|
224
|
+
RoundCorner 0
|
|
225
|
+
BackgroundColor #FFF8F0
|
|
226
|
+
BorderColor #8B4513
|
|
227
|
+
}
|
|
228
|
+
skinparam rectangle<<(P,#32CD32) part>> {
|
|
229
|
+
RoundCorner 15
|
|
230
|
+
BackgroundColor #F0FFF0
|
|
231
|
+
BorderColor #32CD32
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
title Vehicle Structure
|
|
235
|
+
|
|
236
|
+
rectangle "Wheel" as Wheel <<(D,#8B4513) part def>>
|
|
237
|
+
rectangle "BrakeSystem" as BrakeSystem <<(D,#8B4513) part def>>
|
|
238
|
+
rectangle "VehicleAssembly" as VehicleAssembly <<(D,#8B4513) part def>>
|
|
239
|
+
rectangle "myVehicle" as myVehicle <<(P,#32CD32) part>>
|
|
240
|
+
|
|
241
|
+
VehicleAssembly *-- frontLeft : owns
|
|
242
|
+
VehicleAssembly *-- frontRight : owns
|
|
243
|
+
VehicleAssembly *-- brakes : owns
|
|
244
|
+
myVehicle --:|> VehicleAssembly : types
|
|
245
|
+
|
|
246
|
+
legend right
|
|
247
|
+
<b>Legend</b>
|
|
248
|
+
|= Element |= Notation |
|
|
249
|
+
| <<(D,#8B4513) part def>> | Definition (type) |
|
|
250
|
+
| <<(P,#32CD32) part>> | Usage (instance) |
|
|
251
|
+
| --:|> | Feature typing |
|
|
252
|
+
| *-- | Composite containment |
|
|
253
|
+
endlegend
|
|
254
|
+
@enduml
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Filtering and Focus
|
|
258
|
+
|
|
259
|
+
The generator supports filtering to highlight specific elements:
|
|
260
|
+
|
|
261
|
+
```python
|
|
262
|
+
# Show only elements related to 'myVehicle'
|
|
263
|
+
gen = PlantUMLGenerator(model, focus="myVehicle")
|
|
264
|
+
|
|
265
|
+
# Show a custom set of elements
|
|
266
|
+
gen = PlantUMLGenerator(model, elements=["Wheel", "BrakeSystem"])
|
|
267
|
+
|
|
268
|
+
# Limit nesting depth
|
|
269
|
+
gen = PlantUMLGenerator(model, max_depth=2)
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
See [`docs/plantuml-examples/`](docs/plantuml-examples/) for 9 rendered examples covering usage vs definition, relationships, vehicle structure, requirements, interconnections, state machines, and activity diagrams.
|
|
273
|
+
|
|
182
274
|
## Conformance
|
|
183
275
|
|
|
184
276
|
**100% of 123 OMG XPect conformance tests pass** (123/123).
|
|
@@ -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.15.0"
|
|
10
10
|
description = "SysML v2.0 Parser"
|
|
11
11
|
authors = [
|
|
12
12
|
{ name="Jon R. Fox (mycr0ft)", email="jon.fox@drfox.com" },
|
|
@@ -114,7 +114,7 @@ build_command = "pip install poetry && poetry build"
|
|
|
114
114
|
|
|
115
115
|
[tool.poetry]
|
|
116
116
|
name = "sysmlpy"
|
|
117
|
-
version = "0.
|
|
117
|
+
version = "0.15.0"
|
|
118
118
|
description = ""
|
|
119
119
|
authors = ["Jon R. Fox (mycr0ft) <jon.fox@drfox.com>"]
|
|
120
120
|
readme = "README.md"
|
|
@@ -126,9 +126,11 @@ pint = ">=0.24"
|
|
|
126
126
|
pyyaml = ">=6.0"
|
|
127
127
|
antlr4-python3-runtime = ">=4.13"
|
|
128
128
|
networkx = { version = ">=3.0", optional = true }
|
|
129
|
+
kuzu = { version = ">=0.7,<0.12", optional = true }
|
|
129
130
|
|
|
130
131
|
[tool.poetry.extras]
|
|
131
132
|
graph = ["networkx"]
|
|
133
|
+
kuzu = ["kuzu"]
|
|
132
134
|
|
|
133
135
|
[tool.poetry.scripts]
|
|
134
136
|
sysmlpy = "sysmlpy.__main__:main"
|
|
@@ -10,10 +10,11 @@ Uses the ANTLR4 parser for full SysML v2 grammar support.
|
|
|
10
10
|
__all__ = [
|
|
11
11
|
"load", "loads", "load_grammar", "load_antlr", "load_grammar_antlr",
|
|
12
12
|
"Searchable",
|
|
13
|
-
"Store", "InMemoryStore", "NetworkXStore", "create_store", "new_id",
|
|
13
|
+
"Store", "InMemoryStore", "NetworkXStore", "KuzuStore", "create_store", "new_id",
|
|
14
|
+
"to_plantuml", "PlantUMLGenerator",
|
|
14
15
|
]
|
|
15
16
|
__author__ = "Jon Fox"
|
|
16
|
-
__version__ = "0.
|
|
17
|
+
__version__ = "0.15.0"
|
|
17
18
|
|
|
18
19
|
from sysmlpy.usage import (
|
|
19
20
|
Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
|
|
@@ -25,7 +26,7 @@ from sysmlpy.usage import (
|
|
|
25
26
|
|
|
26
27
|
from sysmlpy.definition import Model, Package
|
|
27
28
|
from sysmlpy.navigate import Searchable
|
|
28
|
-
from sysmlpy.store import Store, InMemoryStore, NetworkXStore, create_store, new_id
|
|
29
|
+
from sysmlpy.store import Store, InMemoryStore, NetworkXStore, KuzuStore, create_store, new_id
|
|
29
30
|
|
|
30
31
|
from sysmlpy.usage import ureg
|
|
31
32
|
|
|
@@ -224,3 +225,6 @@ def load_antlr(fp):
|
|
|
224
225
|
return loads(fp.read())
|
|
225
226
|
|
|
226
227
|
|
|
228
|
+
from sysmlpy.plantuml import to_plantuml, PlantUMLGenerator
|
|
229
|
+
|
|
230
|
+
|