docs: def init_z_vects(self):
          """Initializes bitwise vectors which is precomputed in shared memory.
  
          There are two types of vectors here, a zero one vectors and a pm
          (plus/minus) vectors. The pm vectors have rows that are Pauli Z
          operators acting on the all ones vector. The column-th row corresponds
          to the Pauli Z acting on the column'th-qubit.  Example for three shard
          qubits:
               [[1, -1, 1, -1, 1, -1, 1, -1],
                [1, 1, -1, -1, 1, 1, -1, -1],
                [1, 1, 1, 1, -1, -1, -1, -1]]
          The zero one vectors are the pm vectors with 1 replacing -1 and 0
          replacing 1.
  
          There are number of shard qubit zero one vectors and each of these is
          of size equal to the shard size. For the zero one vectors, the ith one
          of these vectors has a  kth index value that is equal to 1 if the i'th
          bit of k is set and zero otherwise. The vector directly encode the
          little-endian binary digits of its index in the list:
          v[j][i] = (i >> j) & 1. For the pm vectors, the ith one of these
          vectors has a  k'th index value that is equal to -1 if the i'th bit of
          k is set and 1 otherwise.
          """
          shard_size = 2 ** self._num_shard_qubits
  
          a, b = np.indices((shard_size, self._num_shard_qubits))
          a >>= b
          a &= 1
          zero_one_vects = np.ascontiguousarray(a.transpose())
          zero_one_vects_handle = mem_manager.SharedMemManager.create_array(
              zero_one_vects)
          self._shared_mem_dict['zero_one_vects_handle'] = zero_one_vects_handle
  
          pm_vects = 1 - 2 * zero_one_vects
          pm_vects_handle = mem_manager.SharedMemManager.create_array(pm_vects)
          self._shared_mem_dict['pm_vects_handle'] = pm_vects_handle