diff options
Diffstat (limited to 'ee/__init__.py')
-rw-r--r-- | ee/__init__.py | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/ee/__init__.py b/ee/__init__.py deleted file mode 100644 index 08a283c..0000000 --- a/ee/__init__.py +++ /dev/null @@ -1,120 +0,0 @@ -import sympy -import numpy as np - -__all__ = [ - 'read_ltspice_raw' -] - -class LtSpiceRaw(object): - def __init__(self, variables, values): - self.variables = variables - self.values = values - - def get_values(self, variable): - return self.values[variable.idx] - - def get_variable(self, idx=None, expression=None): - if idx is not None: - return self.variables[idx] - if expression is not None: - v = [v for v in self.variables if v.expression == expression] - if len(v) != 1: - raise Exception('Unknown variable: ' + str(variable)) - return v[0] - raise Exception('idx or expression must be given') - -class LtSpiceVariable(object): - def __init__(self, idx, expression, kind): - self.idx = idx - self.expression = expression - self.kind = kind - -class LtSpiceReader(object): - - def __init__(self, f): - self.f = f - self.mode = 'header' - self.headers = {} - self.variables = [] - self.values = [] - - def read_header(self, line): - sep = line.find(':') - key = line[0:sep] - value = line[sep + 1:].strip() - -# print("key='{}', value='{}'".format(key, str(value))) - - if key == 'Binary': - self.set_binary_mode() - elif key == 'Variables': - self.no_variables = int(self.headers['No. Variables']) - self.mode = 'variables' - else: - self.headers[key] = value - - def read_variable(self, line): - parts = line.split('\t') - idx = int(parts[1]) - expression = parts[2] - kind = parts[3] - self.variables.append(LtSpiceVariable(idx, expression, kind)) - - if len(self.variables) == self.no_variables: - self.mode = 'header' - - def set_binary_mode(self): - self.mode = 'binary' - - def read_binary(self): - pos = self.f.tell() - no_points = int(self.headers['No. Points']) - no_variables = int(self.headers['No. Variables']) -# print("variables={}, no_points={}, pos={}".format(no_variables, no_points, pos)) - self.values = vs = np.zeros((no_variables, no_points)) - for p in range(no_points): - vs[0][p] = np.fromfile(self.f, count=1, dtype='float64') - pointdata = np.fromfile(self.f, count=no_variables - 1, dtype='float32') -# print("value={:0=0.15e}".format(vs[0][p])) - for v in range(1, no_variables): -# print("p={}, v={}".format(p, v)) -# print(" value={:0=0.15e}".format(pointdata[v - 1])) - vs[v][p] = pointdata[v - 1] - - def read(self): - while True: - line = self.f.readline(); - - if len(line) == 0: - break - - self.f.read(1) # The data is utf16 encoded so read the extra null byte - - # if this wasn't the last line .readline() includes the newline - if line[-1] == '\n' or line[-1] == 0x0a: - line = line[:-1] - - print("len(line)={}, line={}".format(len(line), str(line))) - line = line.decode(encoding="utf-16") - - if self.mode == 'header': - self.read_header(line) - elif self.mode == 'variables': - self.read_variable(line) - - # The binary data can't be read with readline() - if self.mode == 'binary': -# self.f.read() - self.read_binary() - break - - if len(self.variables) == 0: - raise Exception("Something didn't quite work when parsing file, no variables found") - - return LtSpiceRaw(self.variables, self.values) - -def read_ltspice_raw(filename): - - with open(filename, mode="rb") as f: - r = LtSpiceReader(f) - return r.read() |