From ee006e4a3f726c527cacf0e5fd9c56d21cc61d79 Mon Sep 17 00:00:00 2001 From: Grzegorz Latosinski Date: Wed, 25 Nov 2020 18:53:14 +0100 Subject: [PATCH] base: added method for parsing bins.csv files Signed-off-by: Grzegorz Latosinski --- .../python-skywater-pdk/skywater_pdk/base.py | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/scripts/python-skywater-pdk/skywater_pdk/base.py b/scripts/python-skywater-pdk/skywater_pdk/base.py index bcfc7e8..bbc4d00 100644 --- a/scripts/python-skywater-pdk/skywater_pdk/base.py +++ b/scripts/python-skywater-pdk/skywater_pdk/base.py @@ -22,12 +22,16 @@ import os from dataclasses import dataclass from dataclasses_json import dataclass_json from enum import Enum -from typing import Optional, Union, Tuple +from typing import Optional, Union, Tuple, List +from collections import namedtuple +from pathlib import Path +import csv from .utils import comparable_to_none from .utils import dataclass_json_passthru_config as dj_pass_cfg +FETBin = namedtuple('FETBin', ['device', 'bin', 'w', 'l']) LibraryOrCell = Union['Library', 'Cell'] @@ -545,6 +549,24 @@ class Cell: self)) return "{}__{}".format(self.library.fullname, self.name) + @classmethod + def parse_bins(cls, binsfile) -> List[FETBin]: + """ + Parse bins.csv file. + + Parameters + ---------- + binsfile: path to the bins.csv file + """ + with open(binsfile, 'r') as f: + reader = csv.reader(f) + next(reader) + res = [] + for line in reader: + res.append(FETBin(line[0], int(line[1]), float(line[2]), float(line[3]))) + return res + + @classmethod def parse(cls, s): kw = {} @@ -555,7 +577,6 @@ class Cell: return cls(**kw) - if __name__ == "__main__": import doctest doctest.testmod()