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:
  • line (str) – QASM line.

  • n_parameters (int) – Expected number of 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:
  • line (str) – QASM line.

  • n_parameters (int) – Expected number of 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:
  • line (str) – QASM line.

  • n_parameters (int) – Expected number of 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+) *\\] *$'#