uniqc.qasm.qasm_line_parser module
OpenQASM 2.0 line parser module.
This module provides regex-based parsing for individual OpenQASM 2.0 lines,
supporting qreg/creg definitions, 1-4 qubit gates, parameterized gates, and measurements.
- Key exports:
OpenQASM2_LineParser: Parser class for individual OpenQASM 2.0 lines.
-
class uniqc.qasm.qasm_line_parser.OpenQASM2_LineParser[source]
Bases: object
Parser for individual OpenQASM 2.0 lines.
Provides regex-based parsing for OpenQASM 2.0 statements including
qreg/creg definitions, 1-4 qubit gates, parameterized gates, and measurements.
-
any_parameters: str = '\\(([^()]+)\\)'
-
blank: str = ' *'
-
comma: str = ','
-
static handle_1q(line)[source]
Parse a 1-qubit gate line.
- Returns:
(op_name, qreg_name, qubit_index)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_1q1p(line)[source]
Parse a 1-qubit 1-parameter gate line.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_1q2p(line)[source]
Parse a 1-qubit 2-parameter gate line.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_1q3p(line)[source]
Parse a 1-qubit 3-parameter gate line.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_1q4p(line)[source]
Parse a 1-qubit 4-parameter gate line.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_1qnp(line, n_parameters)[source]
Parse a 1-qubit n-parameter gate line.
- Parameters:
-
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
-
static handle_2q(line)[source]
Parse a 2-qubit gate line.
- Returns:
(op_name, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_2q1p(line)[source]
Parse a 2-qubit 1-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_2q2p(line)[source]
Parse a 2-qubit 2-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_2q3p(line)[source]
Parse a 2-qubit 3-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_2q4p(line)[source]
Parse a 2-qubit 4-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_2qnp(line, n_parameters)[source]
Parse a 2-qubit n-parameter gate line.
- Parameters:
-
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
-
static handle_3q(line)[source]
Parse a 3-qubit gate line.
- Returns:
(op_name, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_3q1p(line)[source]
Parse a 3-qubit 1-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_3q2p(line)[source]
Parse a 3-qubit 2-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_3q3p(line)[source]
Parse a 3-qubit 3-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_3q4p(line)[source]
Parse a 3-qubit 4-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_3qnp(line, n_parameters)[source]
Parse a 3-qubit n-parameter gate line.
- Parameters:
-
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
-
static handle_4q(line)[source]
Parse a 4-qubit gate line.
- Returns:
(op_name, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3, qreg_name4, qubit_index4)
- Return type:
tuple
- Parameters:
line (str)
-
static handle_creg(line)[source]
Parse a creg definition line.
- Parameters:
line (str) – QASM line defining a classical register.
- Returns:
(register_name, size)
- Return type:
tuple
-
static handle_measure(line)[source]
Parse a MEASURE statement line.
- Parameters:
line (str) – QASM measure statement.
- Returns:
(qreg_name, qubit_index, creg_name, creg_index)
- Return type:
tuple
-
static handle_parameters(parameters_str)[source]
Parse a parameter string into a list of floats.
- Parameters:
parameters_str (str) – Comma-separated parameter expression string.
- Returns:
List of parsed parameter values.
- Return type:
list[float]
-
static handle_qreg(line)[source]
Parse a qreg definition line.
- Parameters:
line (str) – QASM line defining a quantum register.
- Returns:
(register_name, size)
- Return type:
tuple
-
identifier: str = '([A-Za-z_][A-Za-z_\\d]*)'
-
index: str = '\\[ *(\\d+) *\\]'
-
static parse_line(line)[source]
Parse a single line of OpenQASM 2 code.
- Returns:
Gate name string or None
q: Qubit spec — (qreg_name, qubit_index) for 1q, list for multi-q, or None
c: Classical bit spec — (creg_name, creg_index) or None
parameter: Parameter list (from handle_parameters) or None
- Return type:
operation
- Parameters:
line (str)
-
qreg_str: str = '([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *'
-
regexp_1q: Pattern[str] = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_1q_str: str = '^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_1qnp: Pattern[str] = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_1qnp_str: str = '^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_2q: Pattern[str] = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_2q_str: str = '^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_2qnp: Pattern[str] = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_2qnp_str: str = '^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_3q: Pattern[str] = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_3q_str: str = '^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_3qnp: Pattern[str] = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_3qnp_str: str = '^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_4q: Pattern[str] = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *)
-
regexp_4q_str: str = '^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_creg: Pattern[str] = re.compile('^creg *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_creg_str: str = '^creg *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_measure: Pattern[str] = re.compile('^measure *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *-> *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_measure_str: str = '^measure *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *-> *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'
-
regexp_qreg: Pattern[str] = re.compile('^qreg *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')
-
regexp_qreg_str: str = '^qreg *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'