def test_set_amps_qureg() -> None:
    """Testing set functions

    setAmps, setDensityAmps, setWeightedQureg
    """
    env = utils.createQuestEnv()()
    qureg_statevec = utils.createQureg()(2, env)
    qureg_dens = utils.createDensityQureg()(2, env)
    cheat.initZeroState()(qureg_statevec)
    cheat.initZeroState()(qureg_dens)

    cheat.setAmps()(qureg=qureg_statevec,
                    startind=0,
                    reals=[1, 2, 0, 1],
                    imags=[0, 3, 4, 3],
                    numamps=4)
    state_vec = cheat.getStateVector()(qureg=qureg_statevec)
    state_array = np.array([1 + 0j, 2 + 3j, 0 + 4j, 1 + 3j])
    assert np.all(state_vec == state_array)

    cheat.setDensityAmps()(
        qureg=qureg_dens,
        reals=[[1, 2, 1, 2], [0, 1, 0, 1], [1, 0, 1, 0], [2, 1, 2, 1]],
        imags=[[4, 3, 4, 3], [3, 2, 3, 2], [2, 3, 2, 3], [3, 4, 3, 4]],
    )
    dens_mat = cheat.getDensityMatrix()(qureg=qureg_dens)
    dens_array = np.array([[1 + 4j, 2 + 3j, 1 + 4j, 2 + 3j],
                           [3j, 1 + 2j, 3j, 1 + 2j], [1 + 2j, 3j, 1 + 2j, 3j],
                           [2 + 3j, 1 + 4j, 2 + 3j, 1 + 4j]])
    assert np.all(dens_mat == dens_array)

    # for a wavefunction qureg:
    quregout = utils.createQureg()(2, env)
    cheat.setWeightedQureg()(fac1=2.5,
                             qureg1=qureg_statevec,
                             fac2=3.5j,
                             qureg2=qureg_statevec,
                             facout=1,
                             quregout=quregout)
    state_vec_combined = cheat.getStateVector()(qureg=quregout)
    comparison_array = 2.5 * state_array + 3.5j * state_array + 1 * np.array(
        [1, 0, 0, 0])
    assert np.all(state_vec_combined == comparison_array)

    # for a density matrix qureg:
    quregout = utils.createDensityQureg()(2, env)
    cheat.setWeightedQureg()(fac1=2.5,
                             qureg1=qureg_dens,
                             fac2=3.5j,
                             qureg2=qureg_dens,
                             facout=0.5,
                             quregout=quregout)
    dens_mat_combined = cheat.getDensityMatrix()(qureg=quregout)
    comparison_array = 2.5 * dens_array + 3.5j * dens_array + 0.5 * np.array(
        [[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
    assert np.all(dens_mat_combined == comparison_array)
Example #2
0
def test_apply_Pauli_sum():
    """Test applyPauliSum"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(4, env)
    qubits_out = utils.createQureg()(4, env)
    ops.applyPauliSum()(
        qureg=qubits,
        paulis=[[0, 1, 2, 3], [3, 2, 1, 0]],
        coefficients=[0.4, 0.3],
        qureg_out=qubits_out,
    )
def test_calc_Expec_Pauli_Sum() -> None:
    """Test calculating the expectation value of a PauliSum"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(4, env)
    workspace = utils.createQureg()(4, env)
    a = cheat.calcExpecPauliSum()(
        qureg=qubits,
        paulis=[[0, 1, 2, 3], [3, 2, 1, 0]],
        coefficients=[0.4, 0.3],
        workspace=workspace,
    )
    assert a == 0.0
def test_calc_Expec_Pauli_Prod() -> None:
    """Test calculating the expectation value of a PauliProduct"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(4, env)
    workspace = utils.createQureg()(4, env)
    a = cheat.calcExpecPauliProd()(
        qureg=qubits,
        qubits=[0, 1, 2, 3],
        paulis=[0, 1, 3, 2],
        workspace=workspace,
    )
    assert a == 0.0
def test_calc_Expec_Pauli_Hamil() -> None:
    """Test calculating the expectation value of a PauliHamil"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(4, env)
    pauli_hamil = utils.createPauliHamil()(number_qubits=4,
                                           number_pauliprods=1)
    workspace = utils.createQureg()(4, env)
    a = cheat.calcExpecPauliHamil()(
        qureg=qubits,
        pauli_hamil=pauli_hamil,
        workspace=workspace,
    )
    npt.assert_almost_equal(a, 0.0)
def test_calc_simple() -> None:
    """Testing simple calc functions.
    
    calcPurity, calcFidelity, calcInnerProduct, calcProbofOutcome,
    calcTotalProb, calcDensityInnerProduct
    """
    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(2, env)
    qureg_main = utils.createQureg()(2, env)
    cheat.initZeroState()(qureg)

    with npt.assert_raises(RuntimeError):
        purity = cheat.calcPurity()(qureg)
        density_inner_product = cheat.calcDensityInnerProduct()(
            qureg1=qureg, qureg2=qureg_main)
    fidelity = cheat.calcFidelity()(qureg=qureg_main, qureg_reference=qureg)
    inner_product = cheat.calcInnerProduct()(qureg1=qureg, qureg2=qureg_main)
    prob_of_outcome = cheat.calcProbOfOutcome()(qureg, 1, 0)
    total_prob = cheat.calcTotalProb()(qureg)

    assert fidelity == 1
    assert (inner_product.real == 1 and inner_product.imag == 0)
    assert prob_of_outcome == 1.0
    assert total_prob == 1

    qureg = utils.createDensityQureg()(2, env)
    cheat.initZeroState()(qureg)

    with npt.assert_raises(RuntimeError):
        fidelity = cheat.calcFidelity()(qureg=qureg_main,
                                        qureg_reference=qureg)
        inner_product_1 = cheat.calcInnerProduct()(qureg1=qureg,
                                                   qureg2=qureg_main)
        inner_product_2 = cheat.calcInnerProduct()(qureg1=qureg_main,
                                                   qureg2=qureg)
        inner_product_3 = cheat.calcInnerProduct()(qureg1=qureg, qureg2=qureg)
        density_inner_product_1 = cheat.calcDensityInnerProduct()(
            qureg1=qureg, qureg2=qureg_main)
        density_inner_product_2 = cheat.calcDensityInnerProduct()(
            qureg1=qureg_main, qureg2=qureg)
    density_inner_product_3 = cheat.calcDensityInnerProduct()(qureg1=qureg,
                                                              qureg2=qureg)
    purity = cheat.calcPurity()(qureg)
    prob_of_outcome = cheat.calcProbOfOutcome()(qureg, 1, 0)
    total_prob = cheat.calcTotalProb()(qureg)

    assert purity == 1
    assert prob_of_outcome == 1.0
    assert total_prob == 1
    assert density_inner_product_3 == 1
Example #7
0
def build_two_qubit_matrix_target(gate, gate_args, control=None) -> np.ndarray:
    """Build two qubit matrix with target for tests"""
    matrix = np.zeros((4, 4), dtype=complex)
    for co, state in enumerate([
            np.array([1, 0, 0, 0]),
            np.array([0, 1, 0, 0]),
            np.array([0, 0, 1, 0]),
            np.array([0, 0, 0, 1]),
    ]):
        env = utils.createQuestEnv()()
        if control is None:
            qubits = utils.createQureg()(2, env)
            cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state))
            gate()(qureg=qubits,
                   target_qubit_1=0,
                   target_qubit_2=1,
                   **gate_args)
        elif control is True:
            qubits = utils.createQureg()(3, env)
            control_array = np.array([0, 1])
            cheat.initStateFromAmps()(qubits,
                                      np.real(np.kron(control_array, state)),
                                      np.imag(np.kron(control_array, state)))
            gate()(qureg=qubits,
                   target_qubit_1=0,
                   target_qubit_2=1,
                   control=2,
                   **gate_args)
        else:
            qubits = utils.createQureg()(3, env)
            control_array = np.array([1, 0])
            cheat.initStateFromAmps()(qubits,
                                      np.real(np.kron(control_array, state)),
                                      np.imag(np.kron(control_array, state)))
            gate()(qureg=qubits,
                   target_qubit_1=0,
                   target_qubit_2=1,
                   control=2,
                   **gate_args)
        for i in range(0, 4):
            if control is None:
                cComplex = cheat.getAmp()(qureg=qubits, index=i)
                matrix[i, co] = cComplex.real + 1j * cComplex.imag
            elif control is True:
                cComplex = cheat.getAmp()(qureg=qubits, index=i + 4)
                matrix[i, co] = cComplex.real + 1j * cComplex.imag
            else:
                cComplex = cheat.getAmp()(qureg=qubits, index=i)
                matrix[i, co] = cComplex.real + 1j * cComplex.imag
    return matrix
def test_random_noise_operator(gate_time, depolarisation_rate, dephasing_rate):
    """Test PRAGMA operators applying random noise (stochastic unravelling) with PyQuEST interface"""
    op = ops.PragmaRandomNoise
    test_dict = {'ro': list()}

    (Gate_time, depol_Rate, dephasing_Rate) = ('gate_time',
                                               'depolarisation_rate',
                                               'dephasing_rate',
                                               )
    operation = op(qubit=0, gate_time=Gate_time,
                   depolarising_rate=depol_Rate, dephasing_rate=dephasing_Rate)

    substitution_dict = {'gate_time': gate_time,
                         'depolarisation_rate': depolarisation_rate,
                         'dephasing_rate': dephasing_rate}
    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(1, env)
    state_vec_ref = cheat.getStateVector()(qureg)
    pyquest_call_operation(operation=operation.substitute_parameters(substitution_dict),
                           qureg=qureg,
                           classical_bit_registers=dict(),
                           classical_float_registers=dict(),
                           classical_complex_registers=test_dict,
                           output_bit_register_dict=dict(),
                           )
    if gate_time == 0 or (dephasing_rate == 0 and depolarisation_rate == 0):
        state_vec = cheat.getStateVector()(qureg)
        npt.assert_array_almost_equal(state_vec_ref, state_vec)

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

    operation.substitute_parameters(substitution_dict)

    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(1, env)
    state_vec_ref = cheat.getStateVector()(qureg)
    pyquest_call_operation(operation=operation.substitute_parameters(substitution_dict),
                           qureg=qureg, classical_bit_registers=dict(),
                           classical_float_registers=dict(),
                           classical_complex_registers=test_dict,
                           output_bit_register_dict=dict(),)
    if gate_time == 0 or (dephasing_rate == 0 and depolarisation_rate == 0):
        state_vec = cheat.getStateVector()(qureg)
        npt.assert_array_almost_equal(state_vec_ref, state_vec)

    utils.destroyQureg().call_interactive(qureg, env)
    utils.destroyQuestEnv().call_interactive(env)
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]
Example #10
0
def build_two_qubit_matrix(operation) -> np.ndarray:
    """Return full process tomography on two qubit operation with PyQuEST interface"""
    matrix = np.zeros((4, 4), dtype=complex)
    for co, state in enumerate([np.array([1, 0, 0, 0]),
                                np.array([0, 1, 0, 0]),
                                np.array([0, 0, 1, 0]),
                                np.array([0, 0, 0, 1]), ]):
        env = utils.createQuestEnv()()
        qubits = utils.createQureg()(2, env)
        cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state))
        circuit = Circuit()
        circuit += operation
        
        pyquest_call_circuit(circuit=circuit,
                             qureg=qubits,
                             classical_bit_registers=dict(),
                             classical_float_registers=dict(),
                             classical_complex_registers=dict(),
                             output_bit_register_dict=dict(),)
        for i in range(0, 4):
            out = cheat.getAmp()(qureg=qubits, index=i)
            matrix[i, co] = out
        utils.destroyQureg()(qubits, env=env)
        utils.destroyQuestEnv()(env)
    return matrix
Example #11
0
def test_apply_functions(applied: Tuple[Any, List]) -> None:
    """Test all non-deprecated apply functions"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(5, env)
    cheat.initZeroState()(qureg=qubits)
    op = applied[0]()
    positional_args = applied[1]
    matrix = np.array([[1, 0, 0, 1], [0, 2, 0, 2], [2, 0, 2, 0], [1, 0, 0, 1]])
    last_element: str = positional_args.pop()
    if last_element == 'matrix':
        args = [qubits]
        args.extend(positional_args)
        args.append(matrix)
    elif last_element == 'pauli':
        pauli_hamil = positional_args.pop(0)
        cheat.initPauliHamil()(pauli_hamil=pauli_hamil,
                               coeffs=[0.0, 0.0, 0.0, 0.0, 0.0],
                               codes=[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]])
        args = [qubits, pauli_hamil]
        args.extend(positional_args)
    else:
        args = [qubits]
        args.extend(positional_args)

    op(*args)
    if last_element == 'matrix':
        npt.assert_array_equal(matrix, op.matrix(matrix=matrix))
def _execute_GetOccupationProbability(
        operation: Union[
            ops.PragmaGetOccupationProbability],
        qureg: tqureg,
        classical_float_registers: Dict[str, List[float]],
) -> None:
    tags = operation.tags()
    quest_obj = qcheat.getOccupationProbability()
    if 'PragmaGetRotatedOccupationProbability' in tags:
        N = qureg.numQubitsRepresented
        env = qutils.createQuestEnv()()
        if qureg.isDensityMatrix:
            workspace = qutils.createDensityQureg()(N, env)
        else:
            workspace = qutils.createQureg()(N, env)
        qutils.cloneQureg()(workspace, qureg)
        if operation.circuit() is not None:
            pyquest_call_circuit(
                circuit=operation.circuit(),
                qureg=workspace,
                classical_bit_registers=dict(),
                classical_float_registers=dict(),
                classical_complex_registers=dict(),
                output_bit_register_dict=dict(),)
        occ_probabilities = np.real(quest_obj(qureg=workspace))
        qutils.destroyQureg()(qubits=workspace, env=env)
        del workspace
        qutils.destroyQuestEnv()(env)
        del env
    else:
        occ_probabilities = np.real(quest_obj(qureg=qureg, ))

    classical_float_registers[operation.readout()] = occ_probabilities
Example #13
0
def test_multi_controlled_PhaseShift() -> None:
    """Test multiControlledPhaseShift"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(3, env)
    ops.multiControlledPhaseShift()(qureg=qubits,
                                    controls=[0, 1],
                                    theta=0.3 * np.pi)
Example #14
0
def test_multi_controlled_PhaseFlip() -> None:
    """Test multiControlledPhaseFlip"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(3, env)
    ops.multiControlledPhaseFlip()(
        qureg=qubits,
        controls=[0, 1],
    )
Example #15
0
def _execute_GetPauliProduct(
    operation: ops.PragmaGetPauliProduct,
    qureg: tqureg,
    classical_float_registers: Dict[str, List[float]],
) -> None:

    if operation.qubit_paulis == {}:
        classical_float_registers[operation.readout()] = [
            1.0,
        ]
        return None
    N = qureg.numQubitsRepresented
    env = qutils.createQuestEnv()()
    if qureg.isDensityMatrix:
        workspace = qutils.createDensityQureg()(N, env)
        workspace_pp = qutils.createDensityQureg()(N, env)
    else:
        workspace = qutils.createQureg()(N, env)
        workspace_pp = qutils.createQureg()(N, env)
    qutils.cloneQureg()(workspace, qureg)
    if operation.circuit() is not None:
        pyquest_call_circuit(
            circuit=operation.circuit(),
            qureg=workspace,
            classical_bit_registers=dict(),
            classical_float_registers=dict(),
            classical_complex_registers=dict(),
            output_bit_register_dict=dict(),
        )
    qubits = list()
    paulis = list()
    for qubit, pauli in operation.qubit_paulis().items():
        qubits.append(qubit)
        paulis.append(pauli)
    pp = qcheat.calcExpecPauliProd().call_interactive(qureg=workspace,
                                                      qubits=qubits,
                                                      paulis=paulis,
                                                      workspace=workspace_pp)
    qutils.destroyQureg()(qubits=workspace_pp, env=env)
    qutils.destroyQureg()(qubits=workspace, env=env)
    del workspace
    qutils.destroyQuestEnv()(env)
    del env
    classical_float_registers[operation.readout()] = [
        pp,
    ]
Example #16
0
def test_multiRotateZ() -> None:
    """Testing multiRotateZ"""
    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(3, env=env)
    ops.multiRotateZ()(
        qureg=qureg,
        qubits=[0, 1, 2],
        angle=0.35)
def test_calc_Expec_Diagonal_Op() -> None:
    """Test calculating the expectation value of a DiagonalOp"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(4, env)
    a = cheat.calcExpecDiagonalOp()(
        qureg=qubits,
        operator=(4, env),
    )
    assert a == 0
Example #18
0
def test_multi_controlled_unitary(gate, theta) -> None:
    """Test multiControlledUnitary"""
    matrix_gate = gate().matrix(theta=theta)
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(3, env)
    ops.multiControlledUnitary()(qureg=qubits,
                                 controls=[0, 1],
                                 qubit=2,
                                 matrix=matrix_gate)
Example #19
0
def test_multi_controlled_multi_qubit_unitary(gate, theta) -> None:
    """Test multiControlledMultiQubitUnitary"""
    matrix_gate = gate().matrix(theta=theta)
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(4, env)
    ops.multiControlledMultiQubitUnitary()(qureg=qubits,
                                           controls=[0, 1],
                                           targets=[2, 3],
                                           matrix=matrix_gate)
Example #20
0
def test_multi_controlled_two_qubit_unitary(gate, theta):
    """Test multiControlledTwoQubitUnitary"""
    matrix_gate = gate().matrix(theta=theta)
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(4, env)
    ops.multiControlledTwoQubitUnitary()(
        qureg=qubits,
        controls=[0, 1],
        target_qubit_1=2,
        target_qubit_2=3,
        matrix=matrix_gate)
Example #21
0
def test_calcPurity():
    """Testing calcPurity"""
    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(2, env)
    cheat.initZeroState()(qureg)
    with npt.assert_warns(RuntimeWarning):
        purity = cheat.measurement.calcPurity()(qureg)
    assert(purity is None)
    qureg = utils.createDensityQureg()(2, env)
    cheat.initZeroState()(qureg)
    purity = cheat.measurement.calcPurity()(qureg)
    npt.assert_equal(purity, 1)
Example #22
0
def build_one_qubit_matrix(gate, gate_args) -> np.ndarray:
    """Build one qubit matrix for tests"""
    matrix = np.zeros((2, 2), dtype=complex)
    for co, state in enumerate([np.array([1, 0]), np.array([0, 1])]):
        env = utils.createQuestEnv()()
        qubits = utils.createQureg()(1, env)
        cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state))
        gate()(qureg=qubits, qubit=0, **gate_args)
        for i in range(0, 2):
            cComplex = cheat.getAmp()(qureg=qubits, index=i)
            matrix[i, co] = cComplex.real + 1j * cComplex.imag
    return matrix
Example #23
0
def test_measure() -> None:
    """Test measuring functions: measure, measureWithStats and collapseToOutcome"""
    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(3, env)
    cheat.initZeroState()(qureg=qureg)

    qubit_0 = ops.measure()(qureg=qureg, qubit=0)
    qubit_1 = ops.measureWithStats()(qureg=qureg, qubit=1, outcome_proba=0.5)
    proba_qubit_2 = ops.collapseToOutcome()(qureg=qureg, qubit=2, outcome=0)

    assert qubit_0 == 0
    assert qubit_1 == 0
    assert proba_qubit_2 == 1
def test_get_simple() -> None:
    """Testing simple get functions.

    getStateVectoratIndex/getAmp, getDensityMatrixatRowColumn/getDensityAmp,
    getAbsoluteValSquaredatIndex/getProbAmp, getRealAmp, getImagAmp
    """
    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(2, env)
    cheat.initZeroState()(qureg)
    index = 1
    operator_matrix = np.array([[1, 0, 2, 0], [0, 1, 0, 2], [0, 2, 0, 1],
                                [2, 0, 1, 0]])

    with npt.assert_raises(RuntimeError):
        density_matrix = cheat.getDensityAmp()(qureg=qureg, row=1, column=1)
    state_vec = cheat.getAmp()(qureg=qureg, index=index)
    abs_val_state_vec = cheat.getProbAmp()(qureg=qureg, index=1)
    real_val_sate_vec = cheat.getRealAmp()(qureg=qureg, index=1)
    imag_val_sate_vec = cheat.getImagAmp()(qureg=qureg, index=1)
    num_amps = cheat.getNumAmps()(qureg=qureg)
    num_qubits = cheat.getNumQubits()(qureg=qureg)
    expec_val = cheat.getExpectationValue()(qureg=qureg,
                                            operator_matrix=operator_matrix)

    assert state_vec == 0
    assert abs_val_state_vec == 0
    assert real_val_sate_vec == 0
    assert imag_val_sate_vec == 0
    assert num_amps == 4
    assert num_qubits == 2
    assert expec_val == 1

    qureg = utils.createDensityQureg()(2, env)
    cheat.initZeroState()(qureg)

    with npt.assert_raises(RuntimeError):
        state_vec = cheat.getAmp()(qureg=qureg, index=index)
        abs_val_state_vec = cheat.getProbAmp()(qureg=qureg, index=1)
        real_val_sate_vec = cheat.getRealAmp()(qureg=qureg, index=1)
        imag_val_sate_vec = cheat.getImagAmp()(qureg=qureg, index=1)
    density_matrix = cheat.getDensityAmp()(qureg=qureg, row=1, column=1)
    num_amps = cheat.getNumAmps()(qureg=qureg)
    num_qubits = cheat.getNumQubits()(qureg=qureg)
    expec_val = cheat.getExpectationValue()(qureg=qureg,
                                            operator_matrix=operator_matrix)

    assert density_matrix == 0
    assert num_amps == 4
    assert num_qubits == 2
    assert expec_val == 1
def test_measurement():
    """Test gate operations without free parameters with PyQuEST interface"""
    op = ops.MeasureQubit(qubit=0, readout='test', readout_index=0)
    test_dict = {'test': np.array([0, 0, 0, 0])}
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(2, env)
    state = np.array([0, 1, 0, 0])
    cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state))
    pyquest_call_operation(op, qubits,
                           classical_bit_registers=test_dict,
                           classical_float_registers=dict(),
                           classical_complex_registers=dict(),
                           output_bit_register_dict=dict(),)
    utils.destroyQureg()(qubits, env=env)
    utils.destroyQuestEnv()(env)
    assert test_dict['test'][0]
def test_init_functions(init) -> None:
    """Test init functions

    initZeroState, initPlusState, initDebugState, initBlankState, initClassicalState,
    initPureState, initStateFromAmps, initPauliHamil
    """
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(3, env)
    initialisation = init[0]()
    args = init[1]

    if args[0] == 'qureg':
        args[0] = qubits
    elif args[0] == 'pauli':
        args[0] = utils.createPauliHamil()(number_qubits=3,
                                           number_pauliprods=3)

    initialisation(*args)
def test_pragma_get_statevec_pyquest(init) -> None:
    """Test get state vector with PyQuEST interface"""
    op = ops.PragmaGetStateVector
    test_dict: Dict[str, List[complex]] = {'ro': [0, 0, 0, 0]}
    operation = op(readout='ro',
                   circuit=Circuit(),
                   )
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(2, env)
    state = 1 / np.sqrt(2) * np.array([1, 1, 0, 0])
    cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state))

    pyquest_call_operation(operation=operation, qureg=qubits, classical_bit_registers=dict(),
                           classical_float_registers=dict(),
                           classical_complex_registers=test_dict,
                           output_bit_register_dict=dict(),)
    utils.destroyQureg()(qubits=qubits, env=env)
    utils.destroyQuestEnv()(env)
    npt.assert_array_almost_equal(test_dict['ro'], init[1], decimal=4)
Example #28
0
def test_apply_functions(applied) -> None:
    """Test all non-deprecated apply functions"""
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(5, env)
    cheat.initZeroState()(qureg=qubits)
    op = applied[0]()
    positional_args = applied[1]
    matrix = np.array([[1, 0, 0, 1], [0, 2, 0, 2], [2, 0, 2, 0], [1, 0, 0, 1]])
    if positional_args[-1] == 'matrix':
        args = [qubits]
        args.extend(positional_args)
        args[-1] = matrix
    else:
        args = [qubits]
        args.extend(positional_args)

    op(*args)
    if positional_args[-1] == 'matrix':
        npt.assert_array_equal(matrix, op.matrix(matrix=matrix))
def test_pragma_get_occupation_probability_pyquest(init) -> None:
    """Test get occupation probability with PyQuEST interface"""
    op = ops.PragmaGetOccupationProbability
    test_dict: Dict[str, List[float]] = {'ro': [0, 0]}
    operation = op(readout='ro',
                    circuit=Circuit()
                   )
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(2, env)
    state = np.array([0, 1, 0, 0])
    cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state))

    pyquest_call_operation(operation=operation, qureg=qubits, classical_bit_registers=dict(),
                           classical_float_registers=test_dict,
                           classical_complex_registers=dict(),
                           output_bit_register_dict=dict(),)
    utils.destroyQureg()(qubits=qubits, env=env)
    utils.destroyQuestEnv()(env)
    npt.assert_array_almost_equal(test_dict['ro'], init[1])
def test_pragma_repeated_measurement_pyquest() -> None:
    """Test repeated measurement with PyQuEST interface"""
    op = ops.PragmaRepeatedMeasurement
    operation = op(readout='ro',
                   qubit_mapping={0: 0},
                   number_measurements=100)
    test_dict: Dict[str, List[List[bool]]] = {'ro': list(list())}
    test_dict2: Dict[str, List[bool]] = {'ro': list()}
    env = utils.createQuestEnv()()
    qubits = utils.createQureg()(2, env)
    state = 1 / np.sqrt(2) * np.array([1, 1, 0, 0])
    cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state))
    pyquest_call_operation(operation=operation, qureg=qubits, classical_bit_registers=test_dict2,
                           classical_float_registers=dict(),
                           classical_complex_registers=dict(),
                           output_bit_register_dict=test_dict,)
    utils.destroyQureg()(qubits, env=env)
    utils.destroyQuestEnv()(env)
    assert len(test_dict['ro']) == 100