docs: def sample_measurement_ops(
              self,
              measurement_ops: List[ops.GateOperation],
              repetitions: int = 1) -> Dict[str, np.ndarray]:
          """Samples from the system at this point in the computation.
  
          Note that this does not collapse the wave function.
  
          In contrast to `sample` which samples qubits, this takes a list of
          `cirq.GateOperation` instances whose gates are `cirq.MeasurementGate`
          instances and then returns a mapping from the key in the measurement
          gate to the resulting bit strings. Different measurement operations must
          not act on the same qubits.
  
          Args:
              measurement_ops: `GateOperation` instances whose gates are
                  `MeasurementGate` instances to be sampled form.
              repetitions: The number of samples to take.
  
          Returns: A dictionary from measurement gate key to measurement
              results. Measurement results are stored in a 2-dimensional
              numpy array, the first dimension corresponding to the repetition
              and the second to the actual boolean measurement results (ordered
              by the qubits being measured.)
  
          Raises:
              ValueError: If the operation's gates are not `MeasurementGate`
                  instances or a qubit is acted upon multiple times by different
                  operations from `measurement_ops`.
          """
          bounds = {}  # type: Dict[str, Tuple]
          all_qubits = []  # type: List[ops.Qid]
          current_index = 0
          for op in measurement_ops:
              gate = op.gate
              if not isinstance(gate, ops.MeasurementGate):
                  raise ValueError('{} was not a MeasurementGate'.format(gate))
              key = protocols.measurement_key(gate)
              if key in bounds:
                  raise ValueError(
                      'Duplicate MeasurementGate with key {}'.format(key))
              bounds[key] = (current_index, current_index + len(op.qubits))
              all_qubits.extend(op.qubits)
              current_index += len(op.qubits)
          indexed_sample = self.sample(all_qubits, repetitions)
          return {k: np.array([x[s:e] for x in indexed_sample]) for k, (s, e) in
                  bounds.items()}