mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-17 13:01:12 +00:00
重新规定了版位推荐的入参
This commit is contained in:
@@ -4,7 +4,7 @@ import contextlib
|
|||||||
import json
|
import json
|
||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
from typing import Any, List, Dict, Optional, TypedDict, Union, Sequence, Iterator, Literal
|
from typing import Any, List, Dict, Optional, Tuple, TypedDict, Union, Sequence, Iterator, Literal
|
||||||
|
|
||||||
from pylabrobot.liquid_handling import (
|
from pylabrobot.liquid_handling import (
|
||||||
LiquidHandlerBackend,
|
LiquidHandlerBackend,
|
||||||
@@ -1030,24 +1030,26 @@ class DefaultLayout:
|
|||||||
def add_lab_resource(self, material_info):
|
def add_lab_resource(self, material_info):
|
||||||
self.labresource = material_info
|
self.labresource = material_info
|
||||||
|
|
||||||
def recommend_layout(self, needs: Dict[str, int]) -> Dict[str, Any]:
|
def recommend_layout(self, needs: List[Tuple[str, str, int]]) -> Dict[str, Any]:
|
||||||
"""根据 needs 推荐布局"""
|
layout_list = []
|
||||||
for k, v in needs.items():
|
for reagent_name, material_name, count in needs:
|
||||||
if k not in self.labresource:
|
|
||||||
raise ValueError(f"Material {k} not found in lab resources.")
|
if material_name not in self.labresource:
|
||||||
|
raise ValueError(f"Material {reagent_name} not found in lab resources.")
|
||||||
|
|
||||||
# 预留位置12和16不动
|
# 预留位置12和16不动
|
||||||
reserved_positions = {12, 16}
|
reserved_positions = {12, 16}
|
||||||
available_positions = [i for i in range(1, 17) if i not in reserved_positions]
|
available_positions = [i for i in range(1, 17) if i not in reserved_positions]
|
||||||
|
|
||||||
# 计算总需求
|
# 计算总需求
|
||||||
total_needed = sum(needs.values())
|
total_needed = sum(count for _, _, count in needs)
|
||||||
if total_needed > len(available_positions):
|
if total_needed > len(available_positions):
|
||||||
raise ValueError(f"需要 {total_needed} 个位置,但只有 {len(available_positions)} 个可用位置(排除位置12和16)")
|
raise ValueError(f"需要 {total_needed} 个位置,但只有 {len(available_positions)} 个可用位置(排除位置12和16)")
|
||||||
|
|
||||||
# 依次分配位置
|
# 依次分配位置
|
||||||
current_pos = 0
|
current_pos = 0
|
||||||
for material_name, count in needs.items():
|
for reagent_name, material_name, count in needs:
|
||||||
|
|
||||||
material_uuid = self.labresource[material_name]['uuid']
|
material_uuid = self.labresource[material_name]['uuid']
|
||||||
material_enum = self.labresource[material_name]['materialEnum']
|
material_enum = self.labresource[material_name]['materialEnum']
|
||||||
|
|
||||||
@@ -1061,11 +1063,10 @@ class DefaultLayout:
|
|||||||
if tablet['Number'] == position:
|
if tablet['Number'] == position:
|
||||||
tablet['Material']['uuid'] = material_uuid
|
tablet['Material']['uuid'] = material_uuid
|
||||||
tablet['Material']['materialEnum'] = material_enum
|
tablet['Material']['materialEnum'] = material_enum
|
||||||
|
layout_list.append(dict(reagent_name=reagent_name, material_name=material_name, positions=position))
|
||||||
break
|
break
|
||||||
|
|
||||||
current_pos += 1
|
current_pos += 1
|
||||||
|
return self.default_layout, layout_list
|
||||||
return self.default_layout
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1530,17 +1531,17 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
layout = DefaultLayout("PRCXI9320")
|
layout = DefaultLayout("PRCXI9320")
|
||||||
layout.add_lab_resource(material_info)
|
layout.add_lab_resource(material_info)
|
||||||
MatrixLayout_1 = layout.recommend_layout({
|
MatrixLayout_1, dict_1 = layout.recommend_layout([
|
||||||
"96 细胞培养皿": 3,
|
("reagent_1", "96 细胞培养皿", 3),
|
||||||
"12道储液槽": 1,
|
("reagent_2", "12道储液槽", 1),
|
||||||
"200μL Tip头": 1,
|
("reagent_3", "200μL Tip头", 7),
|
||||||
"10μL加长 Tip头": 1,
|
("reagent_4", "10μL加长 Tip头", 1),
|
||||||
})
|
])
|
||||||
print(MatrixLayout_1)
|
print(dict_1)
|
||||||
MatrixLayout_2 = layout.recommend_layout({
|
MatrixLayout_2, dict_2 = layout.recommend_layout([
|
||||||
"96深孔板": 4,
|
("reagent_1", "96深孔板", 4),
|
||||||
"12道储液槽": 1,
|
("reagent_2", "12道储液槽", 1),
|
||||||
"200μL Tip头": 1,
|
("reagent_3", "200μL Tip头", 1),
|
||||||
"10μL加长 Tip头": 1,
|
("reagent_4", "10μL加长 Tip头", 1),
|
||||||
})
|
])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user