def run( self, circuit_ir: Program, qubit_count: int, shots: int = 0, *, batch_size: int = 1, ) -> GateModelTaskResult: """ Executes the circuit specified by the supplied `circuit_ir` on the simulator. Args: circuit_ir (Program): ir representation of a braket circuit specifying the instructions to execute. qubit_count (int): The number of qubits to simulate. shots (int): The number of times to run the circuit. batch_size (int): The size of the circuit partitions to contract, if applying multiple gates at a time is desired; see `StateVectorSimulation`. Must be a positive integer. Defaults to 1, which means gates are applied one at a time without any optmized contraction. Returns: GateModelTaskResult: object that represents the result Raises: ValueError: If result types are not specified in the IR or sample is specified as a result type when shots=0. Or, if statevector and amplitude result types are requested when shots>0. Examples: >>> circuit_ir = Circuit().h(0).to_ir() >>> DefaultSimulator().run(circuit_ir, qubit_count=1, shots=100) >>> circuit_ir = Circuit().h(0).to_ir() >>> DefaultSimulator().run(circuit_ir, qubit_count=1, batch_size=10) """ DefaultSimulator._validate_shots_and_ir_results( shots, circuit_ir, qubit_count) operations = [ from_braket_instruction(instruction) for instruction in circuit_ir.instructions ] if shots > 0 and circuit_ir.basis_rotation_instructions: for instruction in circuit_ir.basis_rotation_instructions: operations.append(from_braket_instruction(instruction)) DefaultSimulator._validate_operation_qubits(operations) simulation = StateVectorSimulation(qubit_count, shots, batch_size=batch_size) simulation.evolve(operations) results = [] if not shots and circuit_ir.results: ( non_observable_result_types, observable_result_types, ) = DefaultSimulator._translate_result_types(circuit_ir) observables = DefaultSimulator._validate_and_consolidate_observable_result_types( list(observable_result_types.values()), qubit_count) results = DefaultSimulator._generate_results( circuit_ir, non_observable_result_types, observable_result_types, observables, simulation, ) return DefaultSimulator._create_results_obj(results, circuit_ir, simulation)
def test_from_braket_instruction(instruction, targets, operation_type): operation_instance = gate_operations.from_braket_instruction(instruction) assert isinstance(operation_instance, operation_type) assert operation_instance.targets == targets
def test_from_braket_instruction_unsupported_instruction(): gate_operations.from_braket_instruction(shared_models.DoubleTarget(targets=[4, 3]))
def test_gate_operation_matrix_is_unitary(instruction, targets, operation_type): check_unitary(gate_operations.from_braket_instruction(instruction).matrix)