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)
示例#2
0
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
示例#3
0
def test_from_braket_instruction_unsupported_instruction():
    gate_operations.from_braket_instruction(shared_models.DoubleTarget(targets=[4, 3]))
示例#4
0
def test_gate_operation_matrix_is_unitary(instruction, targets, operation_type):
    check_unitary(gate_operations.from_braket_instruction(instruction).matrix)