""" Module to handle a Qucs Dataset result file. """ import re import numpy as np import pprint as pp class QucsData: """ Read an store a result file writen by Qucsator. """ def __init__(self, filename): # source dataset self.filename = filename # qucsator version that generated the data self.version = '' # list of all variable names self.names = [] # data[name] = array self.data = {} # data dependent[name]=list(names) self.dependent = {} # parse self.read(self.filename) def __str__(self): """ Print self. """ pr = '' pr += 'File name: %s\n' %self.filename pr += 'names:\n' for name in self.names: pr += ' \'%s\': shape %s\n' %(name, self.data[name].shape) pr += 'dependent: \n' pr += pp.pformat(self.dependent, indent=4) pr += '\n' return pr def read(self,fileName): """ Qucs Dataset parser. """ variable = '' with open(fileName) as qucsdata: for line in qucsdata: # header r = re.match(r'\', line) if r: self.version = r.group(1) if '")) r = re.match(r'(\S+) (\S+) (\d+)', line.translate(stripbrackets)) kind, identifier, size = r.groups() # collect identifiers self.names.append(identifier) variable = identifier continue # next line if '")) r = re.findall('(\S+)', line.translate(stripbrackets)) identifier = r[1] self.dependent[identifier]= r[2:] self.names.append(identifier) variable = identifier continue # next line if ' 2 # shape = [] for dep in self.dependent[variable]: size = len(self.data[dep]) shape.append (size) values = np.array(self.data[variable]) self.data[variable] = values.reshape(tuple(shape),order='F') variable = '' continue # next line if variable: # collect data from line into temporary list if variable not in self.data.keys(): self.data[variable] = [] value = line.strip() if ('j' in value): # put imaginary to the end value = value.replace("j","") value = value+'j' value = complex(value) else: value = float(value) self.data[variable].append(value)