Source code for labscheduler.dev_tools.utilities

import logging

import yaml

from labscheduler.structures import Machine

logger = logging.getLogger(__name__)


[docs] def parse_jobshop_from_yaml_file(yaml_file: str) -> list[Machine]: """ Parses a YAML file to create a list of Machine objects. The YAML file should contain a dictionary with two keys: - pythonlab_translation: a dictionary mapping device types to their corresponding classes - sila_servers: a dictionary where each key is a device type and the value is a list of devices with their parameters. Each device in the sila_servers list should have a name and a dictionary of parameters, including capacity, min_capacity, process_capacity, and allows_overlap. The function returns a list of Machine objects created from the data in the YAML file. """ config_dict = yaml.safe_load(yaml_file) pythonlab_translation = dict(config_dict["pythonlab_translation"]) job_shop = [] for device_type, device_list in config_dict["sila_servers"].items(): device_class = pythonlab_translation[device_type] for device_name, param_dict in device_list.items(): max_capacity = param_dict["capacity"] min_capacity = param_dict.get("min_capacity", 1) process_capacity = param_dict.get("process_capacity", max_capacity) allows_overlap = bool(param_dict["allows_overlap"]) if "allows_overlap" in param_dict else True job_shop.append( Machine( name=device_name, max_capacity=max_capacity, type=device_class, min_capacity=min_capacity, process_capacity=process_capacity, allows_overlap=allows_overlap, ), ) logger.info("Available instruments:") for m in job_shop: logger.info(m) return job_shop