def test_export_eclab_ascii_format(self): # define dummy experiment # it is quicker than building an actual EIS experiment class DummyExperiment(Experiment): def __new__(cls, *args, **kwargs): return object.__new__(DummyExperiment) def __init__(self, ptree): Experiment.__init__(self) dummy = DummyExperiment(PropertyTree()) # produce dummy data for the experiment # here just a circle on the complex plane n = 10 f = ones(n, dtype=float) Z = ones(n, dtype=complex) for i in range(n): f[i] = 10**(i / (n - 1)) Z[i] = cos(2 * pi * i / (n - 1)) + 1j * sin(2 * pi * i / (n - 1)) dummy._data['frequency'] = f dummy._data['impedance'] = Z # need a supercapacitor here to make sure method inspect() is kept in # sync with the EC-Lab headers ptree = PropertyTree() ptree.parse_info('super_capacitor.info') super_capacitor = EnergyStorageDevice(ptree) dummy._extra_data = super_capacitor.inspect() # export the data to ECLab format eclab = ECLabAsciiFile('untitled.mpt') eclab.update(dummy) # check that all lines end up with Windows-style line break '/r/n' # file need to be open in byte mode or the line ending will be # converted to '\n'... # also check that the number of lines in the headers has been computed # correctly and that the last one contains the column headers with open('untitled.mpt', mode='rb') as fin: lines = fin.readlines() for line in lines: self.assertNotEqual(line.find(b'\r\n'), -1) self.assertNotEqual(line.find(b'\r\n'), len(line) - 4) header_lines = int(lines[1].split( b':')[1].lstrip(b'').rstrip(b'\r\n')) self.assertEqual( header_lines, len(eclab._unformated_headers) ) self.assertEqual(lines[header_lines - 1].find(b'freq/Hz'), 0) # check Nyquist plot does not throw nyquist = NyquistPlot('nyquist.png') nyquist.update(dummy)
def check_input(device, experiment): experiment._extra_data = device.inspect() dummy = ECLabAsciiFile('dummy') dummy.update(experiment) with open('dummy', 'r', encoding='latin-1') as fin: lines = fin.readlines() for line in lines[7:-1]: print(line.rstrip('\n')) remove('dummy') print('continue? [Y/n]') yes = set(['yes', 'y', '']) no = set(['no', 'n']) while True: answer = input().lower() if answer in yes: break elif answer in no: exit(0) else: print("Please respond with 'yes' or 'no'")