code: def estimate_assignment_probs(bitstring_prep_histograms):
      
      p = np.array(bitstring_prep_histograms, dtype=float).T
      p /= p.sum(axis=0)[np.newaxis, :]
      return p
docs: Compute the estimated assignment probability matrix for a sequence of single shot histograms
      obtained by running the programs generated by `basis_state_preps()`.
  
          bitstring_prep_histograms[i,j] = #number of measured outcomes j when running program i
  
      The assignment probability is obtained by transposing and afterwards normalizing the columns.
  
          p[j, i] = Probability to measure outcome j when preparing the state with program i.
  
      :param list|numpy.ndarray bitstring_prep_histograms: A nested list or 2d array with shape
      (d, d), where ``d = 2**nqubits`` is the dimension of the Hilbert space. The first axis varies
      over the state preparation program index, the second axis corresponds to the measured bitstring.
      :return: The assignment probability matrix.
      :rtype: numpy.ndarray