Source code for uniqc.circuit_builder.qasm_spec

"""OpenQASM 2.0 language specification for quantum gates.

This module defines the available gates in OpenQASM 2.0 format, including their
qubit requirements and parameter counts. It provides a utility function for
generating subsets of gates based on a given list.

Key exports:
    available_qasm_gates: Dictionary of all available OpenQASM 2.0 gates.
    generate_sub_gateset_qasm: Function to generate a subset of gates.
"""

__all__ = [
    "available_qasm_gates",
    "generate_sub_gateset_qasm",
]

available_qasm_1q_gates = ["id", "h", "x", "y", "z", "s", "sdg", "sx", "sxdg", "t", "tdg"]
available_qasm_1q1p_gates = ["rx", "ry", "rz", "u1"]
available_qasm_1q2p_gates = ["u2"]
available_qasm_1q3p_gates = ["u3", "u"]
available_qasm_2q_gates = ["cx", "cy", "cz", "swap"]
available_qasm_3q_gates = ["ccx", "cswap"]
available_qasm_4q_gates = ["c3x"]
available_qasm_2q1p_gates = ["crx", "cry", "crz", "cu1", "rxx", "rzz"]

available_qasm_gates = {gatename: {"qubit": 1, "params": 0} for gatename in available_qasm_1q_gates}

available_qasm_gates.update({gatename: {"qubit": 1, "params": 1} for gatename in available_qasm_1q1p_gates})

available_qasm_gates.update({gatename: {"qubit": 1, "params": 2} for gatename in available_qasm_1q2p_gates})

available_qasm_gates.update({gatename: {"qubit": 1, "params": 3} for gatename in available_qasm_1q3p_gates})

available_qasm_gates.update({gatename: {"qubit": 2, "params": 0} for gatename in available_qasm_2q_gates})

available_qasm_gates.update({gatename: {"qubit": 3, "params": 0} for gatename in available_qasm_3q_gates})

available_qasm_gates.update({gatename: {"qubit": 4, "params": 0} for gatename in available_qasm_4q_gates})

available_qasm_gates.update({gatename: {"qubit": 2, "params": 1} for gatename in available_qasm_2q1p_gates})


[docs] def generate_sub_gateset_qasm(gate_list): """Generate a subset of the OpenQASM gateset filtered by gate names. Args: gate_list (list[str]): List of gate names to include in the subset. Returns: dict[str, dict]: A dictionary containing only the gates specified in gate_list, with their qubit and parameter requirements. """ return {k: v for k, v in available_qasm_gates.items() if k in gate_list}