Skip to content

Built-in Functions

Following is a comprehensive list of QMOD built-in function declarations:

Atomic (Gate-level) Functions

Atomic functions are functions that generally map directly to operations in the quantum-program, and supported by underlying execution framework.

qfunc H(target: qbit);
qfunc X(target: qbit);
qfunc Y(target: qbit);
qfunc Z(target: qbit);
qfunc I(target: qbit);
qfunc S(target: qbit);
qfunc T(target: qbit);
qfunc SDG(target: qbit);
qfunc TDG(target: qbit);
qfunc PHASE<theta: real>(target: qbit);
qfunc RX<theta: real>(target: qbit);
qfunc RY<theta: real>(target: qbit);
qfunc RZ<theta: real>(target: qbit);
qfunc R<theta: real, phi: real>(target: qbit);
qfunc RXX<theta: real>(target: qbit[2]);
qfunc RYY<theta: real>(target: qbit[2]);
qfunc RZZ<theta: real>(target: qbit[2]);
qfunc CH(control: qbit, target: qbit);
qfunc CX(control: qbit, target: qbit);
qfunc CY(control: qbit, target: qbit);
qfunc CZ(control: qbit, target: qbit);
qfunc CRX<theta: real>(control: qbit, target: qbit);
qfunc CRY<theta: real>(control: qbit, target: qbit);
qfunc CRZ<theta: real>(control: qbit, target: qbit);
qfunc CPHASE<theta: real>(control: qbit, target: qbit);
qfunc SWAP(qbit0: qbit, qbit1: qbit);
qfunc IDENTITY(target: qbit[]);

In Python the optional argument external of the decorator qfunc indicates that the definition of the function is specified elsewhere.

@qfunc(external=True)
def H(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def X(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def Y(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def Z(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def I(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def S(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def T(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def SDG(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def TDG(
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def PHASE(
    theta: CReal,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def RX(
    theta: CReal,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def RY(
    theta: CReal,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def RZ(
    theta: CReal,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def R(
    theta: CReal,
    phi: CReal,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def RXX(
    theta: CReal,
    target: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def RYY(
    theta: CReal,
    target: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def RZZ(
    theta: CReal,
    target: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def CH(
    control: QBit,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def CX(
    control: QBit,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def CY(
    control: QBit,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def CZ(
    control: QBit,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def CRX(
    theta: CReal,
    control: QBit,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def CRY(
    theta: CReal,
    control: QBit,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def CRZ(
    theta: CReal,
    control: QBit,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def CPHASE(
    theta: CReal,
    control: QBit,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def SWAP(
    qbit0: QBit,
    qbit1: QBit,
) -> None:
    pass


@qfunc(external=True)
def IDENTITY(
    target: QArray[QBit],
) -> None:
    pass

Builtin Functions

qfunc prepare_state<probabilities: real[], bound: real>(output out: qbit[log(probabilities.len, 2)]);
qfunc prepare_amplitudes<amplitudes: real[], bound: real>(output out: qbit[log(amplitudes.len, 2)]);
qfunc unitary<elements: real[][]>(target: qbit[log(elements[0].len, 2)]);
qfunc add(left: qbit[], right: qbit[], output result: qbit[Max(left.len, right.len) + 1]);
qfunc modular_add(left: qbit[], right: qbit[]);
qfunc integer_xor(left: qbit[], right: qbit[]);
qfunc U<theta: real, phi: real, lam: real, gam: real>(target: qbit);
qfunc CCX(control: qbit[2], target: qbit);
qfunc allocate<num_qubits: int>(output out: qbit[num_qubits]);
qfunc free(input in: qbit[]);
qfunc randomized_benchmarking<num_of_cliffords: int>(target: qbit[]);
qfunc inplace_prepare_state<probabilities: real[], bound: real>(target: qbit[log(probabilities.len, 2)]);
qfunc inplace_prepare_amplitudes<amplitudes: real[], bound: real>(target: qbit[log(amplitudes.len, 2)]);
qfunc single_pauli_exponent<pauli_string: Pauli[], coefficient: real>(qbv: qbit[pauli_string.len]);
qfunc suzuki_trotter<pauli_operator: PauliTerm[], evolution_coefficient: real, order: int, repetitions: int>(qbv: qbit[pauli_operator[0].pauli.len]);
qfunc qdrift<pauli_operator: PauliTerm[], evolution_coefficient: real, num_qdrift: int>(qbv: qbit[pauli_operator[0].pauli.len]);
qfunc exponentiation_with_depth_constraint<pauli_operator: PauliTerm[], evolution_coefficient: real, max_depth: int>(qbv: qbit[pauli_operator[0].pauli.len]);
@qfunc(external=True)
def prepare_state(
    probabilities: CArray[CReal],
    bound: CReal,
    out: Output[QArray[QBit]],
) -> None:
    pass


@qfunc(external=True)
def prepare_amplitudes(
    amplitudes: CArray[CReal],
    bound: CReal,
    out: Output[QArray[QBit]],
) -> None:
    pass


@qfunc(external=True)
def unitary(
    elements: CArray[CArray[CReal]],
    target: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def add(
    left: QArray[QBit],
    right: QArray[QBit],
    result: Output[QArray[QBit]],
) -> None:
    pass


@qfunc(external=True)
def modular_add(
    left: QArray[QBit],
    right: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def integer_xor(
    left: QArray[QBit],
    right: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def U(
    theta: CReal,
    phi: CReal,
    lam: CReal,
    gam: CReal,
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def CCX(
    control: QArray[QBit],
    target: QBit,
) -> None:
    pass


@qfunc(external=True)
def allocate(
    num_qubits: CInt,
    out: Output[QArray[QBit]],
) -> None:
    pass


@qfunc(external=True)
def free(
    in_: Input[QArray[QBit]],
) -> None:
    pass


@qfunc(external=True)
def randomized_benchmarking(
    num_of_cliffords: CInt,
    target: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def inplace_prepare_state(
    probabilities: CArray[CReal],
    bound: CReal,
    target: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def inplace_prepare_amplitudes(
    amplitudes: CArray[CReal],
    bound: CReal,
    target: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def single_pauli_exponent(
    pauli_string: CArray[Pauli],
    coefficient: CReal,
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def suzuki_trotter(
    pauli_operator: CArray[PauliTerm],
    evolution_coefficient: CReal,
    order: CInt,
    repetitions: CInt,
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def qdrift(
    pauli_operator: CArray[PauliTerm],
    evolution_coefficient: CReal,
    num_qdrift: CInt,
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def exponentiation_with_depth_constraint(
    pauli_operator: CArray[PauliTerm],
    evolution_coefficient: CReal,
    max_depth: CInt,
    qbv: QArray[QBit],
) -> None:
    pass

Application Functions

qfunc molecule_ucc<molecule_problem: MoleculeProblem, excitations: int[]>(qbv: qbit[molecule_problem_to_hamiltonian(molecule_problem)[0].pauli.len]);
qfunc molecule_hva<molecule_problem: MoleculeProblem, reps: int>(qbv: qbit[molecule_problem_to_hamiltonian(molecule_problem)[0].pauli.len]);
qfunc molecule_hartree_fock<molecule_problem: MoleculeProblem>(qbv: qbit[molecule_problem_to_hamiltonian(molecule_problem)[0].pauli.len]);
qfunc fock_hamiltonian_ucc<fock_hamiltonian_problem: FockHamiltonianProblem, excitations: int[]>(qbv: qbit[fock_hamiltonian_problem_to_hamiltonian(fock_hamiltonian_problem)[0].pauli.len]);
qfunc fock_hamiltonian_hva<fock_hamiltonian_problem: FockHamiltonianProblem, reps: int>(qbv: qbit[fock_hamiltonian_problem_to_hamiltonian(fock_hamiltonian_problem)[0].pauli.len]);
qfunc fock_hamiltonian_hartree_fock<fock_hamiltonian_problem: FockHamiltonianProblem>(qbv: qbit[fock_hamiltonian_problem_to_hamiltonian(fock_hamiltonian_problem)[0].pauli.len]);
qfunc log_normal_finance<finance_model: LogNormalModel, finance_function: FinanceFunction>(func_port: qbit[finance_model.num_qubits], obj_port: qbit);
qfunc gaussian_finance<finance_model: GaussianModel, finance_function: FinanceFunction>(func_port: qbit[((finance_model.num_qubits + finance_model.rhos.len) + floor(log(sum(finance_model.loss), 2))) + 1], obj_port: qbit);
qfunc pauli_feature_map<feature_map: QSVMFeatureMapPauli>(qbv: qbit[feature_map.feature_dimension]);
qfunc bloch_sphere_feature_map<feature_dimension: int>(qbv: qbit[ceiling(feature_dimension / 2)]);
@qfunc(external=True)
def molecule_ucc(
    molecule_problem: MoleculeProblem,
    excitations: CArray[CInt],
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def molecule_hva(
    molecule_problem: MoleculeProblem,
    reps: CInt,
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def molecule_hartree_fock(
    molecule_problem: MoleculeProblem,
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def fock_hamiltonian_ucc(
    fock_hamiltonian_problem: FockHamiltonianProblem,
    excitations: CArray[CInt],
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def fock_hamiltonian_hva(
    fock_hamiltonian_problem: FockHamiltonianProblem,
    reps: CInt,
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def fock_hamiltonian_hartree_fock(
    fock_hamiltonian_problem: FockHamiltonianProblem,
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def log_normal_finance(
    finance_model: LogNormalModel,
    finance_function: FinanceFunction,
    func_port: QArray[QBit],
    obj_port: QBit,
) -> None:
    pass


@qfunc(external=True)
def gaussian_finance(
    finance_model: GaussianModel,
    finance_function: FinanceFunction,
    func_port: QArray[QBit],
    obj_port: QBit,
) -> None:
    pass


@qfunc(external=True)
def pauli_feature_map(
    feature_map: QSVMFeatureMapPauli,
    qbv: QArray[QBit],
) -> None:
    pass


@qfunc(external=True)
def bloch_sphere_feature_map(
    feature_dimension: CInt,
    qbv: QArray[QBit],
) -> None:
    pass