summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------gnuradio0
-rw-r--r--include/gras/element.i1
-rw-r--r--python/gras/GRAS_Block.i4
-rw-r--r--python/gras/GRAS_HierBlock.i17
-rw-r--r--tests/block_test.py44
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()