@memoarchitect/ontology 0.12.1 → 0.15.0

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.
Files changed (317) hide show
  1. package/README.md +5 -3
  2. package/examples/connected-patient-monitor/memo.identity.yaml +34 -0
  3. package/examples/connected-patient-monitor/memo.package.yaml +3 -1
  4. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +17 -12
  5. package/examples/connected-patient-monitor/model/{catalog → methodology}/project.sysml +4 -5
  6. package/examples/embedded-infusion-pump/memo.package.yaml +3 -1
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +6 -6
  8. package/examples/embedded-infusion-pump/model/{catalog → methodology}/project.sysml +4 -5
  9. package/examples/functional-logical-physical/memo.identity.yaml +28 -0
  10. package/examples/functional-logical-physical/memo.package.yaml +3 -1
  11. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  12. package/examples/functional-logical-physical/model/{catalog → methodology}/project.sysml +4 -5
  13. package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +40 -139
  14. package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +38 -290
  15. package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +47 -217
  16. package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +50 -191
  17. package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +42 -181
  18. package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +40 -164
  19. package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +51 -172
  20. package/examples/gpca-pump/analysis/Samples/README.md +15 -9
  21. package/examples/gpca-pump/analysis/memo_model.py +243 -0
  22. package/examples/gpca-pump/memo.identity.yaml +521 -26
  23. package/examples/gpca-pump/memo.package.yaml +3 -1
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +56 -47
  25. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +51 -78
  26. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +359 -358
  27. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +9 -9
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +56 -69
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +44 -59
  30. package/examples/gpca-pump/model/catalog/gpca_context.sysml +23 -35
  31. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +33 -40
  32. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +62 -63
  33. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +362 -483
  34. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +45 -70
  35. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -12
  36. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +173 -169
  37. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +139 -225
  38. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +43 -47
  39. package/examples/gpca-pump/model/catalog/gpca_system.sysml +68 -65
  40. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +147 -116
  41. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +65 -91
  42. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +4 -6
  43. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +4 -6
  44. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +4 -6
  45. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +4 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +2 -4
  47. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +7 -6
  48. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +4 -6
  49. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -6
  50. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
  51. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +4 -6
  52. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +4 -6
  53. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +3 -5
  54. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +3 -5
  55. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +4 -6
  56. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +2 -4
  57. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -5
  58. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +2 -4
  59. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +4 -6
  60. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -6
  61. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
  62. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +4 -6
  63. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +4 -6
  64. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
  65. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -6
  66. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +3 -5
  67. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
  68. package/examples/gpca-pump/model/{catalog → methodology}/project.sysml +8 -6
  69. package/examples/ivd-laboratory-system/memo.package.yaml +3 -1
  70. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +12 -9
  71. package/examples/ivd-laboratory-system/model/{catalog → methodology}/project.sysml +4 -5
  72. package/examples/manual-surgical-instrument/memo.package.yaml +3 -1
  73. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +2 -6
  74. package/examples/manual-surgical-instrument/model/{catalog → methodology}/project.sysml +4 -5
  75. package/examples/multidimensional-layers/memo.package.yaml +3 -1
  76. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +2 -4
  77. package/examples/multidimensional-layers/model/{catalog → methodology}/project.sysml +4 -5
  78. package/examples/nested-architecture-dsm/memo.identity.yaml +93 -0
  79. package/examples/nested-architecture-dsm/memo.package.yaml +3 -1
  80. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +30 -30
  81. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +28 -28
  82. package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +2 -4
  83. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +4 -4
  84. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +7 -7
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +8 -8
  86. package/examples/nested-architecture-dsm/model/{catalog → methodology}/project.sysml +4 -5
  87. package/examples/reusable-instrument/memo.package.yaml +3 -1
  88. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -7
  89. package/examples/reusable-instrument/model/{catalog → methodology}/project.sysml +4 -5
  90. package/examples/robot-cell-family/README.md +34 -0
  91. package/examples/robot-cell-family/memo.identity.yaml +142 -0
  92. package/examples/robot-cell-family/memo.package.yaml +7 -0
  93. package/examples/robot-cell-family/model/methodology/project.sysml +30 -0
  94. package/examples/robot-cell-family/model/shared/shared.sysml +53 -0
  95. package/examples/robot-cell-family/model/sos/chains.sysml +36 -0
  96. package/examples/robot-cell-family/model/sos/icds.sysml +29 -0
  97. package/examples/robot-cell-family/model/sos/sos.sysml +31 -0
  98. package/examples/robot-cell-family/model/sos/use_cases.sysml +25 -0
  99. package/examples/robot-cell-family/model/systems/manipulation/manipulation_system.sysml +35 -0
  100. package/examples/robot-cell-family/model/systems/navigation/navigation_system.sysml +46 -0
  101. package/examples/robot-cell-family/model/systems/perception/perception_system.sysml +37 -0
  102. package/examples/robot-platform/memo.package.yaml +3 -0
  103. package/examples/robot-platform/model/platform.sysml +15 -0
  104. package/examples/ros-mobile-robot/README.md +5 -4
  105. package/examples/ros-mobile-robot/memo.identity.yaml +94 -0
  106. package/examples/ros-mobile-robot/memo.package.yaml +3 -1
  107. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +26 -29
  108. package/examples/ros-mobile-robot/model/{catalog → methodology}/project.sysml +8 -14
  109. package/examples/software-only-medical-device/memo.package.yaml +3 -1
  110. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +9 -10
  111. package/examples/software-only-medical-device/model/{catalog → methodology}/project.sysml +8 -9
  112. package/examples/surgical-closure-workflow/memo.package.yaml +3 -1
  113. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -26
  114. package/examples/surgical-closure-workflow/model/{catalog → methodology}/project.sysml +7 -5
  115. package/examples/surgical-robot/memo.package.yaml +3 -1
  116. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +14 -12
  117. package/examples/surgical-robot/model/{catalog → methodology}/project.sysml +4 -5
  118. package/examples/sysml-diagram-samples/README.md +1 -0
  119. package/examples/sysml-diagram-samples/memo.identity.yaml +675 -0
  120. package/examples/sysml-diagram-samples/memo.package.yaml +3 -1
  121. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +10 -20
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +7 -29
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +12 -36
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +13 -25
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +388 -0
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/drill_down_view.sysml +88 -0
  127. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +27 -36
  128. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +8 -21
  129. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +17 -65
  130. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +23 -32
  131. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +9 -22
  132. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +7 -22
  133. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +18 -34
  134. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +2 -9
  135. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -42
  136. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +11 -24
  137. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +9 -36
  138. package/examples/sysml-diagram-samples/model/methodology/project.sysml +40 -0
  139. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
  140. package/examples/temperature-alarm/memo.identity.yaml +6 -0
  141. package/examples/temperature-alarm/memo.package.yaml +3 -1
  142. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
  143. package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
  144. package/examples/ui-screen-regions/memo.identity.yaml +33 -0
  145. package/examples/ui-screen-regions/memo.package.yaml +3 -1
  146. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
  147. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
  148. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
  149. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
  150. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
  151. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
  152. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
  153. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
  154. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
  155. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
  156. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  160. package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
  161. package/extensions/README.md +65 -16
  162. package/extensions/aadl/memo.package.yaml +1 -1
  163. package/extensions/aadl/src/aadl_extension.sysml +5 -2
  164. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
  165. package/extensions/clinical/memo.package.yaml +1 -1
  166. package/extensions/clinical/src/clinical_extension.sysml +2 -0
  167. package/extensions/cloud/memo.package.yaml +1 -1
  168. package/extensions/container/memo.package.yaml +1 -1
  169. package/extensions/messaging/memo.package.yaml +1 -1
  170. package/extensions/messaging/src/messaging_extension.sysml +2 -2
  171. package/extensions/ros/memo.package.yaml +1 -1
  172. package/extensions/ros/src/ros_extension.sysml +25 -24
  173. package/extensions/template/memo.package.yaml +1 -1
  174. package/extensions/template/model/extension.sysml +25 -0
  175. package/memo.manifest.yaml +1 -7
  176. package/methodologies/default/memo.package.yaml +1 -1
  177. package/methodologies/gpca/memo.package.yaml +1 -1
  178. package/ontology/memo.package.yaml +1 -1
  179. package/package.json +6 -4
  180. package/profile/memo.package.yaml +1 -1
  181. package/src/architecture/decisions/memo_decisions.sysml +9 -2
  182. package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
  183. package/src/architecture/functional/functions/memo_functions.sysml +45 -31
  184. package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
  185. package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
  186. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
  187. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
  188. package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
  189. package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
  190. package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
  191. package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
  192. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
  193. package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
  194. package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
  195. package/src/architecture/operational/structure/memo_operational.sysml +5 -2
  196. package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
  197. package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
  198. package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
  199. package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
  200. package/src/architecture/variability/memo_variability.sysml +87 -0
  201. package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
  202. package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
  203. package/src/artifacts/standards/cfr_21_820.sysml +12 -24
  204. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
  205. package/src/artifacts/standards/iec_60601_1.sysml +16 -32
  206. package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
  207. package/src/artifacts/standards/iec_60812.sysml +4 -8
  208. package/src/artifacts/standards/iec_62304.sysml +607 -47
  209. package/src/artifacts/standards/iec_62366_1.sysml +12 -24
  210. package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
  211. package/src/artifacts/standards/iso_13485.sysml +12 -24
  212. package/src/artifacts/standards/iso_14971.sysml +118 -20
  213. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
  214. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
  215. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
  216. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
  217. package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
  218. package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
  219. package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
  220. package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
  221. package/src/artifacts/templates/dhf/system/sad.md +1 -1
  222. package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
  223. package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
  224. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
  225. package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
  226. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
  227. package/src/assurance/safety_risk/memo_risk.sysml +39 -1
  228. package/src/core/common/memo_common.sysml +51 -68
  229. package/src/core/enumerations/memo_enumerations.sysml +93 -9
  230. package/src/core/relationships/memo_relationships.sysml +17 -11
  231. package/src/core/relationships/memo_workspace_membership.sysml +284 -0
  232. package/src/core/semantics/semantics.sysml +58 -0
  233. package/src/core/terminology/terminology.sysml +7 -0
  234. package/src/memo_namespaces.sysml +6 -0
  235. package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
  236. package/src/methodology/core/memo_core.sysml +85 -29
  237. package/src/methodology/profiles/memo_profiles.sysml +217 -61
  238. package/src/methodology/workflow/memo_workflow.sysml +28 -0
  239. package/src/rules/closure/closure_rules.sysml +250 -4
  240. package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
  241. package/src/rules/ontology/ontology_invariants.sysml +288 -48
  242. package/src/rules/quantitative/quantitative_rules.sysml +4 -0
  243. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
  244. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -5
  245. package/src/viewpoints/context/context_viewpoint.sysml +4 -5
  246. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
  247. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -5
  248. package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
  249. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -5
  250. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -5
  251. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
  252. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
  253. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -5
  254. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
  255. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -5
  256. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
  257. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -5
  258. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
  259. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
  260. package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
  261. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -5
  262. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
  263. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -5
  264. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
  265. package/src/viewpoints/software/software_viewpoint.sysml +4 -5
  266. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
  267. package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +45 -36
  268. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -5
  269. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
  270. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -5
  271. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -5
  272. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
  273. package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
  274. package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
  275. package/templates/default/memo.package.yaml +6 -1
  276. package/templates/default/model/catalog/architecture/system.sysml +7 -3
  277. package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
  278. package/examples/sysml-diagram-samples/model/catalog/project.sysml +0 -26
  279. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
  280. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
  281. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
  282. package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
  283. package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
  284. package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
  285. package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
  286. package/extensions/container/src/methodology/container_methodology.sysml +0 -19
  287. package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
  288. package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
  289. package/extensions/template/src/extension.sysml +0 -39
  290. package/templates/connected-device/memo.package.yaml +0 -13
  291. package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
  292. package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
  293. package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
  294. package/templates/connected-device/model/catalog/project.sysml +0 -30
  295. package/templates/connected-device/package.json +0 -8
  296. package/templates/connected-device/syside.toml +0 -13
  297. package/templates/infusion-pump/memo.package.yaml +0 -13
  298. package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
  299. package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
  300. package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
  301. package/templates/infusion-pump/model/catalog/project.sysml +0 -30
  302. package/templates/infusion-pump/package.json +0 -8
  303. package/templates/infusion-pump/syside.toml +0 -13
  304. package/templates/monitoring-device/memo.package.yaml +0 -13
  305. package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
  306. package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
  307. package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
  308. package/templates/monitoring-device/model/catalog/project.sysml +0 -30
  309. package/templates/monitoring-device/package.json +0 -8
  310. package/templates/monitoring-device/syside.toml +0 -13
  311. package/templates/samd/memo.package.yaml +0 -13
  312. package/templates/samd/model/catalog/architecture/system.sysml +0 -5
  313. package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
  314. package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
  315. package/templates/samd/model/catalog/project.sysml +0 -30
  316. package/templates/samd/package.json +0 -8
  317. package/templates/samd/syside.toml +0 -13
@@ -1,301 +1,49 @@
1
1
  {
2
- "cells": [
3
- {
4
- "cell_type": "markdown",
5
- "id": "memo-1",
6
- "metadata": {},
7
- "source": [
8
- "# Architecture hotspots\n",
9
- "\n",
10
- "Find busy containers, deep ownership paths, and dominant semantic types.\n",
11
- "\n",
12
- "This sample uses only standard SysML v2 concepts and automatically discovers the project's `model/` or `src/` directory."
13
- ]
14
- },
15
- {
16
- "cell_type": "code",
17
- "execution_count": 1,
18
- "id": "memo-2",
19
- "metadata": {
20
- "execution": {
21
- "iopub.execute_input": "2026-07-29T22:31:48.480637Z",
22
- "iopub.status.busy": "2026-07-29T22:31:48.480406Z",
23
- "iopub.status.idle": "2026-07-29T22:31:48.765461Z",
24
- "shell.execute_reply": "2026-07-29T22:31:48.765134Z"
25
- }
26
- },
27
- "outputs": [
28
- {
29
- "name": "stdout",
30
- "output_type": "stream",
31
- "text": [
32
- "Loaded 42 SysML files from /Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model\n"
33
- ]
34
- }
35
- ],
36
- "source": [
37
- "from pathlib import Path\n",
38
- "from collections import Counter, defaultdict\n",
39
- "import syside\n",
40
- "\n",
41
- "def find_sysml_root(start=Path.cwd()):\n",
42
- " \"\"\"Find the nearest model/ or src/ folder containing textual SysML.\"\"\"\n",
43
- " for directory in (start, *start.parents):\n",
44
- " for folder_name in ('model', 'src'):\n",
45
- " candidate = directory / folder_name\n",
46
- " if candidate.is_dir() and next(candidate.rglob('*.sysml'), None):\n",
47
- " return candidate\n",
48
- " raise FileNotFoundError('No model/ or src/ directory containing .sysml files was found')\n",
49
- "\n",
50
- "SYSML_ROOT = find_sysml_root()\n",
51
- "SYSML_FILES = sorted(SYSML_ROOT.rglob('*.sysml'))\n",
52
- "model, diagnostics = syside.try_load_model([str(path) for path in SYSML_FILES])\n",
53
- "print(f'Loaded {len(SYSML_FILES)} SysML files from {SYSML_ROOT}')"
54
- ]
55
- },
56
- {
57
- "cell_type": "code",
58
- "execution_count": 2,
59
- "id": "memo-3",
60
- "metadata": {
61
- "execution": {
62
- "iopub.execute_input": "2026-07-29T22:31:48.768663Z",
63
- "iopub.status.busy": "2026-07-29T22:31:48.768585Z",
64
- "iopub.status.idle": "2026-07-29T22:31:48.814237Z",
65
- "shell.execute_reply": "2026-07-29T22:31:48.813848Z"
66
- }
67
- },
68
- "outputs": [
2
+ "cells": [
69
3
  {
70
- "name": "stdout",
71
- "output_type": "stream",
72
- "text": [
73
- "Top containers by directly owned semantic elements\n"
74
- ]
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "# Architecture hotspots\n\nFind busy containers, deep ownership paths, and dominant semantic types.\n\nThis sample uses only standard SysML v2 concepts and reads the model through `memo_model.py`, compiled by the project's selected compiler."
8
+ ],
9
+ "id": "memo-1"
75
10
  },
76
11
  {
77
- "data": {
78
- "text/plain": [
79
- "[(19,\n",
80
- " 'RequirementUsage',\n",
81
- " 'memo_examples_gpca_pump_model_catalog_gpca_requirements::reqWatchdogSafeState'),\n",
82
- " (19,\n",
83
- " 'RequirementUsage',\n",
84
- " 'memo_examples_gpca_pump_model_catalog_gpca_requirements::reqDoorOpen'),\n",
85
- " (18,\n",
86
- " 'RequirementUsage',\n",
87
- " 'memo_examples_gpca_pump_model_catalog_gpca_requirements::reqPowerLossRetention'),\n",
88
- " (18,\n",
89
- " 'RequirementUsage',\n",
90
- " 'memo_examples_gpca_pump_model_catalog_gpca_requirements::reqPost'),\n",
91
- " (18,\n",
92
- " 'RequirementUsage',\n",
93
- " 'memo_examples_gpca_pump_model_catalog_gpca_requirements::reqDrugLibraryLimits'),\n",
94
- " (18,\n",
95
- " 'ActionUsage',\n",
96
- " 'memo_examples_gpca_pump_model_catalog_gpca_behavior_actions::infusionDeliveryFlow'),\n",
97
- " (17,\n",
98
- " 'ViewUsage',\n",
99
- " 'memo_examples_gpca_pump_model_views_logical_system_decomposition_view::gpcaSystemDecompositionView'),\n",
100
- " (16,\n",
101
- " 'ViewUsage',\n",
102
- " 'memo_examples_gpca_pump_model_views_software_software_architecture_view::gpcaSoftwareArchitectureView'),\n",
103
- " (16,\n",
104
- " 'ViewUsage',\n",
105
- " 'memo_examples_gpca_pump_model_views_risk_risk_chain_view::gpcaRiskChainView'),\n",
106
- " (16,\n",
107
- " 'ViewUsage',\n",
108
- " 'memo_examples_gpca_pump_model_views_operational_use_case_view::gpcaUseCaseView'),\n",
109
- " (16,\n",
110
- " 'ViewUsage',\n",
111
- " 'memo_examples_gpca_pump_model_views_logical_mode_state_view::gpcaModeStateView'),\n",
112
- " (16,\n",
113
- " 'ViewUsage',\n",
114
- " 'memo_examples_gpca_pump_model_views_logical_logical_architecture_view::gpcaLogicalArchitectureView'),\n",
115
- " (16,\n",
116
- " 'ViewUsage',\n",
117
- " 'memo_examples_gpca_pump_model_views_logical_device_interconnect_view::gpcaDeviceInterconnectView'),\n",
118
- " (16,\n",
119
- " 'ViewUsage',\n",
120
- " 'memo_examples_gpca_pump_model_views_document_dhf_index_view::dhfIndexView'),\n",
121
- " (16,\n",
122
- " 'ViewUsage',\n",
123
- " 'memo_examples_gpca_pump_model_views_document_architecture_description_view::architectureDescriptionView'),\n",
124
- " (16,\n",
125
- " 'ViewUsage',\n",
126
- " 'memo_examples_gpca_pump_model_views_cybersecurity_cybersecurity_view::gpcaCybersecurityView'),\n",
127
- " (16,\n",
128
- " 'ViewUsage',\n",
129
- " 'memo_examples_gpca_pump_model_views_context_system_context_view::gpcaSystemContextView'),\n",
130
- " (16,\n",
131
- " 'ViewUsage',\n",
132
- " 'memo_examples_gpca_pump_model_views_behavior_action_flow_view::gpcaActionFlowView'),\n",
133
- " (15,\n",
134
- " 'ViewUsage',\n",
135
- " 'memo_examples_gpca_pump_model_views_verification_verification_coverage_view::gpcaVerificationCoverageView'),\n",
136
- " (15,\n",
137
- " 'ViewUsage',\n",
138
- " 'memo_examples_gpca_pump_model_views_risk_fmea_view::gpcaFmeaView'),\n",
139
- " (15,\n",
140
- " 'ViewUsage',\n",
141
- " 'memo_examples_gpca_pump_model_views_requirements_requirements_trace_view::gpcaRequirementsTraceView'),\n",
142
- " (15,\n",
143
- " 'ViewUsage',\n",
144
- " 'memo_examples_gpca_pump_model_views_physical_physical_bom_view::gpcaPhysicalBomView'),\n",
145
- " (15,\n",
146
- " 'ViewUsage',\n",
147
- " 'memo_examples_gpca_pump_model_views_operational_scenario_sequence_view::gpcaScenarioSequenceView'),\n",
148
- " (15,\n",
149
- " 'ViewUsage',\n",
150
- " 'memo_examples_gpca_pump_model_views_functional_function_browser_view::gpcaFunctionBrowserView'),\n",
151
- " (15,\n",
152
- " 'ViewUsage',\n",
153
- " 'memo_examples_gpca_pump_model_views_functional_function_allocation_view::gpcaFunctionAllocationView')]"
154
- ]
155
- },
156
- "metadata": {},
157
- "output_type": "display_data"
12
+ "cell_type": "code",
13
+ "metadata": {},
14
+ "source": [
15
+ "import sys\nfrom pathlib import Path\nfrom collections import Counter, defaultdict\n\n# memo_model.py sits in the project's analysis/ folder, above this notebook.\nsys.path.insert(0, str(next(d for d in (Path.cwd(), *Path.cwd().parents) if (d / 'memo_model.py').is_file())))\nimport memo_model\n\n# Compiled by the project's selected compiler (toolchain.compiler), as every\n# MEMO command is: change the setting and this notebook follows.\nmodel = memo_model.load()\ndiagnostics = model.diagnostics\nSYSML_FILES = model.documents\nprint(f'Loaded {len(SYSML_FILES)} SysML files, compiled by {model.compiler} {model.compiler_version or \"\"}')"
16
+ ],
17
+ "execution_count": null,
18
+ "outputs": [],
19
+ "id": "memo-2"
158
20
  },
159
21
  {
160
- "name": "stdout",
161
- "output_type": "stream",
162
- "text": [
163
- "Deepest ownership paths\n"
164
- ]
165
- },
166
- {
167
- "data": {
168
- "text/plain": [
169
- "[(5, 'ReferenceUsage', 'sensorStatus'),\n",
170
- " (5, 'ReferenceUsage', 'sensorStatus'),\n",
171
- " (5, 'ReferenceUsage', 'flowCommand'),\n",
172
- " (5, 'ReferenceUsage', 'flowCommand'),\n",
173
- " (5, 'ReferenceUsage', 'authorizedBolus'),\n",
174
- " (5, 'ReferenceUsage', 'authorizedBolus'),\n",
175
- " (5, 'ReferenceUsage', 'alarmSignal'),\n",
176
- " (5, 'ReferenceUsage', 'alarmSignal'),\n",
177
- " (5, 'ReferenceUsage', 'actuation'),\n",
178
- " (5, 'ReferenceUsage', 'actuation'),\n",
179
- " (4, 'AttributeUsage', '<unnamed>'),\n",
180
- " (4, 'AttributeUsage', '<unnamed>'),\n",
181
- " (4, 'AttributeUsage', '<unnamed>'),\n",
182
- " (4, 'AttributeUsage', '<unnamed>'),\n",
183
- " (4, 'AttributeUsage', '<unnamed>'),\n",
184
- " (4, 'AttributeUsage', '<unnamed>'),\n",
185
- " (4, 'AttributeUsage', '<unnamed>'),\n",
186
- " (4, 'AttributeUsage', '<unnamed>'),\n",
187
- " (4, 'AttributeUsage', '<unnamed>'),\n",
188
- " (4, 'AttributeUsage', '<unnamed>'),\n",
189
- " (4, 'AttributeUsage', '<unnamed>'),\n",
190
- " (4, 'AttributeUsage', '<unnamed>'),\n",
191
- " (4, 'AttributeUsage', '<unnamed>'),\n",
192
- " (4, 'AttributeUsage', '<unnamed>'),\n",
193
- " (4, 'AttributeUsage', '<unnamed>')]"
194
- ]
195
- },
196
- "metadata": {},
197
- "output_type": "display_data"
22
+ "cell_type": "code",
23
+ "metadata": {},
24
+ "source": [
25
+ "from IPython.display import display\n\nsemantic_elements = (\n model.elements('Usage', include_subtypes=True)\n + model.elements('Definition', include_subtypes=True)\n)\n\ndef safe_name(element):\n value = element.qualified_name or element.name or element.declared_name\n return str(value) if value else '<unnamed>'\n\ndef ownership_depth(element):\n depth, current, seen = 0, element.owner, set()\n while current is not None and id(current) not in seen:\n seen.add(id(current))\n depth += 1\n current = getattr(current, 'owner', None)\n return depth\n\ncontainers = []\nfor element in semantic_elements:\n children = [child for child in element.owned_elements if child.is_a('Usage', 'Definition')]\n if children:\n containers.append((len(children), element.type, safe_name(element)))\n\nprint('Top containers by directly owned semantic elements')\ndisplay(sorted(containers, reverse=True)[:25])\n\nprint('Deepest ownership paths')\ndisplay(sorted(\n ((ownership_depth(item), item.type, safe_name(item)) for item in semantic_elements),\n reverse=True,\n)[:25])\n\nprint('Most common semantic types')\nCounter(item.type for item in semantic_elements).most_common(30)"
26
+ ],
27
+ "execution_count": null,
28
+ "outputs": [],
29
+ "id": "memo-3"
30
+ }
31
+ ],
32
+ "metadata": {
33
+ "kernelspec": {
34
+ "display_name": "Python 3 (ipykernel)",
35
+ "language": "python",
36
+ "name": "python3"
198
37
  },
199
- {
200
- "name": "stdout",
201
- "output_type": "stream",
202
- "text": [
203
- "Most common semantic types\n"
204
- ]
38
+ "language_info": {
39
+ "name": "python",
40
+ "version": "3"
205
41
  },
206
- {
207
- "data": {
208
- "text/plain": [
209
- "[('AttributeUsage', 5056),\n",
210
- " ('ConnectionUsage', 691),\n",
211
- " ('PartUsage', 425),\n",
212
- " ('ReferenceUsage', 174),\n",
213
- " ('RequirementUsage', 105),\n",
214
- " ('ItemUsage', 49),\n",
215
- " ('ActionUsage', 44),\n",
216
- " ('SuccessionAsUsage', 29),\n",
217
- " ('VerificationCaseUsage', 27),\n",
218
- " ('ViewUsage', 26),\n",
219
- " ('InterfaceUsage', 14),\n",
220
- " ('StateUsage', 10),\n",
221
- " ('AllocationUsage', 6),\n",
222
- " ('ActionDefinition', 6),\n",
223
- " ('FlowUsage', 5),\n",
224
- " ('ItemDefinition', 5),\n",
225
- " ('UseCaseUsage', 1),\n",
226
- " ('PortDefinition', 1),\n",
227
- " ('ConjugatedPortDefinition', 1),\n",
228
- " ('InterfaceDefinition', 1)]"
229
- ]
230
- },
231
- "execution_count": 2,
232
- "metadata": {},
233
- "output_type": "execute_result"
42
+ "memo": {
43
+ "starter": true,
44
+ "description": "Find busy containers, deep ownership paths, and dominant semantic types."
234
45
  }
235
- ],
236
- "source": [
237
- "from IPython.display import display\n",
238
- "\n",
239
- "semantic_elements = (\n",
240
- " list(model.elements(syside.Usage, include_subtypes=True))\n",
241
- " + list(model.elements(syside.Definition, include_subtypes=True))\n",
242
- ")\n",
243
- "\n",
244
- "def safe_name(element):\n",
245
- " value = element.qualified_name or element.name or element.declared_name\n",
246
- " return str(value) if value else '<unnamed>'\n",
247
- "\n",
248
- "def ownership_depth(element):\n",
249
- " depth, current, seen = 0, element.owner, set()\n",
250
- " while current is not None and id(current) not in seen:\n",
251
- " seen.add(id(current))\n",
252
- " depth += 1\n",
253
- " current = getattr(current, 'owner', None)\n",
254
- " return depth\n",
255
- "\n",
256
- "containers = []\n",
257
- "for element in semantic_elements:\n",
258
- " children = [child for child in element.owned_elements if isinstance(child, (syside.Usage, syside.Definition))]\n",
259
- " if children:\n",
260
- " containers.append((len(children), type(element).__name__, safe_name(element)))\n",
261
- "\n",
262
- "print('Top containers by directly owned semantic elements')\n",
263
- "display(sorted(containers, reverse=True)[:25])\n",
264
- "\n",
265
- "print('Deepest ownership paths')\n",
266
- "display(sorted(\n",
267
- " ((ownership_depth(item), type(item).__name__, safe_name(item)) for item in semantic_elements),\n",
268
- " reverse=True,\n",
269
- ")[:25])\n",
270
- "\n",
271
- "print('Most common semantic types')\n",
272
- "Counter(type(item).__name__ for item in semantic_elements).most_common(30)"
273
- ]
274
- }
275
- ],
276
- "metadata": {
277
- "kernelspec": {
278
- "display_name": "Python 3 (ipykernel)",
279
- "language": "python",
280
- "name": "python3"
281
- },
282
- "language_info": {
283
- "codemirror_mode": {
284
- "name": "ipython",
285
- "version": 3
286
- },
287
- "file_extension": ".py",
288
- "mimetype": "text/x-python",
289
- "name": "python",
290
- "nbconvert_exporter": "python",
291
- "pygments_lexer": "ipython3",
292
- "version": "3.12.13"
293
46
  },
294
- "memo": {
295
- "description": "Find busy containers, deep ownership paths, and dominant semantic types.",
296
- "starter": true
297
- }
298
- },
299
- "nbformat": 4,
300
- "nbformat_minor": 5
47
+ "nbformat": 4,
48
+ "nbformat_minor": 5
301
49
  }
@@ -1,229 +1,59 @@
1
1
  {
2
- "cells": [
3
- {
4
- "cell_type": "markdown",
5
- "id": "memo-1",
6
- "metadata": {},
7
- "source": [
8
- "# Model quality review\n",
9
- "\n",
10
- "Review diagnostics, unnamed elements, repeated names, and empty definitions.\n",
11
- "\n",
12
- "This sample uses only standard SysML v2 concepts and automatically discovers the project's `model/` or `src/` directory."
13
- ]
14
- },
15
- {
16
- "cell_type": "code",
17
- "execution_count": 1,
18
- "id": "memo-2",
19
- "metadata": {
20
- "execution": {
21
- "iopub.execute_input": "2026-07-29T22:31:50.589541Z",
22
- "iopub.status.busy": "2026-07-29T22:31:50.589403Z",
23
- "iopub.status.idle": "2026-07-29T22:31:50.863275Z",
24
- "shell.execute_reply": "2026-07-29T22:31:50.862876Z"
25
- }
26
- },
27
- "outputs": [
28
- {
29
- "name": "stdout",
30
- "output_type": "stream",
31
- "text": [
32
- "Loaded 42 SysML files from /Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model\n"
33
- ]
34
- }
35
- ],
36
- "source": [
37
- "from pathlib import Path\n",
38
- "from collections import Counter, defaultdict\n",
39
- "import syside\n",
40
- "\n",
41
- "def find_sysml_root(start=Path.cwd()):\n",
42
- " \"\"\"Find the nearest model/ or src/ folder containing textual SysML.\"\"\"\n",
43
- " for directory in (start, *start.parents):\n",
44
- " for folder_name in ('model', 'src'):\n",
45
- " candidate = directory / folder_name\n",
46
- " if candidate.is_dir() and next(candidate.rglob('*.sysml'), None):\n",
47
- " return candidate\n",
48
- " raise FileNotFoundError('No model/ or src/ directory containing .sysml files was found')\n",
49
- "\n",
50
- "SYSML_ROOT = find_sysml_root()\n",
51
- "SYSML_FILES = sorted(SYSML_ROOT.rglob('*.sysml'))\n",
52
- "model, diagnostics = syside.try_load_model([str(path) for path in SYSML_FILES])\n",
53
- "print(f'Loaded {len(SYSML_FILES)} SysML files from {SYSML_ROOT}')"
54
- ]
55
- },
56
- {
57
- "cell_type": "code",
58
- "execution_count": 2,
59
- "id": "memo-3",
60
- "metadata": {
61
- "execution": {
62
- "iopub.execute_input": "2026-07-29T22:31:50.864878Z",
63
- "iopub.status.busy": "2026-07-29T22:31:50.864782Z",
64
- "iopub.status.idle": "2026-07-29T22:31:50.874497Z",
65
- "shell.execute_reply": "2026-07-29T22:31:50.874144Z"
66
- }
67
- },
68
- "outputs": [
69
- {
70
- "data": {
71
- "text/plain": [
72
- "{'parser/semantic errors': 8009,\n",
73
- " 'warnings': 0,\n",
74
- " 'unnamed usages or definitions': 5978,\n",
75
- " 'repeated qualified names': 5,\n",
76
- " 'definitions with no owned usages/definitions': 1}"
77
- ]
78
- },
79
- "metadata": {},
80
- "output_type": "display_data"
81
- },
2
+ "cells": [
82
3
  {
83
- "name": "stdout",
84
- "output_type": "stream",
85
- "text": [
86
- "Repeated qualified names (first 30)\n"
87
- ]
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "# Model quality review\n\nReview diagnostics, unnamed elements, repeated names, and empty definitions.\n\nThis sample uses only standard SysML v2 concepts and reads the model through `memo_model.py`, compiled by the project's selected compiler."
8
+ ],
9
+ "id": "memo-1"
88
10
  },
89
11
  {
90
- "data": {
91
- "text/plain": [
92
- "[('sensorStatus', 2, ['ReferenceUsage']),\n",
93
- " ('alarmSignal', 2, ['ReferenceUsage']),\n",
94
- " ('authorizedBolus', 2, ['ReferenceUsage']),\n",
95
- " ('flowCommand', 2, ['ReferenceUsage']),\n",
96
- " ('actuation', 2, ['ReferenceUsage'])]"
97
- ]
98
- },
99
- "metadata": {},
100
- "output_type": "display_data"
12
+ "cell_type": "code",
13
+ "metadata": {},
14
+ "source": [
15
+ "import sys\nfrom pathlib import Path\nfrom collections import Counter, defaultdict\n\n# memo_model.py sits in the project's analysis/ folder, above this notebook.\nsys.path.insert(0, str(next(d for d in (Path.cwd(), *Path.cwd().parents) if (d / 'memo_model.py').is_file())))\nimport memo_model\n\n# Compiled by the project's selected compiler (toolchain.compiler), as every\n# MEMO command is: change the setting and this notebook follows.\nmodel = memo_model.load()\ndiagnostics = model.diagnostics\nSYSML_FILES = model.documents\nprint(f'Loaded {len(SYSML_FILES)} SysML files, compiled by {model.compiler} {model.compiler_version or \"\"}')"
16
+ ],
17
+ "execution_count": null,
18
+ "outputs": [],
19
+ "id": "memo-2"
101
20
  },
102
21
  {
103
- "name": "stdout",
104
- "output_type": "stream",
105
- "text": [
106
- "Empty definition candidates (first 30)\n"
107
- ]
22
+ "cell_type": "code",
23
+ "metadata": {},
24
+ "source": [
25
+ "from IPython.display import display\n\nusages = model.elements('Usage', include_subtypes=True)\ndefinitions = model.elements('Definition', include_subtypes=True)\nsemantic_elements = usages + definitions\n\nunnamed = [item for item in semantic_elements if not (item.name or item.declared_name)]\nby_name = defaultdict(list)\nfor item in semantic_elements:\n value = item.qualified_name or item.name or item.declared_name\n name = str(value) if value else None\n if name:\n by_name[name].append(item)\nduplicates = [(name, len(items), sorted({item.type for item in items})) for name, items in by_name.items() if len(items) > 1]\nempty_definitions = [\n item for item in definitions\n if not any(child.is_a('Usage', 'Definition') for child in item.owned_elements)\n]\n\ndisplay({\n 'parser/semantic errors': len(diagnostics.errors),\n 'warnings': len(diagnostics.warnings),\n 'unnamed usages or definitions': len(unnamed),\n 'repeated qualified names': len(duplicates),\n 'definitions with no owned usages/definitions': len(empty_definitions),\n})\n\nprint('Repeated qualified names (first 30)')\ndisplay(sorted(duplicates, key=lambda item: item[1], reverse=True)[:30])\n\nprint('Empty definition candidates (first 30)')\n[(item.type, item.qualified_name or item.name) for item in empty_definitions[:30]]"
26
+ ],
27
+ "execution_count": null,
28
+ "outputs": [],
29
+ "id": "memo-3"
108
30
  },
109
31
  {
110
- "data": {
111
- "text/plain": [
112
- "[('ConjugatedPortDefinition',\n",
113
- " _syside.core.QualifiedName(['memo_examples_gpca_pump_model_catalog_gpca_interfaces', 'SensorInputPort', '~SensorInputPort']))]"
114
- ]
115
- },
116
- "execution_count": 2,
117
- "metadata": {},
118
- "output_type": "execute_result"
119
- }
120
- ],
121
- "source": [
122
- "from IPython.display import display\n",
123
- "\n",
124
- "usages = list(model.elements(syside.Usage, include_subtypes=True))\n",
125
- "definitions = list(model.elements(syside.Definition, include_subtypes=True))\n",
126
- "semantic_elements = usages + definitions\n",
127
- "\n",
128
- "unnamed = [item for item in semantic_elements if not (item.name or item.declared_name)]\n",
129
- "by_name = defaultdict(list)\n",
130
- "for item in semantic_elements:\n",
131
- " value = item.qualified_name or item.name or item.declared_name\n",
132
- " name = str(value) if value else None\n",
133
- " if name:\n",
134
- " by_name[name].append(item)\n",
135
- "duplicates = [(name, len(items), sorted({type(item).__name__ for item in items})) for name, items in by_name.items() if len(items) > 1]\n",
136
- "empty_definitions = [\n",
137
- " item for item in definitions\n",
138
- " if not any(isinstance(child, (syside.Usage, syside.Definition)) for child in item.owned_elements)\n",
139
- "]\n",
140
- "\n",
141
- "display({\n",
142
- " 'parser/semantic errors': len(list(diagnostics.errors)),\n",
143
- " 'warnings': len(list(diagnostics.warnings)),\n",
144
- " 'unnamed usages or definitions': len(unnamed),\n",
145
- " 'repeated qualified names': len(duplicates),\n",
146
- " 'definitions with no owned usages/definitions': len(empty_definitions),\n",
147
- "})\n",
148
- "\n",
149
- "print('Repeated qualified names (first 30)')\n",
150
- "display(sorted(duplicates, key=lambda item: item[1], reverse=True)[:30])\n",
151
- "\n",
152
- "print('Empty definition candidates (first 30)')\n",
153
- "[(type(item).__name__, item.qualified_name or item.name) for item in empty_definitions[:30]]"
154
- ]
155
- },
156
- {
157
- "cell_type": "code",
158
- "execution_count": 3,
159
- "id": "memo-4",
160
- "metadata": {
161
- "execution": {
162
- "iopub.execute_input": "2026-07-29T22:31:50.875513Z",
163
- "iopub.status.busy": "2026-07-29T22:31:50.875441Z",
164
- "iopub.status.idle": "2026-07-29T22:31:50.877529Z",
165
- "shell.execute_reply": "2026-07-29T22:31:50.877175Z"
32
+ "cell_type": "code",
33
+ "metadata": {},
34
+ "source": [
35
+ "print('First diagnostics to investigate')\nfor diagnostic in diagnostics.errors[:20] + diagnostics.warnings[:20]:\n print(diagnostic)"
36
+ ],
37
+ "execution_count": null,
38
+ "outputs": [],
39
+ "id": "memo-4"
166
40
  }
167
- },
168
- "outputs": [
169
- {
170
- "name": "stdout",
171
- "output_type": "stream",
172
- "text": [
173
- "First diagnostics to investigate\n",
174
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml:159:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
175
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:19:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
176
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:27:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
177
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:35:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
178
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:43:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
179
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:51:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
180
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:63:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
181
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:75:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
182
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:86:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
183
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:96:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
184
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:108:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
185
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:118:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
186
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:128:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
187
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:138:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
188
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_interfaces.sysml:148:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
189
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_operational.sysml:180:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
190
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_operational.sysml:181:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
191
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_operational.sysml:182:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
192
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_trace.sysml:54:5: error (connector-related-features): A concrete connector must have at least two related elements\n",
193
- "/Users/poojakashyap/sandbox/memo-meta/memo/examples/gpca-pump/model/catalog/gpca_trace.sysml:77:5: error (connector-related-features): A concrete connector must have at least two related elements\n"
194
- ]
41
+ ],
42
+ "metadata": {
43
+ "kernelspec": {
44
+ "display_name": "Python 3 (ipykernel)",
45
+ "language": "python",
46
+ "name": "python3"
47
+ },
48
+ "language_info": {
49
+ "name": "python",
50
+ "version": "3"
51
+ },
52
+ "memo": {
53
+ "starter": true,
54
+ "description": "Review diagnostics, unnamed elements, repeated names, and empty definitions."
195
55
  }
196
- ],
197
- "source": [
198
- "print('First diagnostics to investigate')\n",
199
- "for diagnostic in list(diagnostics.errors)[:20] + list(diagnostics.warnings)[:20]:\n",
200
- " print(diagnostic)"
201
- ]
202
- }
203
- ],
204
- "metadata": {
205
- "kernelspec": {
206
- "display_name": "Python 3 (ipykernel)",
207
- "language": "python",
208
- "name": "python3"
209
- },
210
- "language_info": {
211
- "codemirror_mode": {
212
- "name": "ipython",
213
- "version": 3
214
- },
215
- "file_extension": ".py",
216
- "mimetype": "text/x-python",
217
- "name": "python",
218
- "nbconvert_exporter": "python",
219
- "pygments_lexer": "ipython3",
220
- "version": "3.12.13"
221
56
  },
222
- "memo": {
223
- "description": "Review diagnostics, unnamed elements, repeated names, and empty definitions.",
224
- "starter": true
225
- }
226
- },
227
- "nbformat": 4,
228
- "nbformat_minor": 5
57
+ "nbformat": 4,
58
+ "nbformat_minor": 5
229
59
  }