docstr: Original data: [-8, 7, 3, 4, -2].
  The 4-bit binary representation for those elements are:
      -8: 1000;
       7: 0111;
       3: 0011
       4: 0100
      -2: 1110
  Hence the packed quantized_data will be 3 bytes long, i.e., 24 bits long, which is:
      0111 1000  0100 0011  0000 1110
  So the packed data is represented by 3 uint8 values: [120, 67, 14].
code: def test_pack_basic(self):
      """
      Original data: [-8, 7, 3, 4, -2].
      The 4-bit binary representation for those elements are:
          -8: 1000;
           7: 0111;
           3: 0011
           4: 0100
          -2: 1110
      Hence the packed quantized_data will be 3 bytes long, i.e., 24 bits long, which is:
          0111 1000  0100 0011  0000 1110
      So the packed data is represented by 3 uint8 values: [120, 67, 14].
      """
      original_data = np.array([-8, 7, 3, 4, -2], dtype=np.int8)
      expected_packed_data = np.array([120, 67, 14], dtype=np.uint8)
      packed_data = pack_elements_into_bits(original_data, nbits=4)
      np.testing.assert_array_equal(packed_data, expected_packed_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 1 for calling the TestPackUnpackBits obj's underlying member method code with example usage: obj.test_pack_basic() without return types