1
0
Files
LCRConnector/legacy/dataset.py

62 lines
2.1 KiB
Python
Raw Normal View History

2026-06-02 21:08:48 +08:00
from typing import Iterable
from pathlib import Path
from dataclasses import dataclass
from .common import LcrConnException, from_human_readable_value
@dataclass(frozen=True)
class DataSubset:
"""A list holding available device gauge values for resistor, capacitor or inductor"""
gauges: tuple[float, ...]
"""A list of available device gauge values"""
@staticmethod
def from_iterable(str_gauges: Iterable[str]) -> "DataSubset":
# Remove redundant parts
gauges_set: set[float] = set()
for str_gauge in str_gauges:
numeric_gauge = from_human_readable_value(str_gauge)
if numeric_gauge in gauges_set:
raise LcrConnException(f"Duplicate gauge value found: {str_gauge}")
else:
gauges_set.add(numeric_gauge)
# Return value
return DataSubset(tuple(gauges_set))
@staticmethod
def from_file(filename: Path) -> "DataSubset":
with open(filename, "r", encoding="utf-8") as f:
legal_lines = filter(lambda line: line != "", (line.strip() for line in f))
return DataSubset.from_iterable(legal_lines)
@dataclass(frozen=True)
class DataSet:
"""The dataset include 3 lists of available device gauge values for resistor, capacitor and inductor"""
resistor: DataSubset
"""A list of available device gauge values for resistor"""
capacitor: DataSubset
"""A list of available device gauge values for capacitor"""
inductor: DataSubset
"""A list of available device gauge values for inductor"""
@staticmethod
def from_iterable(
resistor: Iterable[str], capacitor: Iterable[str], inductor: Iterable[str]
) -> "DataSet":
return DataSet(
DataSubset.from_iterable(resistor),
DataSubset.from_iterable(capacitor),
DataSubset.from_iterable(inductor),
)
@staticmethod
def from_file(resistor: Path, capacitor: Path, inductor: Path) -> "DataSet":
return DataSet(
DataSubset.from_file(resistor),
DataSubset.from_file(capacitor),
DataSubset.from_file(inductor),
)