code: def wavefunction(self, quil_program):
          
          # Developer note: This code is for backwards compatibility. It can't be replaced with
          # ForestConnection._wavefunction 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._wavefunction_payload(quil_program)
          response = post_json(self.session, self.sync_endpoint + "/qvm", payload)
          return Wavefunction.from_bit_packed_string(response.content)
docs: Simulate a Quil program and get the wavefunction back.
  
          :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 wavefunctions returned by *different* ``wavefunction`` calls *will generally be
              different*.
  
          :param Program quil_program: A Quil program.
          :return: A Wavefunction object representing the state of the QVM.
          :rtype: Wavefunction