def test_channelizetask(self): """Test channelization task.""" ct = Channelize(self.fh, self.n) # Channelize everything. data1 = ct.read() assert ct.tell() == ct.shape[0] assert (ct.time - ct.start_time - ct.shape[0] / ct.sample_rate) < 1*u.ns assert ct.dtype is self.ref_data.dtype is data1.dtype assert np.all(self.ref_data == data1) # Seeking and selective decode. ct.seek(-3, 2) assert ct.tell() == ct.shape[0] - 3 data2 = ct.read() assert data2.shape[0] == 3 assert np.all(self.ref_data[-3:] == data2) ct.seek(-2, 2) with pytest.raises(EOFError): ct.read(10) ct.close() assert ct.closed with pytest.raises(ValueError): ct.read(1) with pytest.raises(AttributeError): ct.ih
def test_channelize_samples_per_frame(self, samples_per_frame): """Test channelization task.""" ct = Channelize(self.fh, self.n, samples_per_frame=samples_per_frame) # Channelize everything. data1 = ct.read() assert len(data1) % samples_per_frame == 0 assert (len(data1) // samples_per_frame == len(self.ref_data) // samples_per_frame) ref_data = self.ref_data[:len(data1)] assert np.all(data1 == ref_data) # Seeking and selective decode. ct.seek(-3, 2) assert ct.tell() == ct.shape[0] - 3 data2 = ct.read() assert data2.shape[0] == 3 assert np.all(data2 == ref_data[-3:])
def test_dechannelizetask_complex(self): """Test dechannelization round-tripping.""" fh = self.fh_freq raw_data = fh.read() ct = Channelize(fh, self.n) dt = Dechannelize(ct) nrec = (fh.shape[0] // self.n) * self.n assert dt.shape == (nrec,) + fh.shape[1:] data = dt.read() # Note: round-trip is not perfect due to rounding errors. assert np.allclose(data, raw_data[:nrec], atol=1.e-5) assert np.all(dt.frequency == fh.frequency) assert np.all(dt.sideband == fh.sideband) # Check class method dt2 = ct.inverse(ct) data2 = dt2.read() assert np.all(data2 == data) # Check inverse inverse as well. ct2 = dt2.inverse(fh) ct.seek(0) ft = ct.read() ft2 = ct2.read() assert np.all(ft == ft2) dt2.close()