sysmlpy 0.90.0__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.0/README.md → sysmlpy-0.91.0/PKG-INFO +81 -0
- sysmlpy-0.90.0/PKG-INFO → sysmlpy-0.91.0/README.md +47 -32
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/pyproject.toml +3 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/__init__.py +1 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr_parser.py +0 -9
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/boxes_view.py +1 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/definition.py +3 -34
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/dfa_cache.py +0 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/evaluator.py +1 -12
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/examples/attribute_values.py +1 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/examples/tuples_sequences.py +2 -3
- sysmlpy-0.91.0/src/sysmlpy/ipython_magic.py +251 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/plantuml.py +0 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/project.py +1 -2
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/semantic.py +1 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/spreadsheet.py +1 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/store.py +1 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/traceability.py +0 -1
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/usage.py +0 -50
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/LICENSE +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/__main__.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/README.md +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/antlr_visitor.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/diff.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/examples/part_attributes.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/formatting.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/grammar/classes.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/interchange.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/LICENSE +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/README.md +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/__init__.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/States.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/lsp/__init__.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/lsp/__main__.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/lsp/protocol.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/lsp/server.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/lsp/stdio.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/navigate.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/sim.py +0 -0
- {sysmlpy-0.90.0 → sysmlpy-0.91.0}/src/sysmlpy/us_customary_units.txt +0 -0
- {sysmlpy-0.90.0 → 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.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: 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,
|
|
@@ -5,8 +5,6 @@ ANTLR4-based SysML v2.0 parser module.
|
|
|
5
5
|
This module provides an alternative parser to textX, using ANTLR4 grammar
|
|
6
6
|
generated from the OMG SysML v2 specification (2026-05 release).
|
|
7
7
|
"""
|
|
8
|
-
import sys
|
|
9
|
-
import os
|
|
10
8
|
import warnings
|
|
11
9
|
|
|
12
10
|
from antlr4 import InputStream, CommonTokenStream
|
|
@@ -96,9 +94,6 @@ def parse(source, library=None, recover=False, prediction_mode="sll",
|
|
|
96
94
|
If ``recover`` is False and the source contains syntax errors
|
|
97
95
|
(after both parse stages).
|
|
98
96
|
"""
|
|
99
|
-
from pathlib import Path
|
|
100
|
-
|
|
101
|
-
# Handle string or file input
|
|
102
97
|
if hasattr(source, 'read'):
|
|
103
98
|
content = source.read()
|
|
104
99
|
else:
|
|
@@ -155,13 +150,11 @@ def _parse_tree(content, recover=False, prediction_mode="sll"):
|
|
|
155
150
|
# any error means we redo the whole parse in LL mode.
|
|
156
151
|
from antlr4.error.ErrorStrategy import BailErrorStrategy
|
|
157
152
|
tree = None
|
|
158
|
-
sll_errors = []
|
|
159
153
|
try:
|
|
160
154
|
parser._errHandler = BailErrorStrategy()
|
|
161
155
|
tree = parser.rootNamespace()
|
|
162
156
|
except Exception:
|
|
163
157
|
tree = None
|
|
164
|
-
sll_errors = ["<sll>"]
|
|
165
158
|
if tree is not None and not error_listener.errors:
|
|
166
159
|
# ── fast path succeeded ──────────────────────────────────
|
|
167
160
|
_maybe_save_dfa_cache()
|
|
@@ -226,8 +219,6 @@ def _rescue_constraint_bodies(content, language="English"):
|
|
|
226
219
|
Constraints whose body contains ``*/`` cannot be wrapped in a comment
|
|
227
220
|
and are left untouched (the original error stands).
|
|
228
221
|
"""
|
|
229
|
-
import re as _re
|
|
230
|
-
|
|
231
222
|
spans = []
|
|
232
223
|
try:
|
|
233
224
|
lexer = SysMLv2Lexer(InputStream(content))
|
|
@@ -36,7 +36,7 @@ from typing import Any, Optional, Union
|
|
|
36
36
|
|
|
37
37
|
try:
|
|
38
38
|
from diagramboxes import (
|
|
39
|
-
Diagram, Node, Edge,
|
|
39
|
+
Diagram, Node, Edge,
|
|
40
40
|
InitialPseudostate, JunctionPseudostate,
|
|
41
41
|
ChoicePseudostate, ForkPseudostate, JoinPseudostate,
|
|
42
42
|
FinalState, TerminatePseudostate,
|
|
@@ -293,21 +293,6 @@ class Model(Searchable):
|
|
|
293
293
|
|
|
294
294
|
add_child = _set_child
|
|
295
295
|
|
|
296
|
-
def _get_child(self, featurechain):
|
|
297
|
-
"""Retrieve a nested child by dot-separated name path.
|
|
298
|
-
|
|
299
|
-
Parameters
|
|
300
|
-
----------
|
|
301
|
-
featurechain : str
|
|
302
|
-
Dot-separated path like "pkg.element".
|
|
303
|
-
|
|
304
|
-
Returns
|
|
305
|
-
-------
|
|
306
|
-
element or None
|
|
307
|
-
The matching child element, or None if not found.
|
|
308
|
-
"""
|
|
309
|
-
return self
|
|
310
|
-
|
|
311
296
|
def _get_child(self, featurechain):
|
|
312
297
|
"""Retrieve a nested child by dot-separated name path.
|
|
313
298
|
|
|
@@ -671,21 +656,6 @@ class Package(Searchable):
|
|
|
671
656
|
|
|
672
657
|
add_child = _set_child
|
|
673
658
|
|
|
674
|
-
def _get_child(self, featurechain):
|
|
675
|
-
"""Retrieve a nested child by dot-separated name path.
|
|
676
|
-
|
|
677
|
-
Parameters
|
|
678
|
-
----------
|
|
679
|
-
featurechain : str
|
|
680
|
-
Dot-separated path like "pkg.element".
|
|
681
|
-
|
|
682
|
-
Returns
|
|
683
|
-
-------
|
|
684
|
-
element or None
|
|
685
|
-
The matching child element, or None if not found.
|
|
686
|
-
"""
|
|
687
|
-
return self
|
|
688
|
-
|
|
689
659
|
def _get_child(self, featurechain):
|
|
690
660
|
"""Retrieve a nested child by dot-separated name path.
|
|
691
661
|
|
|
@@ -853,7 +823,7 @@ class Package(Searchable):
|
|
|
853
823
|
"""
|
|
854
824
|
from sysmlpy.grammar.classes import (
|
|
855
825
|
Import, NamespaceImport, MembershipImport, ImportPrefix,
|
|
856
|
-
ImportedNamespace, ImportedMembership,
|
|
826
|
+
ImportedNamespace, ImportedMembership,
|
|
857
827
|
RelationshipBody, QualifiedName
|
|
858
828
|
)
|
|
859
829
|
|
|
@@ -882,7 +852,6 @@ class Package(Searchable):
|
|
|
882
852
|
"protected": "protected" if visibility == "protected" else "",
|
|
883
853
|
"public": "public" if visibility == "public" else "",
|
|
884
854
|
}
|
|
885
|
-
vis = VisibilityIndicator(vis_def)
|
|
886
855
|
|
|
887
856
|
# Create import prefix
|
|
888
857
|
prefix_def = {
|
|
@@ -1720,7 +1689,7 @@ class Package(Searchable):
|
|
|
1720
1689
|
A graph store with elements as nodes and parent-child
|
|
1721
1690
|
relationships as edges.
|
|
1722
1691
|
"""
|
|
1723
|
-
from sysmlpy.store import NetworkXStore, new_id
|
|
1692
|
+
from sysmlpy.store import NetworkXStore, new_id
|
|
1724
1693
|
|
|
1725
1694
|
store = NetworkXStore()
|
|
1726
1695
|
id_map = {}
|
|
@@ -1736,7 +1705,7 @@ class Package(Searchable):
|
|
|
1736
1705
|
store.put(eid, data, parent_id=parent_id)
|
|
1737
1706
|
if hasattr(elem, "children"):
|
|
1738
1707
|
for child in elem.children:
|
|
1739
|
-
|
|
1708
|
+
_add_element(child, eid)
|
|
1740
1709
|
return eid
|
|
1741
1710
|
|
|
1742
1711
|
_add_element(self)
|
|
@@ -528,17 +528,6 @@ class _Evaluator:
|
|
|
528
528
|
f"{sorted(self._available_names())}"
|
|
529
529
|
)
|
|
530
530
|
|
|
531
|
-
def _evaluate_glued(self, text):
|
|
532
|
-
"""Re-parse a glued expression text and evaluate it in scope."""
|
|
533
|
-
try:
|
|
534
|
-
expr_dict = _parse_expression_text(text)
|
|
535
|
-
except EvaluationError:
|
|
536
|
-
return None
|
|
537
|
-
try:
|
|
538
|
-
return self.evaluate(expr_dict)
|
|
539
|
-
except EvaluationError:
|
|
540
|
-
return None
|
|
541
|
-
|
|
542
531
|
def _all_namespaces(self):
|
|
543
532
|
seen = set()
|
|
544
533
|
stack = [ns for ns in self.scope]
|
|
@@ -557,7 +546,7 @@ class _Evaluator:
|
|
|
557
546
|
if seg in current.values:
|
|
558
547
|
if i == len(rest) - 1:
|
|
559
548
|
return self._materialize(current.values[seg], full_names)
|
|
560
|
-
|
|
549
|
+
self._materialize(current.values[seg], names=None) # noqa
|
|
561
550
|
raise UnknownNameError(
|
|
562
551
|
f"Cannot chain into value '{seg}' "
|
|
563
552
|
f"({'.'.join(str(n) for n in full_names)})"
|
|
@@ -5,7 +5,6 @@ the syntax and current status in sysmlpy.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from sysmlpy import loads, Part, Attribute
|
|
8
|
-
from sysmlpy.usage import ureg
|
|
9
8
|
|
|
10
9
|
# =============================================================================
|
|
11
10
|
# 1. Tuple Syntax in SysML v2
|
|
@@ -123,7 +122,7 @@ if vehicle:
|
|
|
123
122
|
if isinstance(subchild, Attribute):
|
|
124
123
|
try:
|
|
125
124
|
print(f" {subchild.name} = {subchild.get_value()}")
|
|
126
|
-
except:
|
|
125
|
+
except Exception:
|
|
127
126
|
pass
|
|
128
127
|
|
|
129
128
|
# =============================================================================
|
|
@@ -158,7 +157,7 @@ if sensor:
|
|
|
158
157
|
if isinstance(attr, Attribute):
|
|
159
158
|
try:
|
|
160
159
|
print(f" {attr.name} = {attr.get_value()}")
|
|
161
|
-
except:
|
|
160
|
+
except Exception:
|
|
162
161
|
pass
|
|
163
162
|
|
|
164
163
|
# =============================================================================
|