示例#1
0
 def test_single_block_multi_copy(self):
     """Test which forces one block to do multiple
         copies at once, and then dumps to two files,
         checking them both."""
     logfiles = ['.log1.txt', '.log2.txt']
     self.blocks.append((CopyBlock(), [0], [1, 2]))
     self.blocks.append((WriteAsciiBlock(logfiles[0]), [1], []))
     self.blocks.append((WriteAsciiBlock(logfiles[1]), [2], []))
     Pipeline(self.blocks).main()
     test_bytes = int(open(logfiles[0], 'r').read(1)) + int(
         open(logfiles[1], 'r').read(1))
     self.assertEqual(test_bytes, 4)
示例#2
0
 def test_simple_half_split(self):
     """Try to split up a single array in half, and dump to file"""
     blocks = []
     blocks.append([TestingBlock([1, 2]), [], [0]])
     blocks.append([SplitterBlock([[0], [1]]), {'in': 0, 'out_1': 1, 'out_2': 2}])
     blocks.append([WriteAsciiBlock('.log1.txt', gulp_size=4), [1], []])
     blocks.append([WriteAsciiBlock('.log2.txt', gulp_size=4), [2], []])
     Pipeline(blocks).main()
     first_log = np.loadtxt('.log1.txt')
     second_log = np.loadtxt('.log2.txt')
     self.assertEqual(first_log.size, 1)
     self.assertEqual(second_log.size, 1)
     np.testing.assert_almost_equal(first_log + 1, second_log)
示例#3
0
 def setUp(self):
     """Set up a pipeline for a numpy operation in the middle"""
     self.blocks = []
     self.test_array = [1, 2, 3, 4]
     self.blocks.append((TestingBlock(self.test_array), [], [0]))
     self.blocks.append((WriteAsciiBlock('.log.txt'), [1], []))
     self.expected_result = []
示例#4
0
 def setUp(self):
     """Assemble a basic pipeline with the FFT block"""
     self.logfile = '.log.txt'
     self.blocks = []
     self.blocks.append(
         (SigprocReadBlock('./data/1chan8bitNoDM.fil'), [], [0]))
     self.blocks.append((FFTBlock(gulp_size=4096 * 8 * 8 * 8), [0], [1]))
     self.blocks.append((WriteAsciiBlock(self.logfile), [1], []))
示例#5
0
 def dump_ring_and_read(self):
     """Dump block to ring, read in as histogram"""
     logfile = ".log.txt"
     self.blocks.append((WriteAsciiBlock(logfile), [1], []))
     Pipeline(self.blocks).main()
     test_bytes = open(logfile, 'r').read().split(' ')
     histogram = np.array([np.float(x) for x in test_bytes])
     return histogram
示例#6
0
 def test_throughput(self):
     """Read in data with a small throughput size. Expect all to go through."""
     blocks = []
     blocks.append((SigprocReadBlock('./data/1chan8bitNoDM.fil',
                                     gulp_nframe=4096), [], [0]))
     blocks.append((WriteAsciiBlock('.log.txt'), [0], []))
     Pipeline(blocks).main()
     log_data = np.loadtxt('.log.txt')
     self.assertEqual(log_data.size, 12800)
示例#7
0
 def test_simple_copy(self):
     """Test which performs a read of a sigproc file,
         copy to one ring, and then output as text."""
     logfile = '.log.txt'
     self.blocks.append((CopyBlock(), [0], [1]))
     self.blocks.append((WriteAsciiBlock(logfile), [1], []))
     Pipeline(self.blocks).main()
     test_byte = open(logfile, 'r').read(1)
     self.assertEqual(test_byte, '2')
示例#8
0
 def test_naming_rings(self):
     """Name the rings instead of numerating them"""
     blocks = []
     blocks.append((TestingBlock([1, 2, 3]), [], ['ring1']))
     blocks.append((WriteAsciiBlock('.log.txt', gulp_size=3 * 4), ['ring1'], []))
     open('.log.txt', 'w').close()
     Pipeline(blocks).main()
     result = np.loadtxt('.log.txt').astype(np.float32)
     np.testing.assert_almost_equal(result, [1, 2, 3])
示例#9
0
 def test_multi_dimensional_input(self):
     """Input a 2 dimensional list, and have this printed"""
     test_array = [[1, 2], [3, 4]]
     self.blocks[0] = (WriteAsciiBlock('.log.txt', gulp_size=4*4), [0], [])
     self.blocks.append((TestingBlock(test_array), [], [0]))
     self.blocks.append((WriteHeaderBlock('.log2.txt'), [0], []))
     Pipeline(self.blocks).main()
     header = eval(open('.log2.txt').read()) #pylint:disable=eval-used
     dumped_numbers = np.loadtxt('.log.txt').reshape(header['shape'])
     np.testing.assert_almost_equal(dumped_numbers, test_array)
示例#10
0
 def test_multi_copy(self):
     """Test which performs a read of a sigproc file,
         copy between many rings, and then output as
         text."""
     logfile = '.log.txt'
     for i in range(10):
         self.blocks.append((CopyBlock(), [i], [i + 1]))
     self.blocks.append((WriteAsciiBlock(logfile), [10], []))
     Pipeline(self.blocks).main()
     test_byte = open(logfile, 'r').read(1)
     self.assertEqual(test_byte, '2')
示例#11
0
 def test_data_throughput(self):
     """Check that data is being put through the block
     (does this by checking consistency of shape/datatype)"""
     blocks = []
     blocks.append((SigprocReadBlock('./data/1chan8bitNoDM.fil'), [], [0]))
     blocks.append((KurtosisBlock(), [0], [1]))
     blocks.append((WriteAsciiBlock('.log.txt'), [1], []))
     Pipeline(blocks).main()
     test_byte = open('.log.txt', 'r').read().split(' ')
     test_nums = np.array([float(x) for x in test_byte])
     self.assertLess(np.max(test_nums), 256)
     self.assertEqual(test_nums.size, 12800)
示例#12
0
 def test_pass_rings(self):
     """Pass rings entirely instead of naming/numerating them"""
     block_set_one = []
     block_set_two = []
     ring1 = Ring()
     block_set_one.append((TestingBlock([1, 2, 3]), [], [ring1]))
     block_set_two.append((WriteAsciiBlock('.log.txt', gulp_size=3 * 4), [ring1], []))
     open('.log.txt', 'w').close()
     Pipeline(block_set_one).main() # The ring should communicate between the pipelines
     Pipeline(block_set_two).main()
     result = np.loadtxt('.log.txt').astype(np.float32)
     np.testing.assert_almost_equal(result, [1, 2, 3])
示例#13
0
 def test_32bit_copy(self):
     """Perform a simple test to confirm that 32 bit
         copying has no information loss"""
     logfile = '.log.txt'
     self.blocks = []
     self.blocks.append(
         (SigprocReadBlock('./data/256chan32bitNoDM.fil'), [], [0]))
     self.blocks.append((CopyBlock(), [0], [1]))
     self.blocks.append((WriteAsciiBlock(logfile), [1], []))
     Pipeline(self.blocks).main()
     test_bytes = open(logfile, 'r').read(500).split(' ')
     self.assertAlmostEqual(np.float(test_bytes[0]), 0.72650784254)
示例#14
0
 def test_simple_ifft(self):
     """Put test data through a ring buffer and check correctness"""
     self.logfile = '.log.txt'
     self.blocks = []
     test_array = [1, 2, 3]
     self.blocks.append((TestingBlock(test_array), [], [0]))
     self.blocks.append((IFFTBlock(gulp_size=3 * 4), [0], [1]))
     self.blocks.append((WriteAsciiBlock(self.logfile), [1], []))
     open(self.logfile, 'w').close()
     Pipeline(self.blocks).main()
     true_result = np.fft.ifft(test_array)
     result = np.loadtxt(self.logfile).astype(np.float32).view(np.complex64)
     np.testing.assert_almost_equal(result, true_result, 2)
示例#15
0
 def test_equivalent_data_to_copy(self):
     """Test that the data coming out of this pipeline is equivalent
     the initial read data"""
     self.logfile = '.log.txt'
     self.blocks = []
     self.blocks.append((
         SigprocReadBlock(
             './data/1chan8bitNoDM.fil'),
         [], [0]))
     self.blocks.append((FFTBlock(gulp_size=4096 * 8 * 8 * 8 * 8), [0], [1]))
     self.blocks.append((IFFTBlock(gulp_size=4096 * 8 * 8 * 8 * 8), [1], [2]))
     self.blocks.append((WriteAsciiBlock(self.logfile), [2], []))
     open(self.logfile, 'w').close()
     Pipeline(self.blocks).main()
     unfft_result = np.loadtxt(self.logfile).astype(np.float32).view(np.complex64)
     self.blocks[1] = (CopyBlock(), [0], [1])
     self.blocks[2] = (WriteAsciiBlock(self.logfile), [1], [])
     del self.blocks[3]
     open(self.logfile, 'w').close()
     Pipeline(self.blocks).main()
     untouched_result = np.loadtxt(self.logfile).astype(np.float32)
     np.testing.assert_almost_equal(unfft_result, untouched_result, 2)
示例#16
0
 def test_for_bad_ring_definitions(self):
     """Try to pass bad input and outputs"""
     blocks = []
     blocks.append([TestingBlock([1, 2]), [], [0]])
     blocks.append([
         MultiAddBlock(),
         {'in_2': 0, 'out_sum': 1}])
     blocks.append([WriteAsciiBlock('.log.txt'), [1], []])
     with self.assertRaises(AssertionError):
         Pipeline(blocks).main()
     blocks[1] = [
         MultiAddBlock(),
         {'bad_ring_name': 0, 'in_2': 0, 'out_sum': 1}]
     with self.assertRaises(AssertionError):
         Pipeline(blocks).main()
示例#17
0
 def test_non_linear_multi_copy(self):
     """Test which reads in a sigproc file, and
         loads it between different rings in a
         nonlinear fashion, then outputs to file."""
     logfile = '.log.txt'
     self.blocks.append((CopyBlock(), [0], [1]))
     self.blocks.append((CopyBlock(), [0], [2]))
     self.blocks.append((CopyBlock(), [2], [5]))
     self.blocks.append((CopyBlock(), [0], [3]))
     self.blocks.append((CopyBlock(), [3], [4]))
     self.blocks.append((CopyBlock(), [5], [6]))
     self.blocks.append((WriteAsciiBlock(logfile), [6], []))
     Pipeline(self.blocks).main()
     log_nums = open(logfile, 'r').read(500).split(' ')
     test_num = np.float(log_nums[8])
     self.assertEqual(test_num, 3)
示例#18
0
 def setUp(self):
     """Initiate blocks list with write asciiBlock"""
     self.blocks = []
     self.blocks.append((WriteAsciiBlock('.log.txt', gulp_size=3 * 4),
                         [0], []))