<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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