def run_sweep_iter( self, program: 'cirq.AbstractCircuit', params: 'cirq.Sweepable', repetitions: int = 1 ) -> Iterator['cirq.Result']: """Runs the supplied Circuit, mimicking quantum hardware. In contrast to run, this allows for sweeping over different parameter values. Args: program: The circuit to simulate. params: Parameters to run with the program. repetitions: The number of repetitions to simulate. Returns: Result list for this run; one for each possible parameter resolver. Raises: ValueError: If the circuit has no measurements. """ if not program.has_measurements(): raise ValueError("Circuit has no measurements to sample.") for param_resolver in study.to_resolvers(params): records = {} if repetitions == 0: for _, op, _ in program.findall_operations_with_gate_type(ops.MeasurementGate): records[protocols.measurement_key_name(op)] = np.empty([0, 1, 1]) else: records = self._run( circuit=program, param_resolver=param_resolver, repetitions=repetitions ) yield study.ResultDict(params=param_resolver, records=records)
def run_sweep( self, program: 'cirq.AbstractCircuit', params: study.Sweepable, repetitions: int = 1, ) -> List[study.Result]: """Samples circuit as if every measurement resulted in zero. Args: program: The circuit to sample from. params: Parameters to run with the program. repetitions: The number of times to sample. Returns: Result list for this run; one for each possible parameter resolver. Raises: ValueError: circuit is not valid for the sampler, due to invalid repeated keys or incompatibility with the sampler's device. """ if self.device: self.device.validate_circuit(program) shapes = self._get_measurement_shapes(program) return [ study.ResultDict( params=param_resolver, records={ k: np.zeros((repetitions, num_instances, len(qid_shape)), dtype=int) for k, (num_instances, qid_shape) in shapes.items() }, ) for param_resolver in study.to_resolvers(params) ]
def run_sweep_iter( self, program: 'cirq.AbstractCircuit', params: 'cirq.Sweepable', repetitions: int = 1, ) -> Iterator['cirq.Result']: """Runs the supplied Circuit, mimicking quantum hardware. In contrast to run, this allows for sweeping over different parameter values. Args: program: The circuit to simulate. params: Parameters to run with the program. repetitions: The number of repetitions to simulate. Returns: Result list for this run; one for each possible parameter resolver. Raises: ValueError: If the circuit has no measurements. """ if not program.has_measurements(): raise ValueError("Circuit has no measurements to sample.") for param_resolver in study.to_resolvers(params): records = {} if repetitions == 0: for _, op, _ in program.findall_operations_with_gate_type( ops.MeasurementGate): records[protocols.measurement_key_name(op)] = np.empty( [0, 1, 1]) else: records = self._run(circuit=program, param_resolver=param_resolver, repetitions=repetitions) flat_records = False for k, v in records.items(): if v.ndim == 2: flat_records = True records[k] = v.reshape((v.shape[0], 1, v.shape[1])) if flat_records: warnings.warn( ('Starting in Cirq v0.15, values in the output of simulator._run must ' 'be 3D instead of 2D, with a new dimension between the existing two ' 'to capture "instances" of a key.'), DeprecationWarning, ) yield study.ResultDict(params=param_resolver, records=records)
def run_sweep( self, program: cirq.Circuit, params: cirq.Sweepable, repetitions: int = 1, ) -> list[cirq.Result]: # verify that qubit_mapping covers all qubits in the circuit circuit_qubits = set(qubit.name for qubit in program.all_qubits()) diff = circuit_qubits - set(self._qubit_mapping) if diff: raise ValueError( f'The qubits {diff} are not found in the provided qubit mapping.' ) # apply qubit_mapping qubit_map = { cirq.NamedQubit(k): cirq.NamedQubit(v) for k, v in self._qubit_mapping.items() } mapped = program.transform_qubits(qubit_map) # validate the circuit for the device # check that the circuit connectivity fits in the device connectivity self._device.validate_circuit(mapped) resolvers = list(cirq.to_resolvers(params)) circuits = [ cirq.protocols.resolve_parameters(program, res) for res in resolvers ] if resolvers else [program] measurements = self._send_circuits(circuits, repetitions=repetitions) return [ study.ResultDict(params=res, measurements=mes) for res, mes in zip(resolvers, measurements) ]