code: def run_and_measure(self, quil_program, qubits, trials=1):
          
          # Developer note: This code is for backwards compatibility. It can't be replaced with
          # ForestConnection._run_and_measure because we've turned off the ability to set
          # `needs_compilation` (that usually indicates the user is doing something iffy like
          # using a noise model with this function)
  
          payload = self._run_and_measure_payload(quil_program, qubits, trials)
          response = post_json(self.session, self.sync_endpoint + "/qvm", payload)
          return response.json()
docs: Run a Quil program once to determine the final wavefunction, and measure multiple times.
  
          :note: If the execution of ``quil_program`` is **non-deterministic**, i.e., if it includes
              measurements and/or noisy quantum gates, then the final wavefunction from which the
              returned bitstrings are sampled itself only represents a stochastically generated sample
              and the outcomes sampled from *different* ``run_and_measure`` calls *generally sample
              different bitstring distributions*.
  
          :param Program quil_program: A Quil program.
          :param list|range qubits: A list of qubits.
          :param int trials: Number of shots to collect.
          :return: A list of a list of bits.
          :rtype: list