async def run_sweep_async(
        self,
        processor_id: str,
        *,
        device_config_name: str,
        run_name: str = "",
        snapshot_id: str = "",
        job_id: str | None = None,
        params: cirq.Sweepable = None,
        repetitions: int = 1,
        description: str | None = None,
        labels: dict[str, str] | None = None,
    ) -> engine_job.EngineJob:
        """Runs the program on the QuantumEngine.

        In contrast to run, this runs across multiple parameter sweeps, and
        does not block until a result is returned.

        Args:
            processor_id: Processor id for running the program.
            run_name: A unique identifier representing an automation run for the
                specified processor. An Automation Run contains a collection of
                device configurations for a processor.
            snapshot_id: A unique identifier for an immutable snapshot reference.
                A snapshot contains a collection of device configurations for the
                processor.
            device_config_name: An identifier used to select the processor configuration
                utilized to run the job. A configuration identifies the set of
                available qubits, couplers, and supported gates in the processor.
            job_id: Optional job id to use. If this is not provided, a random id
                of the format 'job-################YYMMDD' will be generated,
                where # is alphanumeric and YYMMDD is the current year, month,
                and day.
            params: Parameters to run with the program.
            repetitions: The number of circuit repetitions to run.
            description: An optional description to set on the job.
            labels: Optional set of labels to set on the job.

        Returns:
            An EngineJob. If this is iterated over it returns a list of
            TrialResults, one for each parameter sweep.

        Raises:
            ValueError: If a processor id hasn't been specified to run the job
            ValueError: If  only one of `run_name` and `device_config_name` are specified.
            ValueError: If either `run_name` and `device_config_name` are set but
                `processor_id` is empty.
        """
        import cirq_google.engine.engine as engine_base

        if not job_id:
            job_id = engine_base._make_random_id('job-')
        run_context = self.context._serialize_run_context(params, repetitions)

        created_job_id, job = await self.context.client.create_job_async(
            project_id=self.project_id,
            program_id=self.program_id,
            job_id=job_id,
            processor_id=processor_id,
            run_context=run_context,
            description=description,
            labels=labels,
            run_name=run_name,
            snapshot_id=snapshot_id,
            device_config_name=device_config_name,
        )
        return engine_job.EngineJob(
            self.project_id, self.program_id, created_job_id, self.context, job
        )
Runs the program on the QuantumEngine.

        In contrast to run, this runs across multiple parameter sweeps, and
        does not block until a result is returned.

        Args:
            processor_id: Processor id for running the program.
            run_name: A unique identifier representing an automation run for the
                specified processor. An Automation Run contains a collection of
                device configurations for a processor.
            snapshot_id: A unique identifier for an immutable snapshot reference.
                A snapshot contains a collection of device configurations for the
                processor.
            device_config_name: An identifier used to select the processor configuration
                utilized to run the job. A configuration identifies the set of
                available qubits, couplers, and supported gates in the processor.
            job_id: Optional job id to use. If this is not provided, a random id
                of the format 'job-################YYMMDD' will be generated,
                where # is alphanumeric and YYMMDD is the current year, month,
                and day.
            params: Parameters to run with the program.
            repetitions: The number of circuit repetitions to run.
            description: An optional description to set on the job.
            labels: Optional set of labels to set on the job.

        Returns:
            An EngineJob. If this is iterated over it returns a list of
            TrialResults, one for each parameter sweep.

        Raises:
            ValueError: If a processor id hasn't been specified to run the job
            ValueError: If  only one of `run_name` and `device_config_name` are specified.
            ValueError: If either `run_name` and `device_config_name` are set but
                `processor_id` is empty.
        
cirq-google/cirq_google/engine/engine_program.py