def test_active_reset():
    """Test ActiveReset PRAGMA with PyQuEST interface"""
    definition = ops.DefinitionBit(name='ro', length=2, is_output=True)
    circuit = Circuit()
    circuit += definition
    circuit += ops.PauliX(qubit=0)

    circuit_with = circuit + ops.PragmaActiveReset(qubit=0) + ops.PragmaActiveReset(qubit=1)
    circuit_without = circuit + ops.PauliX(qubit=0)
    circuit_list = [circuit, circuit_with, circuit_without]
    for circuit in circuit_list:
        circuit += ops.MeasureQubit(qubit=0, readout='ro', readout_index=0)
        circuit += ops.MeasureQubit(qubit=1, readout='ro', readout_index=1)

    test_dict = {'ro': [False, False]}
    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(2, env)
    results_list_0 = []
    results_list_1 = []
    for circuit in circuit_list:
        pyquest_call_circuit(circuit=circuit, qureg=qureg, classical_bit_registers=test_dict,
                             classical_float_registers=dict(),
                             classical_complex_registers=dict(),
                             output_bit_register_dict=dict(),)
        results_list_0.append(test_dict['ro'][0])
        results_list_1.append(test_dict['ro'][1])

    assert results_list_0 == [True, False, False]
    assert results_list_1 == [False, False, False]
예제 #2
0
def test_acceptance_with_qiskit():
    """Test gate operations with QASM interface"""
    circuit = Circuit()

    circuit += ops.RotateX(0, -np.pi)
    circuit += ops.RotateY(0, -np.pi)
    circuit += ops.RotateZ(0, -np.pi)
    circuit += ops.CNOT(0, 1)
    circuit += ops.Hadamard(0)
    circuit += ops.PauliX(0)
    circuit += ops.PauliY(0)
    circuit += ops.PauliZ(0)
    circuit += ops.SGate(0)
    circuit += ops.TGate(0)
    circuit += ops.SqrtPauliX(0)
    circuit += ops.MolmerSorensenXX(0, 1)
    circuit += ops.ControlledPauliY(0, 1)
    circuit += ops.ControlledPauliZ(0, 1)
    circuit += ops.SingleQubitGate(0, 1, 0, 1, 0, 1.0)
    circuit += ops.PragmaRepeatedMeasurement('ro', 1, None)
    circuit += ops.MeasureQubit(0, 'ro', 0)
    circuit += ops.DefinitionFloat(name='rof', length=1, is_output=True)
    circuit += ops.DefinitionBit(name='ro', length=2, is_output=True)
    circuit += ops.DefinitionComplex(name='roc', length=1, is_output=True)
    circuit += ops.InputSymbolic('other', 0)
    circuit += ops.PragmaSetNumberOfMeasurements(20, 'ro')

    backend = QasmBackend(number_qubits=2)
    backend.run_circuit(circuit=circuit, overwrite=True)

    q_circuit = QuantumCircuit.from_qasm_file(
        "default_qasm_backend_output.qasm")
예제 #3
0
def test_circuit(measurement):
    """Test building a circuit"""
    circuit = Circuit()
    circuit += ops.DefinitionFloat(name='ro', length=1, is_output=True)
    circuit += ops.DefinitionComplex(name='ro', length=1, is_output=True)
    circuit += ops.DefinitionBit(name='ro', length=1, is_output=True)
    circuit += ops.PauliX(qubit=0)
    circuit += measurement[0]
    assert len(circuit) > 0
예제 #4
0
def test_pyquest_interactive_density_matrix():
    """Test with PyQuEST density matrix"""
    circuit = Circuit()
    circuit += ops.DefinitionBit(name='out', length=2, is_output=True)
    circuit += ops.DefinitionBit(name='out2', length=2, is_output=True)
    circuit += ops.DefinitionBit(name='notout', length=2, is_output=False)
    circuit += ops.PauliX(qubit=0)
    circuit += ops.MeasureQubit(qubit=0, readout='out', readout_index=0)
    circuit += ops.MeasureQubit(qubit=1, readout='out', readout_index=1)

    pyquest = PyQuestBackend(number_qubits=2)
    (output_bit_register_dict, output_float_register_dict,
     output_complex_register_dict) = pyquest.run_circuit(circuit)
    assert output_bit_register_dict['out'] == [[True, False]]
    assert len(output_bit_register_dict['out2']) == 1
    assert 'notout' not in output_bit_register_dict.keys()
예제 #5
0
def test_mocked_backend(measurement):
    """Test mocked backend"""
    circuit = Circuit()
    circuit += ops.DefinitionFloat(name='ro', length=1, is_output=True)
    circuit += ops.DefinitionComplex(name='ro', length=1, is_output=True)
    circuit += ops.DefinitionBit(name='ro', length=1, is_output=True)
    circuit += ops.PauliX(qubit=0)
    circuit += measurement[0]

    mocked = MockedBackend(number_qubits=2)

    results = mocked.run_circuit(circuit=circuit)[measurement[2]]['ro'][0]
    if isinstance(results[0], List):
        assert isinstance(results[0][0], measurement[1])
    else:
        assert isinstance(results[0], measurement[1])
예제 #6
0
def test_qasm_backend():
    """Testing the QASM functionality with the QASM backend"""
    circuit = Circuit()
    circuit += ops.DefinitionBit(name='ro', length=2, is_output=True)
    circuit += ops.RotateZ(qubit=0, theta=0)
    circuit += ops.PauliX(qubit=1)
    circuit += ops.MeasureQubit(qubit=0, readout='ro', readout_index=0)
    circuit += ops.MeasureQubit(qubit=1, readout='ro', readout_index=1)

    backend = QasmBackend(number_qubits=2)

    backend.run_circuit(circuit=circuit, overwrite=True)
    circuit = [
        'creg ro[2];', 'rz(0.0) q[0];', 'x q[1];', 'measure q[0] -> ro[0];',
        'measure q[1] -> ro[1];'
    ]
    npt.assert_equal(backend.circuit, circuit)
예제 #7
0
def test_pyquest_global_phase():
    """Test with PyQuEST"""
    circuit = Circuit()
    circuit += ops.DefinitionBit(name='out', length=2, is_output=True)
    circuit += ops.DefinitionFloat(name='global_phase',
                                   length=1,
                                   is_output=True)
    circuit += ops.PauliX(qubit=0)
    circuit += ops.PragmaGlobalPhase(phase=1)
    circuit += ops.PragmaGlobalPhase(phase='test')
    circuit += ops.MeasureQubit(qubit=0, readout='out', readout_index=0)
    circuit += ops.MeasureQubit(qubit=1, readout='out', readout_index=1)
    circuit += ops.InputSymbolic(name="test", input=-2)
    circuit = circuit.substitute_parameters({})
    pyquest = PyQuestBackend(number_qubits=2)
    (output_bit_register_dict, output_float_register_dict,
     output_complex_register_dict) = pyquest.run_circuit(circuit)
    assert output_bit_register_dict['out'] == [[True, False]]
    assert len(output_bit_register_dict['out']) == 1
    assert output_float_register_dict['global_phase'][0][0] == -1
 ops.Qsim(1, 0, 0.01, 0.02, 0.03),
 ops.GivensRotation(1, 0, 0.01, 0.02),
 ops.GivensRotationLittleEndian(0, 1, 0.01, 0.02),
 ops.ISwap(1, 0),
 ops.InvSqrtISwap(1, 0),
 ops.MolmerSorensenXX(1, 0),
 ops.VariableMSXX(1, 0, 0.01),
 ops.PMInteraction(1, 0, 0.01),
 ops.ComplexPMInteraction(1, 0, 0.01, 0.02),
 ops.SWAP(1, 0),
 ops.SqrtISwap(1, 0),
 ops.XY(1, 0, 0.01),
 ops.SpinInteraction(1, 0, 0.01, 0.02, .003),
 ops.SingleQubitGate(0, 0.1, 0.0, 0.0, 0.0, 0.0),
 ops.Hadamard(0),
 ops.PauliX(0),
 ops.PauliY(0),
 ops.PauliZ(0),
 ops.TGate(0),
 ops.SGate(0),
 ops.SqrtPauliX(0),
 ops.InvSqrtPauliX(0),
 ops.RotateX(0, 0.01),
 ops.RotateY(0, 0.01),
 ops.RotateZ(0, 0.01),
 ops.RotateAroundSphericalAxis(0, 0.01, 0.02, 0.03),
 ops.PragmaSetNumberOfMeasurements(20, 'ro'),
 ops.PragmaSetStateVector(np.array([0, 1], dtype=complex)),
 ops.PragmaSetDensityMatrix(np.array([[0, 0], [0, 1]], dtype=complex)),
 ops.PragmaDamping(0, 0.005, 0.02),
 ops.PragmaDephasing(0, 0.005, 0.02),
def test_conditional_pragma():
    """Test PRAGMA conditional operation"""
    test_dict = {'ro': [False, False],
                 'cond': [True, False]}

    circuit0 = Circuit()
    circuit0 += ops.PauliX(qubit=0)
    circuit0 += ops.MeasureQubit(readout='ro', qubit=0, readout_index=0)

    circuit1 = Circuit()
    circuit1 += ops.PauliX(qubit=1)
    circuit1 += ops.MeasureQubit(readout='ro', qubit=1, readout_index=1)

    operation = ops.PragmaConditional(
        condition_register='cond',
        condition_index=0,
        circuit=circuit0)

    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(2, env)
    test_dict = {'ro': [False, False],
                 'cond': [True, False]}
    pyquest_call_operation(operation=operation,
                           qureg=qureg,
                           classical_bit_registers=test_dict,
                           classical_float_registers=dict(),
                           classical_complex_registers=dict(),
                           output_bit_register_dict=dict(),
                           )

    utils.destroyQureg().call_interactive(qureg, env)
    utils.destroyQuestEnv().call_interactive(env)

    assert test_dict['ro'] == [True, False]

    operation = ops.PragmaConditional(
        condition_register='cond',
        condition_index=0,
        circuit=circuit1)

    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(2, env)
    test_dict = {'ro': [False, False],
                 'cond': [True, False]}
    pyquest_call_operation(operation=operation,
                           qureg=qureg,
                           classical_bit_registers=test_dict,
                           classical_float_registers=dict(),
                           classical_complex_registers=dict(),
                           output_bit_register_dict=dict(),
                           )

    utils.destroyQureg().call_interactive(qureg, env)
    utils.destroyQuestEnv().call_interactive(env)

    assert test_dict['ro'] == [False, True]

    operation = ops.PragmaConditional(
        condition_register='not_in',
        condition_index=0,
        circuit=circuit1)


    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(2, env)
    with pytest.raises(RuntimeError):
        pyquest_call_operation(operation=operation,
                               qureg=qureg,
                               classical_bit_registers=dict(),
                               classical_float_registers=dict(),
                               classical_complex_registers=test_dict,
                               output_bit_register_dict=dict(),
                               )

    utils.destroyQureg().call_interactive(qureg, env)
    utils.destroyQuestEnv().call_interactive(env)
예제 #10
0
import pytest
import sys
import numpy as np
import numpy.testing as npt
from typing import Tuple, Any
from qoqo import operations as ops
from qoqo_qasm import qasm_call_operation


@pytest.mark.parametrize("gate", [
    (ops.RotateX(0, -np.pi), 'rx(-3.141592653589793) q[0]'),
    (ops.RotateY(0, -np.pi), 'ry(-3.141592653589793) q[0]'),
    (ops.RotateZ(0, -np.pi), 'rz(-3.141592653589793) q[0]'),
    (ops.CNOT(0, 1), 'cx q[0],q[1]'),
    (ops.Hadamard(0), 'h q[0]'),
    (ops.PauliX(0), 'x q[0]'),
    (ops.PauliY(0), 'y q[0]'),
    (ops.PauliZ(0), 'z q[0]'),
    (ops.SGate(0), 's q[0]'),
    (ops.TGate(0), 't q[0]'),
    (ops.SqrtPauliX(0), 'rx(1.5707963267948966) q[0]'),
    (ops.MolmerSorensenXX(0, 1), 'rxx(pi/2) q[0],q[1]'),
    (ops.ControlledPauliY(0, 1), 'cy q[0],q[1]'),
    (ops.ControlledPauliZ(0, 1), 'cz q[0],q[1]'),
    (ops.SingleQubitGate(0, 1, 0, 1, 0, 1.0), 'u3(0.0,0.0,-0.0) q[0]'),
    (ops.PragmaRepeatedMeasurement('ro', 1, None), 'measure q -> ro;\n'),
    (ops.PragmaRepeatedMeasurement('ro', 1, {0: 1, 1: 0}),
     'measure q[1] -> ro[0];\nmeasure q[0] -> ro[1];\n'),
    (ops.MeasureQubit(0, 'ro', 0), 'measure q[0] -> ro[0]'),
    (ops.DefinitionFloat(name='ro', length=1, is_output=True), 'creg ro[1]'),
    (ops.DefinitionUsize(name='ro', length=1, is_output=True), 'creg ro[1]'),