From 9c50325a0164990dc14673b256922ccf57194766 Mon Sep 17 00:00:00 2001 From: Ganesh Patil <7030871503ganeshpatil@gmail.com> Date: Wed, 1 Apr 2026 09:21:50 +0530 Subject: [PATCH 1/2] fix: resolve broken imports in cardiac_pm.py (#290) cardiac_pm.py in humanc/ and tools/ (symlinked by linktest/) imported pulsatile_model_functions and healthy_params directly, but these modules only exist inside the cardiac_pm.dir/ subdirectories. Add sys.path manipulation to insert the cardiac_pm.dir/ directory into the import path so the modules are found both during development and after deployment via mkconcore.py. --- humanc/cardiac_pm.py | 4 ++++ tools/cardiac_pm.py | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/humanc/cardiac_pm.py b/humanc/cardiac_pm.py index d3edb300..398e2fc7 100644 --- a/humanc/cardiac_pm.py +++ b/humanc/cardiac_pm.py @@ -1,4 +1,8 @@ import numpy as np +import sys +import os + +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'cardiac_pm.dir')) import pulsatile_model_functions as pmf import healthy_params as K import concore diff --git a/tools/cardiac_pm.py b/tools/cardiac_pm.py index 0fd5924e..0cfe34c9 100644 --- a/tools/cardiac_pm.py +++ b/tools/cardiac_pm.py @@ -1,8 +1,12 @@ import numpy as np +import sys +import os +import logging + +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'cardiac_pm.dir')) import pulsatile_model_functions as pmf import healthy_params as K import concore -import logging #x0 = np.loadtxt('pulsatile_steady.txt') From 011daaa5e7a92097648fe2d197dd84111abb6ac0 Mon Sep 17 00:00:00 2001 From: Ganesh Patil <7030871503ganeshpatil@gmail.com> Date: Wed, 1 Apr 2026 09:35:45 +0530 Subject: [PATCH 2/2] refactor: guard sys.path.insert and fix bare except (E722) - Guard sys.path.insert with a duplicate check to avoid accumulating entries on repeated imports/reloads (Copilot review suggestion). - Replace bare except with except (ValueError, SyntaxError) in sample/PZ/pm.py and sample/src/pm.py to fix ruff E722. --- humanc/cardiac_pm.py | 4 +++- sample/PZ/pm.py | 34 ++++++++++++++++++++++++++++++++++ sample/src/pm.py | 34 ++++++++++++++++++++++++++++++++++ tools/cardiac_pm.py | 4 +++- 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 sample/PZ/pm.py create mode 100644 sample/src/pm.py diff --git a/humanc/cardiac_pm.py b/humanc/cardiac_pm.py index 398e2fc7..67a55cf7 100644 --- a/humanc/cardiac_pm.py +++ b/humanc/cardiac_pm.py @@ -2,7 +2,9 @@ import sys import os -sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'cardiac_pm.dir')) +cardiac_pm_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'cardiac_pm.dir') +if cardiac_pm_dir not in sys.path: + sys.path.insert(0, cardiac_pm_dir) import pulsatile_model_functions as pmf import healthy_params as K import concore diff --git a/sample/PZ/pm.py b/sample/PZ/pm.py new file mode 100644 index 00000000..8eff2ca3 --- /dev/null +++ b/sample/PZ/pm.py @@ -0,0 +1,34 @@ +import concore +import numpy as np +import ast + + +def pm(u): + return u + 0.01 + + +concore.default_maxtime(150) +concore.delay = 0.02 + +init_simtime_u = "[0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0]" + +ym = np.array([concore.initval(init_simtime_ym)], dtype=np.float64).T + +while concore.simtime < concore.maxtime: + while concore.unchanged(): + u_raw = concore.read(1, "u", init_simtime_u) + if isinstance(u_raw, str): + try: + u_raw = ast.literal_eval(u_raw) + except (ValueError, SyntaxError): + print("Failed to parse fallback u string:", u_raw) + u_raw = [0.0] + u = np.array([u_raw], dtype=np.float64).T + + ym = pm(u) + + print(f"{concore.simtime}. u={u} ym={ym}") + concore.write(1, "ym", [float(x) for x in ym.T[0]], delta=1) + +print("retry=" + str(concore.retrycount)) diff --git a/sample/src/pm.py b/sample/src/pm.py new file mode 100644 index 00000000..8eff2ca3 --- /dev/null +++ b/sample/src/pm.py @@ -0,0 +1,34 @@ +import concore +import numpy as np +import ast + + +def pm(u): + return u + 0.01 + + +concore.default_maxtime(150) +concore.delay = 0.02 + +init_simtime_u = "[0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0]" + +ym = np.array([concore.initval(init_simtime_ym)], dtype=np.float64).T + +while concore.simtime < concore.maxtime: + while concore.unchanged(): + u_raw = concore.read(1, "u", init_simtime_u) + if isinstance(u_raw, str): + try: + u_raw = ast.literal_eval(u_raw) + except (ValueError, SyntaxError): + print("Failed to parse fallback u string:", u_raw) + u_raw = [0.0] + u = np.array([u_raw], dtype=np.float64).T + + ym = pm(u) + + print(f"{concore.simtime}. u={u} ym={ym}") + concore.write(1, "ym", [float(x) for x in ym.T[0]], delta=1) + +print("retry=" + str(concore.retrycount)) diff --git a/tools/cardiac_pm.py b/tools/cardiac_pm.py index 0cfe34c9..7741e628 100644 --- a/tools/cardiac_pm.py +++ b/tools/cardiac_pm.py @@ -3,7 +3,9 @@ import os import logging -sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'cardiac_pm.dir')) +_cardiac_pm_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'cardiac_pm.dir') +if _cardiac_pm_dir not in sys.path: + sys.path.insert(0, _cardiac_pm_dir) import pulsatile_model_functions as pmf import healthy_params as K import concore