class Waveform(ReadonlyRegisterBase, ReadonlyRegisterArray): def doRead(self): time.sleep(0.001) #self.val = to_array(self.calc(), 'd') return self.calc() def getSize(self): return len(self.take(-1)) #only reads if cache is None class SinusoidWaveform(Waveform): def calc(self): ret = [] x = random.random() for i in range (20): ret.append(math.sin(x)) x = x + 0.1 return ret add_device(SinusoidWaveform("wf1"), True) r3 = lscan(out, (wf1,), 0.0,1.0, 4, 0.01)