code: def _init_attr(self, bitstring_map: Dict[str, int]) -> None:
          
          self.bit_map = bitstring_map
          self.unitary_function_mapping = self._compute_grover_oracle_matrix(bitstring_map)
          self.n_qubits = self.unitary_function_mapping.shape[0]
          self.qubits = list(range(int(np.log2(self.n_qubits))))
          self._construct_grover_circuit()
docs: Initializes an instance of Grover's Algorithm given a bitstring_map.
  
          :param bitstring_map: dict with string keys corresponding to bitstrings, and integer
           values corresponding to the desired phase on the output state.
          :type bitstring_map: Dict[String, Int]
          :return: None