diff options
Diffstat (limited to 'tests/demo_blocks.py')
-rw-r--r-- | tests/demo_blocks.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/demo_blocks.py b/tests/demo_blocks.py new file mode 100644 index 0000000..3a5d5cb --- /dev/null +++ b/tests/demo_blocks.py @@ -0,0 +1,57 @@ +import gras +import numpy + +class add_2x(gras.Block): + def __init__(self, sig): + gras.Block.__init__(self, + name = "add 2x", + in_sig = [sig, sig], + out_sig = [sig], + ) + + def work(self, ins, outs): + nitems = min(*map(len, (ins[0], ins[1], outs[0]))) + outs[0][:nitems] = ins[0][:nitems] + ins[1][:nitems] + self.consume(0, nitems) + self.consume(1, nitems) + self.produce(0, nitems) + +class NullSource(gras.Block): + def __init__(self, out_sig): + gras.Block.__init__(self, 'NullSource', out_sig=[out_sig]) + + def work(self, ins, outs): + outs[0][:] = numpy.zeros(len(outs[0])) + self.produce(0, len(outs[0])) + +class NullSink(gras.Block): + def __init__(self, in_sig): + gras.Block.__init__(self, 'NullSink', in_sig=[in_sig]) + + def work(self, ins, outs): + self.consume(0, len(ins[0])) + +class VectorSource(gras.Block): + def __init__(self, out_sig, vec): + gras.Block.__init__(self, name='VectorSource', out_sig=[out_sig]) + self._vec = vec + + def work(self, ins, outs): + num = min(len(outs[0]), len(self._vec)) + outs[0][:num] = self._vec[:num] + self.produce(0, num) + self._vec = self._vec[num:] + if not self._vec: + self.mark_done() + +class VectorSink(gras.Block): + def __init__(self, in_sig): + gras.Block.__init__(self, name='VectorSink', in_sig=[in_sig]) + self._vec = list() + + def get_vector(self): + return tuple(self._vec) + + def work(self, ins, outs): + self._vec.extend(ins[0].copy()) + self.consume(0, len(ins[0])) |