| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import base64
- import unittest
- import numpy as np
- from nmr_processor import NMRParams, decode_hardware_json
- def _b64_from_int16(values):
- arr = np.asarray(values, dtype=np.int16)
- return base64.b64encode(arr.tobytes()).decode("ascii")
- class DecodeHardwareJsonTests(unittest.TestCase):
- def test_scalar_points_and_rate(self):
- data = [{
- "averaging_num": 0,
- "data_num": 0,
- "measurement_rate": 8_000_000,
- "measurement_points": 4,
- "channel_data": [
- {"channel_num": 1, "channel_data": _b64_from_int16([1, 2, 3, 4, 5])}
- ],
- }]
- signal, sample_rate = decode_hardware_json(data, NMRParams(channel_num=1))
- self.assertEqual(len(signal), 4)
- self.assertEqual(sample_rate, 8_000_000.0)
- def test_list_points_selected_by_channel(self):
- data = [{
- "averaging_num": 0,
- "data_num": 0,
- "measurement_rate": 8_000_000,
- "measurement_points": [3, 5],
- "channel_data": [
- {"channel_num": 1, "channel_data": _b64_from_int16([10, 20, 30, 40, 50, 60])}
- ],
- }]
- signal, sample_rate = decode_hardware_json(data, NMRParams(channel_num=1))
- self.assertEqual(len(signal), 5)
- self.assertEqual(sample_rate, 8_000_000.0)
- def test_list_rate_selected_by_channel(self):
- data = [{
- "averaging_num": 0,
- "data_num": 0,
- "measurement_rate": [4_000_000, 8_000_000],
- "measurement_points": [3, 3],
- "channel_data": [
- {"channel_num": 1, "channel_data": _b64_from_int16([10, 20, 30])}
- ],
- }]
- signal, sample_rate = decode_hardware_json(data, NMRParams(channel_num=1))
- self.assertEqual(len(signal), 3)
- self.assertEqual(sample_rate, 8_000_000.0)
- def test_out_of_range_channel_points_raises_clear_error(self):
- data = [{
- "averaging_num": 0,
- "data_num": 0,
- "measurement_rate": 8_000_000,
- "measurement_points": [3],
- "channel_data": [
- {"channel_num": 1, "channel_data": _b64_from_int16([10, 20, 30])}
- ],
- }]
- with self.assertRaisesRegex(
- ValueError,
- r"measurement_points.*channel_num=1",
- ):
- decode_hardware_json(data, NMRParams(channel_num=1))
- def test_out_of_range_channel_rate_raises_clear_error(self):
- data = [{
- "averaging_num": 0,
- "data_num": 0,
- "measurement_rate": [8_000_000],
- "measurement_points": [3, 3],
- "channel_data": [
- {"channel_num": 1, "channel_data": _b64_from_int16([10, 20, 30])}
- ],
- }]
- with self.assertRaisesRegex(
- ValueError,
- r"measurement_rate.*channel_num=1",
- ):
- decode_hardware_json(data, NMRParams(channel_num=1))
- if __name__ == "__main__":
- unittest.main()
|