From 0584bd5e04f210cac56a0f66eca47d1c8a375404 Mon Sep 17 00:00:00 2001 From: Junhan Chang Date: Fri, 25 Jul 2025 17:38:17 +0800 Subject: [PATCH] fix vessel_id param passing in protocols --- unilabos/compile/add_protocol.py | 11 ++++++++++- unilabos/compile/adjustph_protocol.py | 5 ++++- unilabos/compile/clean_vessel_protocol.py | 11 ++++++++++- unilabos/compile/evacuateandrefill_protocol.py | 11 ++++++++++- unilabos/compile/evaporate_protocol.py | 11 ++++++++++- unilabos/compile/filter_protocol.py | 11 ++++++++++- unilabos/compile/heatchill_protocol.py | 11 ++++++++++- unilabos/compile/hydrogenate_protocol.py | 11 ++++++++++- unilabos/compile/recrystallize_protocol.py | 11 ++++++++++- unilabos/compile/separate_protocol.py | 11 ++++++++++- 10 files changed, 94 insertions(+), 10 deletions(-) diff --git a/unilabos/compile/add_protocol.py b/unilabos/compile/add_protocol.py index 18497c1..35e6baf 100644 --- a/unilabos/compile/add_protocol.py +++ b/unilabos/compile/add_protocol.py @@ -346,7 +346,16 @@ def generate_add_protocol( """ # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} # 🔧 修改:更新容器的液体体积(假设有 liquid_volume 字段) if "data" in vessel and "liquid_volume" in vessel["data"]: diff --git a/unilabos/compile/adjustph_protocol.py b/unilabos/compile/adjustph_protocol.py index 374268a..87fbbb9 100644 --- a/unilabos/compile/adjustph_protocol.py +++ b/unilabos/compile/adjustph_protocol.py @@ -237,7 +237,10 @@ def generate_adjust_ph_protocol( # 统一处理vessel参数 if isinstance(vessel, dict): - vessel_id = list(vessel.values())[0].get("id", "") + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") vessel_data = vessel.get("data", {}) else: vessel_id = str(vessel) diff --git a/unilabos/compile/clean_vessel_protocol.py b/unilabos/compile/clean_vessel_protocol.py index b285056..dd7b171 100644 --- a/unilabos/compile/clean_vessel_protocol.py +++ b/unilabos/compile/clean_vessel_protocol.py @@ -181,7 +181,16 @@ def generate_clean_vessel_protocol( clean_protocol = generate_clean_vessel_protocol(G, {"id": "main_reactor"}, "water", 100.0, 60.0, 2) """ # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} action_sequence = [] diff --git a/unilabos/compile/evacuateandrefill_protocol.py b/unilabos/compile/evacuateandrefill_protocol.py index 8514f69..6c21f0a 100644 --- a/unilabos/compile/evacuateandrefill_protocol.py +++ b/unilabos/compile/evacuateandrefill_protocol.py @@ -288,7 +288,16 @@ def generate_evacuateandrefill_protocol( """ # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} # 硬编码重复次数为 3 repeats = 3 diff --git a/unilabos/compile/evaporate_protocol.py b/unilabos/compile/evaporate_protocol.py index 56228c2..ea15ae2 100644 --- a/unilabos/compile/evaporate_protocol.py +++ b/unilabos/compile/evaporate_protocol.py @@ -201,7 +201,16 @@ def generate_evaporate_protocol( """ # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} debug_print("🌟" * 20) debug_print("🌪️ 开始生成蒸发协议(支持单位和体积运算)✨") diff --git a/unilabos/compile/filter_protocol.py b/unilabos/compile/filter_protocol.py index 1767d85..a49c9b3 100644 --- a/unilabos/compile/filter_protocol.py +++ b/unilabos/compile/filter_protocol.py @@ -68,7 +68,16 @@ def generate_filter_protocol( """ # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} debug_print("🌊" * 20) debug_print("🚀 开始生成过滤协议(支持体积运算)✨") diff --git a/unilabos/compile/heatchill_protocol.py b/unilabos/compile/heatchill_protocol.py index ed96d53..4ed072f 100644 --- a/unilabos/compile/heatchill_protocol.py +++ b/unilabos/compile/heatchill_protocol.py @@ -217,7 +217,16 @@ def generate_heat_chill_protocol( """ # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} debug_print("🌡️" * 20) debug_print("🚀 开始生成加热冷却协议(支持vessel字典)✨") diff --git a/unilabos/compile/hydrogenate_protocol.py b/unilabos/compile/hydrogenate_protocol.py index 25c4c8f..6147fe0 100644 --- a/unilabos/compile/hydrogenate_protocol.py +++ b/unilabos/compile/hydrogenate_protocol.py @@ -170,7 +170,16 @@ def generate_hydrogenate_protocol( """ # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} action_sequence = [] diff --git a/unilabos/compile/recrystallize_protocol.py b/unilabos/compile/recrystallize_protocol.py index 7c15310..4b64c65 100644 --- a/unilabos/compile/recrystallize_protocol.py +++ b/unilabos/compile/recrystallize_protocol.py @@ -287,7 +287,16 @@ def generate_recrystallize_protocol( """ # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} action_sequence = [] diff --git a/unilabos/compile/separate_protocol.py b/unilabos/compile/separate_protocol.py index ec1f8af..f50f978 100644 --- a/unilabos/compile/separate_protocol.py +++ b/unilabos/compile/separate_protocol.py @@ -418,7 +418,16 @@ def generate_separate_protocol( raise ValueError("必须提供vessel字典参数") # 🔧 核心修改:从字典中提取容器ID - vessel_id = vessel["id"] + # 统一处理vessel参数 + if isinstance(vessel, dict): + if "id" not in vessel: + vessel_id = list(vessel.values())[0].get("id", "") + else: + vessel_id = vessel.get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} debug_print("🌀" * 20) debug_print("🚀 开始生成分离协议(支持vessel字典和体积运算)✨")