code: def test_round_trip_pack_unpack(self, nbits, data_dtype, element_num):
      is_data_signed = np.issubdtype(data_dtype, np.signedinteger)
      low, high = 0, 2**nbits
      if is_data_signed:
          low, high = -(2 ** (nbits - 1)), 2 ** (nbits - 1)
      original_data = np.random.randint(
          low=low, high=high, size=(element_num,)
      ).astype(data_dtype)
      packed_data = pack_elements_into_bits(original_data, nbits)
      restored_data = restore_elements_from_packed_bits(
          packed_data,
          nbits,
          element_num,
          are_packed_values_signed=is_data_signed,
      )
      np.testing.assert_array_equal(restored_data, original_data)
  
imports: import itertools
  import numpy
  import pytest
  from coremltools.converters.mil.mil.ops.defs._utils import aggregated_pad, effective_kernel, pack_elements_into_bits, restore_elements_from_packed_bits, spatial_dimensions_out_shape
label_desc: Use image node_id 3 for calling the TestPackUnpackBits obj's underlying member method code with example usage: obj.test_round_trip_pack_unpack(nbits, data_dtype, element_num) without return types