@memoarchitect/ontology 0.13.2 → 0.15.1
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.
- package/README.md +5 -3
- package/examples/connected-patient-monitor/memo.identity.yaml +34 -0
- package/examples/connected-patient-monitor/memo.package.yaml +3 -1
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +17 -12
- package/examples/connected-patient-monitor/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/embedded-infusion-pump/memo.package.yaml +3 -1
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +6 -6
- package/examples/embedded-infusion-pump/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/functional-logical-physical/memo.identity.yaml +28 -0
- package/examples/functional-logical-physical/memo.package.yaml +3 -1
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
- package/examples/functional-logical-physical/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +40 -139
- package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +38 -290
- package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +47 -217
- package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +50 -191
- package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +42 -181
- package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +40 -164
- package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +51 -172
- package/examples/gpca-pump/analysis/Samples/README.md +15 -9
- package/examples/gpca-pump/analysis/memo_model.py +243 -0
- package/examples/gpca-pump/memo.identity.yaml +521 -26
- package/examples/gpca-pump/memo.package.yaml +3 -1
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +56 -47
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +51 -78
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +359 -357
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +9 -9
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +56 -69
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +44 -59
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +23 -35
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +33 -40
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +62 -63
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +362 -483
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +45 -70
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -12
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +173 -169
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +139 -225
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +43 -47
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +68 -65
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +147 -116
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +65 -90
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +7 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
- package/examples/gpca-pump/model/{catalog → methodology}/project.sysml +8 -6
- package/examples/ivd-laboratory-system/memo.package.yaml +3 -1
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +12 -9
- package/examples/ivd-laboratory-system/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/manual-surgical-instrument/memo.package.yaml +3 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +2 -6
- package/examples/manual-surgical-instrument/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/multidimensional-layers/memo.package.yaml +3 -1
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +2 -4
- package/examples/multidimensional-layers/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/nested-architecture-dsm/memo.identity.yaml +93 -0
- package/examples/nested-architecture-dsm/memo.package.yaml +3 -1
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +30 -30
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +28 -28
- package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +2 -4
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +4 -4
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +7 -7
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +8 -8
- package/examples/nested-architecture-dsm/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/reusable-instrument/memo.package.yaml +3 -1
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -7
- package/examples/reusable-instrument/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/robot-cell-family/README.md +34 -0
- package/examples/robot-cell-family/memo.identity.yaml +142 -0
- package/examples/robot-cell-family/memo.package.yaml +7 -0
- package/examples/robot-cell-family/model/methodology/project.sysml +30 -0
- package/examples/robot-cell-family/model/shared/shared.sysml +53 -0
- package/examples/robot-cell-family/model/sos/chains.sysml +36 -0
- package/examples/robot-cell-family/model/sos/icds.sysml +29 -0
- package/examples/robot-cell-family/model/sos/sos.sysml +31 -0
- package/examples/robot-cell-family/model/sos/use_cases.sysml +25 -0
- package/examples/robot-cell-family/model/systems/manipulation/manipulation_system.sysml +35 -0
- package/examples/robot-cell-family/model/systems/navigation/navigation_system.sysml +46 -0
- package/examples/robot-cell-family/model/systems/perception/perception_system.sysml +37 -0
- package/examples/robot-platform/memo.package.yaml +3 -0
- package/examples/robot-platform/model/platform.sysml +15 -0
- package/examples/ros-mobile-robot/README.md +5 -4
- package/examples/ros-mobile-robot/memo.identity.yaml +94 -0
- package/examples/ros-mobile-robot/memo.package.yaml +3 -1
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +26 -29
- package/examples/ros-mobile-robot/model/{catalog → methodology}/project.sysml +8 -14
- package/examples/software-only-medical-device/memo.package.yaml +3 -1
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +9 -10
- package/examples/software-only-medical-device/model/{catalog → methodology}/project.sysml +8 -9
- package/examples/surgical-closure-workflow/memo.package.yaml +3 -1
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -26
- package/examples/surgical-closure-workflow/model/{catalog → methodology}/project.sysml +7 -5
- package/examples/surgical-robot/memo.package.yaml +3 -1
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +14 -12
- package/examples/surgical-robot/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/sysml-diagram-samples/README.md +1 -0
- package/examples/sysml-diagram-samples/memo.identity.yaml +459 -0
- package/examples/sysml-diagram-samples/memo.package.yaml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +10 -20
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +5 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +10 -13
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +11 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +63 -8
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/drill_down_view.sysml +88 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +25 -25
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +6 -6
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +15 -17
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +21 -21
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +7 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +5 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +14 -14
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +16 -17
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +9 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +7 -14
- package/examples/sysml-diagram-samples/model/{catalog → methodology}/project.sysml +5 -5
- package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
- package/examples/temperature-alarm/memo.identity.yaml +6 -0
- package/examples/temperature-alarm/memo.package.yaml +3 -1
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
- package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/ui-screen-regions/memo.identity.yaml +33 -0
- package/examples/ui-screen-regions/memo.package.yaml +3 -1
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
- package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
- package/extensions/README.md +65 -16
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/aadl/src/aadl_extension.sysml +5 -2
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
- package/extensions/clinical/memo.package.yaml +1 -1
- package/extensions/clinical/src/clinical_extension.sysml +2 -0
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/messaging/src/messaging_extension.sysml +2 -2
- package/extensions/ros/memo.package.yaml +1 -1
- package/extensions/ros/src/ros_extension.sysml +25 -24
- package/extensions/template/memo.package.yaml +1 -1
- package/extensions/template/model/extension.sysml +25 -0
- package/memo.manifest.yaml +1 -7
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +6 -4
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/decisions/memo_decisions.sysml +9 -2
- package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
- package/src/architecture/functional/functions/memo_functions.sysml +45 -31
- package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
- package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
- package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
- package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
- package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
- package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
- package/src/architecture/operational/structure/memo_operational.sysml +5 -2
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
- package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
- package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
- package/src/architecture/variability/memo_variability.sysml +87 -0
- package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
- package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
- package/src/artifacts/standards/cfr_21_820.sysml +12 -24
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
- package/src/artifacts/standards/iec_60601_1.sysml +16 -32
- package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
- package/src/artifacts/standards/iec_60812.sysml +4 -8
- package/src/artifacts/standards/iec_62304.sysml +607 -47
- package/src/artifacts/standards/iec_62366_1.sysml +12 -24
- package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
- package/src/artifacts/standards/iso_13485.sysml +12 -24
- package/src/artifacts/standards/iso_14971.sysml +118 -20
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
- package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
- package/src/artifacts/templates/dhf/system/sad.md +1 -1
- package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
- package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
- package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
- package/src/assurance/safety_risk/memo_risk.sysml +39 -1
- package/src/core/common/memo_common.sysml +61 -68
- package/src/core/enumerations/memo_enumerations.sysml +93 -9
- package/src/core/relationships/memo_relationships.sysml +17 -11
- package/src/core/relationships/memo_workspace_membership.sysml +284 -0
- package/src/core/semantics/semantics.sysml +58 -0
- package/src/core/terminology/terminology.sysml +7 -0
- package/src/memo_namespaces.sysml +6 -0
- package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
- package/src/methodology/core/memo_core.sysml +85 -29
- package/src/methodology/profiles/memo_profiles.sysml +217 -61
- package/src/methodology/workflow/memo_workflow.sysml +28 -0
- package/src/rules/closure/closure_rules.sysml +250 -4
- package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
- package/src/rules/ontology/ontology_invariants.sysml +288 -48
- package/src/rules/quantitative/quantitative_rules.sysml +4 -0
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -3
- package/src/viewpoints/context/context_viewpoint.sysml +2 -3
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -3
- package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +0 -4
- package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
- package/src/viewpoints/logical/logical_viewpoint.sysml +2 -3
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
- package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
- package/src/viewpoints/physical/physical_viewpoint.sysml +2 -3
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
- package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +2 -3
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
- package/src/viewpoints/risk/risk_viewpoint.sysml +2 -3
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
- package/src/viewpoints/software/software_viewpoint.sysml +2 -3
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
- package/src/viewpoints/stakeholders_concerns/memo_stakeholders_concerns.sysml +11 -29
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +2 -3
- package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
- package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
- package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
- package/templates/default/memo.package.yaml +6 -1
- package/templates/default/model/catalog/architecture/system.sysml +7 -3
- package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
- package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
- package/extensions/container/src/methodology/container_methodology.sysml +0 -19
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
- package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
- package/extensions/template/src/extension.sysml +0 -39
- package/templates/connected-device/memo.package.yaml +0 -13
- package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
- package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/connected-device/model/catalog/project.sysml +0 -30
- package/templates/connected-device/package.json +0 -8
- package/templates/connected-device/syside.toml +0 -13
- package/templates/infusion-pump/memo.package.yaml +0 -13
- package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
- package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/infusion-pump/model/catalog/project.sysml +0 -30
- package/templates/infusion-pump/package.json +0 -8
- package/templates/infusion-pump/syside.toml +0 -13
- package/templates/monitoring-device/memo.package.yaml +0 -13
- package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
- package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/monitoring-device/model/catalog/project.sysml +0 -30
- package/templates/monitoring-device/package.json +0 -8
- package/templates/monitoring-device/syside.toml +0 -13
- package/templates/samd/memo.package.yaml +0 -13
- package/templates/samd/model/catalog/architecture/system.sysml +0 -5
- package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/samd/model/catalog/project.sysml +0 -30
- package/templates/samd/package.json +0 -8
- package/templates/samd/syside.toml +0 -13
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"""The project's SysML v2 model, for analysis notebooks.
|
|
2
|
+
|
|
3
|
+
`load()` compiles the project with the compiler its settings select
|
|
4
|
+
(`toolchain.compiler`, as every MEMO command does) by running
|
|
5
|
+
`memo compile --out`, and reads the result: each document's SysML v2 API JSON,
|
|
6
|
+
the compiler's diagnostics, and an index of where each element is declared.
|
|
7
|
+
A notebook reads the model through this module alone, so changing the
|
|
8
|
+
project's compiler changes what every notebook analyses, with nothing else to
|
|
9
|
+
edit.
|
|
10
|
+
|
|
11
|
+
The `memo` command is found as `$MEMO_CLI` (a command line, for example
|
|
12
|
+
`node /path/to/memo.js`) or as `memo` on `PATH`.
|
|
13
|
+
|
|
14
|
+
import memo_model
|
|
15
|
+
model = memo_model.load()
|
|
16
|
+
parts = model.elements('PartUsage')
|
|
17
|
+
usages = model.elements('Usage', include_subtypes=True)
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import json
|
|
23
|
+
import os
|
|
24
|
+
import shlex
|
|
25
|
+
import shutil
|
|
26
|
+
import subprocess
|
|
27
|
+
import tempfile
|
|
28
|
+
from dataclasses import dataclass
|
|
29
|
+
from pathlib import Path
|
|
30
|
+
|
|
31
|
+
FORMAT = "memo-compiled-model/1"
|
|
32
|
+
|
|
33
|
+
# Properties that hold an element's ownership, as the API JSON states them.
|
|
34
|
+
_OWNING_RELATIONSHIP = "owningRelationship"
|
|
35
|
+
_OWNED_RELATIONSHIP = "ownedRelationship"
|
|
36
|
+
_OWNED_RELATED_ELEMENT = "ownedRelatedElement"
|
|
37
|
+
_OWNING_RELATED_ELEMENT = "owningRelatedElement"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class ModelError(Exception):
|
|
41
|
+
"""The project could not be compiled into a model."""
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@dataclass(frozen=True)
|
|
45
|
+
class Diagnostic:
|
|
46
|
+
severity: str
|
|
47
|
+
message: str
|
|
48
|
+
code: str | None = None
|
|
49
|
+
file: str | None = None
|
|
50
|
+
line: int | None = None
|
|
51
|
+
column: int | None = None
|
|
52
|
+
|
|
53
|
+
def __str__(self) -> str:
|
|
54
|
+
where = f"{self.file or ''}:{self.line or '?'}:{self.column or '?'}"
|
|
55
|
+
code = f" ({self.code})" if self.code else ""
|
|
56
|
+
return f"{where} {self.severity}{code}: {self.message}"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class Diagnostics:
|
|
60
|
+
"""What the compiler reported, by severity."""
|
|
61
|
+
|
|
62
|
+
def __init__(self, items: list[Diagnostic]):
|
|
63
|
+
self.all = items
|
|
64
|
+
self.errors = [d for d in items if d.severity == "error"]
|
|
65
|
+
self.warnings = [d for d in items if d.severity == "warning"]
|
|
66
|
+
self.infos = [d for d in items if d.severity not in ("error", "warning")]
|
|
67
|
+
|
|
68
|
+
def __len__(self) -> int:
|
|
69
|
+
return len(self.all)
|
|
70
|
+
|
|
71
|
+
def __iter__(self):
|
|
72
|
+
return iter(self.all)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _references(value) -> list[str]:
|
|
76
|
+
if isinstance(value, dict) and "@id" in value:
|
|
77
|
+
return [value["@id"]]
|
|
78
|
+
if isinstance(value, list):
|
|
79
|
+
return [item["@id"] for item in value if isinstance(item, dict) and "@id" in item]
|
|
80
|
+
return []
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class Element:
|
|
84
|
+
"""One element of the model, as its API JSON states it."""
|
|
85
|
+
|
|
86
|
+
def __init__(self, model: Model, data: dict, role: str):
|
|
87
|
+
self._model = model
|
|
88
|
+
self.data = data
|
|
89
|
+
self.role = role
|
|
90
|
+
|
|
91
|
+
def __repr__(self) -> str:
|
|
92
|
+
return f"<{self.type} {self.qualified_name or self.name or self.id}>"
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def id(self) -> str:
|
|
96
|
+
return self.data["@id"]
|
|
97
|
+
|
|
98
|
+
@property
|
|
99
|
+
def type(self) -> str:
|
|
100
|
+
"""The element's metaclass, for example `PartUsage`."""
|
|
101
|
+
return self.data["@type"]
|
|
102
|
+
|
|
103
|
+
def is_a(self, *metaclasses: str) -> bool:
|
|
104
|
+
"""Whether the element's metaclass is, or specializes, one of these."""
|
|
105
|
+
own = self._model._supertypes.get(self.type, [])
|
|
106
|
+
return any(name == self.type or name in own for name in metaclasses)
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def declared_name(self) -> str | None:
|
|
110
|
+
return self.data.get("declaredName")
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def name(self) -> str | None:
|
|
114
|
+
return self.data.get("name") or self.declared_name
|
|
115
|
+
|
|
116
|
+
@property
|
|
117
|
+
def qualified_name(self) -> str | None:
|
|
118
|
+
return self.data.get("qualifiedName") or self._model._index.get(self.id, {}).get("qualifiedName")
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def file(self) -> str | None:
|
|
122
|
+
return self._model._index.get(self.id, {}).get("file")
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
def line(self) -> int | None:
|
|
126
|
+
return self._model._index.get(self.id, {}).get("line")
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def owner(self) -> Element | None:
|
|
130
|
+
"""The element that owns this one: a relationship's owning element, or
|
|
131
|
+
the element owning the relationship that owns this one."""
|
|
132
|
+
owning = _references(self.data.get(_OWNING_RELATED_ELEMENT))
|
|
133
|
+
if owning:
|
|
134
|
+
return self._model.element(owning[0])
|
|
135
|
+
relationship = _references(self.data.get(_OWNING_RELATIONSHIP))
|
|
136
|
+
if relationship:
|
|
137
|
+
owning_relationship = self._model.element(relationship[0])
|
|
138
|
+
if owning_relationship is not None:
|
|
139
|
+
owners = _references(owning_relationship.data.get(_OWNING_RELATED_ELEMENT))
|
|
140
|
+
if owners:
|
|
141
|
+
return self._model.element(owners[0])
|
|
142
|
+
return None
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def owned_relationships(self) -> list[Element]:
|
|
146
|
+
return self._model._resolve(_references(self.data.get(_OWNED_RELATIONSHIP)))
|
|
147
|
+
|
|
148
|
+
@property
|
|
149
|
+
def owned_elements(self) -> list[Element]:
|
|
150
|
+
"""The elements this one owns, through the relationships it owns."""
|
|
151
|
+
owned: list[Element] = []
|
|
152
|
+
for relationship in self.owned_relationships:
|
|
153
|
+
owned.extend(self._model._resolve(_references(relationship.data.get(_OWNED_RELATED_ELEMENT))))
|
|
154
|
+
return owned
|
|
155
|
+
|
|
156
|
+
@property
|
|
157
|
+
def related_elements(self) -> list[Element]:
|
|
158
|
+
"""For a relationship, every other element it references; the model's
|
|
159
|
+
elements only, not the standard library's."""
|
|
160
|
+
related: list[Element] = []
|
|
161
|
+
for key, value in self.data.items():
|
|
162
|
+
if key in (_OWNING_RELATED_ELEMENT, _OWNING_RELATIONSHIP, _OWNED_RELATIONSHIP) or key.startswith("@"):
|
|
163
|
+
continue
|
|
164
|
+
related.extend(self._model._resolve(_references(value)))
|
|
165
|
+
return [element for element in related if element.id != self.id]
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class Model:
|
|
169
|
+
"""The compiled model: its documents, elements and diagnostics."""
|
|
170
|
+
|
|
171
|
+
def __init__(self, compiled: dict):
|
|
172
|
+
if compiled.get("format") != FORMAT:
|
|
173
|
+
raise ModelError(f"memo compile wrote {compiled.get('format')!r}, expected {FORMAT!r}")
|
|
174
|
+
self.compiler: str = compiled["compiler"]
|
|
175
|
+
self.compiler_version: str | None = compiled.get("compilerVersion")
|
|
176
|
+
self.diagnostics = Diagnostics([Diagnostic(**d) for d in compiled.get("diagnostics", [])])
|
|
177
|
+
self._index: dict[str, dict] = compiled.get("index", {})
|
|
178
|
+
self._supertypes: dict[str, list[str]] = compiled.get("supertypes", {})
|
|
179
|
+
self.documents = [d["file"] for d in compiled.get("documents", []) if d["role"] == "project"]
|
|
180
|
+
self._elements: dict[str, Element] = {}
|
|
181
|
+
for document in compiled.get("documents", []):
|
|
182
|
+
for data in document["elements"]:
|
|
183
|
+
self._elements[data["@id"]] = Element(self, data, document["role"])
|
|
184
|
+
|
|
185
|
+
def element(self, element_id: str) -> Element | None:
|
|
186
|
+
return self._elements.get(element_id)
|
|
187
|
+
|
|
188
|
+
def _resolve(self, ids: list[str]) -> list[Element]:
|
|
189
|
+
return [self._elements[i] for i in ids if i in self._elements]
|
|
190
|
+
|
|
191
|
+
def elements(self, metaclass: str | None = None, include_subtypes: bool = False,
|
|
192
|
+
libraries: bool = False) -> list[Element]:
|
|
193
|
+
"""The project's elements of a metaclass (every one when None); with
|
|
194
|
+
`include_subtypes`, of its specializations too; with `libraries`, the
|
|
195
|
+
libraries' elements as well as the project's."""
|
|
196
|
+
found = []
|
|
197
|
+
for element in self._elements.values():
|
|
198
|
+
if not libraries and element.role != "project":
|
|
199
|
+
continue
|
|
200
|
+
if metaclass is None or element.type == metaclass or (include_subtypes and element.is_a(metaclass)):
|
|
201
|
+
found.append(element)
|
|
202
|
+
return found
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def find_project(start: Path | None = None) -> Path:
|
|
206
|
+
"""The nearest directory holding a MEMO project (`memo.package.yaml`)."""
|
|
207
|
+
start = (start or Path.cwd()).resolve()
|
|
208
|
+
for directory in (start, *start.parents):
|
|
209
|
+
if (directory / "memo.package.yaml").is_file():
|
|
210
|
+
return directory
|
|
211
|
+
raise ModelError(f"No MEMO project (memo.package.yaml) above {start}")
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def _memo_command() -> list[str]:
|
|
215
|
+
configured = os.environ.get("MEMO_CLI")
|
|
216
|
+
if configured:
|
|
217
|
+
return shlex.split(configured)
|
|
218
|
+
found = shutil.which("memo")
|
|
219
|
+
if found:
|
|
220
|
+
return [found]
|
|
221
|
+
raise ModelError("The memo command was not found. Put it on PATH, or set MEMO_CLI to the command that runs it.")
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def load(project: str | Path | None = None, force: bool = False) -> Model:
|
|
225
|
+
"""Compile the project with its selected compiler and read the model.
|
|
226
|
+
|
|
227
|
+
A project the compiler rejects raises ModelError with its errors; MEMO
|
|
228
|
+
analyses a model only once it is valid SysML."""
|
|
229
|
+
root = Path(project).resolve() if project else find_project()
|
|
230
|
+
with tempfile.TemporaryDirectory(prefix="memo-model-") as scratch:
|
|
231
|
+
out = Path(scratch) / "model.json"
|
|
232
|
+
command = [*_memo_command(), "compile", str(root), "--out", str(out)]
|
|
233
|
+
if force:
|
|
234
|
+
command.append("--force")
|
|
235
|
+
run = subprocess.run(command, capture_output=True, text=True)
|
|
236
|
+
if not out.exists():
|
|
237
|
+
detail = (run.stderr or run.stdout).strip() or f"exit status {run.returncode}"
|
|
238
|
+
raise ModelError(f"memo compile wrote no model: {detail}")
|
|
239
|
+
model = Model(json.loads(out.read_text(encoding="utf-8")))
|
|
240
|
+
if model.diagnostics.errors:
|
|
241
|
+
listed = "\n".join(str(d) for d in model.diagnostics.errors[:20])
|
|
242
|
+
raise ModelError(f"{model.compiler} reports {len(model.diagnostics.errors)} error(s):\n{listed}")
|
|
243
|
+
return model
|