diff options
m--------- | gnuradio | 0 | ||||
-rw-r--r-- | include/gras/element.i | 1 | ||||
-rw-r--r-- | python/gras/GRAS_Block.i | 4 | ||||
-rw-r--r-- | python/gras/GRAS_HierBlock.i | 17 | ||||
-rw-r--r-- | tests/block_test.py | 44 |
5 files changed, 29 insertions, 37 deletions
diff --git a/gnuradio b/gnuradio -Subproject 90978da3a08a3485ada59f3ca32fe3da97d4bf0 +Subproject 74a4b20e13093c253ce2f80ae567d44910f2f03 diff --git a/include/gras/element.i b/include/gras/element.i index d0067a3..dfe4852 100644 --- a/include/gras/element.i +++ b/include/gras/element.i @@ -34,7 +34,6 @@ { return ($self)->get() == rhs.get(); } - } #endif /*INCLUDED_GRAS_ELEMENT_I*/ diff --git a/python/gras/GRAS_Block.i b/python/gras/GRAS_Block.i index 2aa1166..e5d112a 100644 --- a/python/gras/GRAS_Block.i +++ b/python/gras/GRAS_Block.i @@ -227,11 +227,15 @@ def YieldTagIter(iter): srcid=PMC2Py(t.srcid), ) +#FIXME major kludge for ref holding +blocks_ref_container = list() + class Block(BlockPython): def __init__(self, name='Block', in_sig=None, out_sig=None): BlockPython.__init__(self, name) self.set_input_signature(in_sig) self.set_output_signature(out_sig) + blocks_ref_container.append(self) def set_input_signature(self, sig): self.__in_sig = sig_to_dtype_sig(sig) diff --git a/python/gras/GRAS_HierBlock.i b/python/gras/GRAS_HierBlock.i index d81536c..328317c 100644 --- a/python/gras/GRAS_HierBlock.i +++ b/python/gras/GRAS_HierBlock.i @@ -135,12 +135,11 @@ def to_element(obj): try: return obj.shared_to_element() except: raise Exception('cant coerce obj %s to element'%(obj)) -def internal_connect__(fcn, obj, refs, action, *args): +def internal_connect__(fcn, obj, *args): if len(args) == 1: elem = (args[0]) fcn(obj, elem) - if elem != to_element(obj): action(refs, elem) return for src, sink in zip(args, args[1:]): @@ -155,30 +154,24 @@ def internal_connect__(fcn, obj, refs, action, *args): fcn(obj, src, src_index, sink, sink_index) - #incr/decr the python obj ref counts - if src != to_element(obj): action(refs, src) - if sink != to_element(obj): action(refs, sink) - class TopBlock(TopBlockPython): def __init__(self, *args, **kwargs): TopBlockPython.__init__(self, *args, **kwargs) - self.__refs = list() def connect(self, *args): - return internal_connect__(TopBlockPython.connect, self, self.__refs, list.append, *args) + return internal_connect__(TopBlockPython.connect, self, *args) def disconnect(self, *args): - return internal_connect__(TopBlockPython.disconnect, self, self.__refs, list.remove, *args) + return internal_connect__(TopBlockPython.disconnect, self, *args) class HierBlock(HierBlockPython): def __init__(self, *args, **kwargs): HierBlockPython.__init__(self, *args, **kwargs) - self.__refs = list() def connect(self, *args): - return internal_connect__(HierBlockPython.connect, self, self.__refs, list.append, *args) + return internal_connect__(HierBlockPython.connect, self, *args) def disconnect(self, *args): - return internal_connect__(HierBlockPython.disconnect, self, self.__refs, list.remove, *args) + return internal_connect__(HierBlockPython.disconnect, self, *args) %} diff --git a/tests/block_test.py b/tests/block_test.py index f7e18e4..ed6e97d 100644 --- a/tests/block_test.py +++ b/tests/block_test.py @@ -7,51 +7,49 @@ from demo_blocks import * class BlockTest(unittest.TestCase): + def setUp(self): + self.tb = gras.TopBlock() + + def tearDown(self): + self.tb = None + def test_vector_blocks(self): vec_source = VectorSource(numpy.uint32, [0, 9, 8, 7, 6]) vec_sink = VectorSink(numpy.uint32) - tb = gras.TopBlock() - tb.connect(vec_source, vec_sink) - tb.run() - tb = None + self.tb.connect(vec_source, vec_sink) + self.tb.run() self.assertEqual(vec_sink.get_vector(), (0, 9, 8, 7, 6)) def test_add_f32(self): - tb = gras.TopBlock() src0 = VectorSource(numpy.float32, [1, 3, 5, 7, 9]) src1 = VectorSource(numpy.float32, [0, 2, 4, 6, 8]) adder = Add2X(numpy.float32) sink = VectorSink(numpy.float32) - tb.connect((src0, 0), (adder, 0)) - tb.connect((src1, 0), (adder, 1)) - tb.connect(adder, sink) - tb.run() - tb = None + self.tb.connect((src0, 0), (adder, 0)) + self.tb.connect((src1, 0), (adder, 1)) + self.tb.connect(adder, sink) + self.tb.run() self.assertEqual(sink.get_vector(), (1, 5, 9, 13, 17)) def test_add_fc32(self): - tb = gras.TopBlock() src0 = VectorSource(numpy.complex64, [1, 3j, 5, 7j, 9]) src1 = VectorSource(numpy.complex64, [0, 2j, 4, 6j, 8]) adder = Add2X(numpy.complex64) sink = VectorSink(numpy.complex64) - tb.connect((src0, 0), (adder, 0)) - tb.connect((src1, 0), (adder, 1)) - tb.connect(adder, sink) - tb.run() - tb = None + self.tb.connect((src0, 0), (adder, 0)) + self.tb.connect((src1, 0), (adder, 1)) + self.tb.connect(adder, sink) + self.tb.run() self.assertEqual(sink.get_vector(), (1, 5j, 9, 13j, 17)) def test_tag_source_sink(self): values = (0, 'hello', 4.2, True, None, [2, 3, 4], (9, 8, 7), 1j, {2:'d'}) - tb = gras.TopBlock() src = TagSource(values) sink = TagSink() - tb.connect(src, sink) - tb.run() - tb = None + self.tb.connect(src, sink) + self.tb.run() self.assertEqual(sink.get_values(), values) def test_ro_buffers(self): @@ -69,10 +67,8 @@ class BlockTest(unittest.TestCase): source = VectorSource(numpy.uint32, [0, 9, 8, 7, 6]) sink = BadTouch(numpy.uint32) - tb = gras.TopBlock() - tb.connect(source, sink) - tb.run() - tb = None + self.tb.connect(source, sink) + self.tb.run() if __name__ == '__main__': unittest.main() |