uniqc.backend_adapter.circuit_adapter module

Circuit adapter layer for converting UnifiedQuantum circuits to provider-native formats.

This module provides adapter classes for converting UnifiedQuantum Circuit objects to native circuit formats used by different quantum computing platforms: - OriginQ (pyqpanda) - QuarkStudio (OpenQASM 2.0) - IBM (qiskit) - TianYan (QCIS text, via cqlib) - LogicalQubit (lqcloud QuantumCircuit)

Usage:

from uniqc.backend_adapter.circuit_adapter import OriginQCircuitAdapter, QuarkCircuitAdapter, IBMCircuitAdapter
from uniqc.circuit_builder import Circuit

# Create a UnifiedQuantum circuit
circuit = Circuit()
circuit.h(0)
circuit.cnot(0, 1)
circuit.measure(0, 1)

# Convert to provider-native circuits
originq_adapter = OriginQCircuitAdapter()
pyqpanda_circuit = originq_adapter.adapt(circuit)

quark_adapter = QuarkCircuitAdapter()
qasm2 = quark_adapter.adapt(circuit)

ibm_adapter = IBMCircuitAdapter()
qiskit_circuit = ibm_adapter.adapt(circuit)
class uniqc.backend_adapter.circuit_adapter.CircuitAdapter[source]

Bases: ABC, Generic[T]

Abstract base class for circuit adapters.

Provides a unified interface for converting UnifiedQuantum Circuit objects to provider-native circuit formats.

abstractmethod adapt(circuit)[source]

Convert a UnifiedQuantum Circuit to the provider’s native circuit format.

Parameters:

circuit – UnifiedQuantum Circuit object.

Returns:

Provider-native circuit object.

adapt_batch(circuits)[source]

Convert multiple UnifiedQuantum Circuits to provider-native format.

Parameters:

circuits – List of UnifiedQuantum Circuit objects.

Returns:

List of provider-native circuit objects.

abstractmethod get_supported_gates()[source]

Return the list of gate names supported by this adapter.

Returns:

List of supported gate names (uppercase strings).

class uniqc.backend_adapter.circuit_adapter.IBMCircuitAdapter[source]

Bases: CircuitAdapter[Any]

Adapter for converting UnifiedQuantum Circuit to qiskit (IBM) format.

Converts Circuit -> OriginIR -> QASM -> Qiskit QuantumCircuit.

SUPPORTED_GATES = ['H', 'X', 'Y', 'Z', 'S', 'T', 'SX', 'RX', 'RY', 'RZ', 'U1', 'U2', 'U3', 'CNOT', 'CX', 'CZ', 'SWAP', 'ISWAP', 'TOFFOLI', 'CCX', 'CSWAP', 'Fredkin', 'MEASURE', 'BARRIER', 'I', 'ID']
adapt(circuit)[source]

Convert UnifiedQuantum Circuit to qiskit QuantumCircuit.

The conversion path is: UnifiedQuantum Circuit -> OriginIR -> QASM -> Qiskit QuantumCircuit

Parameters:

circuit – UnifiedQuantum Circuit object.

Returns:

qiskit.QuantumCircuit object.

adapt_with_transpilation(circuit, backend=None, optimization_level=1, **kwargs)[source]

Convert and transpile the circuit for a specific backend.

Parameters:
  • circuit – UnifiedQuantum Circuit object.

  • backend – Qiskit backend to transpile for.

  • optimization_level – Transpiler optimization level (0-3).

  • **kwargs – Additional arguments for qiskit.compiler.transpile.

Returns:

Transpiled qiskit.QuantumCircuit object.

get_supported_gates()[source]

Return the list of gate names supported by this adapter.

class uniqc.backend_adapter.circuit_adapter.LogicalQubitCircuitAdapter[source]

Bases: CircuitAdapter[Any]

Adapter for converting UnifiedQuantum Circuit to an lqcloud QuantumCircuit.

SUPPORTED_GATES = ['H', 'X', 'Y', 'Z', 'S', 'T', 'SX', 'I', 'RX', 'RY', 'RZ', 'U1', 'CNOT', 'CZ', 'SWAP', 'ISWAP', 'TOFFOLI', 'MEASURE', 'BARRIER']
adapt(circuit)[source]

Convert UnifiedQuantum Circuit to an lqcloud QuantumCircuit.

get_supported_gates()[source]

Return the list of gate names supported by this adapter.

class uniqc.backend_adapter.circuit_adapter.OriginQCircuitAdapter[source]

Bases: CircuitAdapter[Any]

Adapter for converting UnifiedQuantum Circuit to pyqpanda (OriginQ) format.

Uses pyqpanda3’s intermediate compiler to convert OriginIR to QProg.

SUPPORTED_GATES = ['H', 'X', 'Y', 'Z', 'S', 'T', 'SX', 'RX', 'RY', 'RZ', 'RPhi', 'RPhi90', 'RPhi180', 'U1', 'U2', 'U3', 'U4', 'CNOT', 'CZ', 'SWAP', 'ISWAP', 'TOFFOLI', 'CSWAP', 'XX', 'YY', 'ZZ', 'XY', 'PHASE2Q', 'UU15', 'I', 'BARRIER', 'MEASURE']
adapt(circuit)[source]

Convert UnifiedQuantum Circuit to OriginIR string.

The OriginQAdapter.submit() receives this string and converts it to QProg internally via translate_circuit(). Returning QProg here would cause submit() to double-convert, breaking translate_circuit().

Parameters:

circuit – UnifiedQuantum Circuit object.

Returns:

OriginIR format string.

get_supported_gates()[source]

Return the list of gate names supported by this adapter.

class uniqc.backend_adapter.circuit_adapter.QuarkCircuitAdapter[source]

Bases: CircuitAdapter[str]

Adapter for converting UnifiedQuantum Circuit to OpenQASM 2.0 for QuarkStudio.

QuarkStudio’s interface accepts an OpenQASM 2.0 string in the task dictionary, so this adapter intentionally returns text rather than a provider-specific circuit object.

SUPPORTED_GATES = ['H', 'X', 'Y', 'Z', 'S', 'T', 'SX', 'RX', 'RY', 'RZ', 'U1', 'U2', 'U3', 'CNOT', 'CX', 'CZ', 'SWAP', 'ISWAP', 'TOFFOLI', 'CCX', 'CSWAP', 'MEASURE', 'BARRIER', 'I', 'ID']
adapt(circuit)[source]

Convert UnifiedQuantum Circuit to OpenQASM 2.0 text.

get_supported_gates()[source]

Return the list of gate names supported by this adapter.

class uniqc.backend_adapter.circuit_adapter.TianyanCircuitAdapter[source]

Bases: CircuitAdapter[str]

Adapter for converting UnifiedQuantum Circuit to QCIS text (TianYan).

Returns the QCIS string; TianyanAdapter submits it via cqlib.TianYanPlatform.submit_job.

SUPPORTED_GATES = ['H', 'X', 'Y', 'Z', 'S', 'T', 'SX', 'RX', 'RY', 'RZ', 'CNOT', 'CZ', 'SWAP', 'XY', 'TOFFOLI', 'MEASURE', 'BARRIER']
adapt(circuit)[source]

Convert UnifiedQuantum Circuit to QCIS text.

get_supported_gates()[source]

Return the list of gate names supported by this adapter.

uniqc.backend_adapter.circuit_adapter.originir_to_lqcloud_circuit(originir, circuit_cls)[source]

Convert an OriginIR string to an lqcloud QuantumCircuit.

Gate methods follow qiskit conventions: parameterised gates take the angle first (rx(theta, qubit)), measurements take measure(qubit, clbit).

Parameters:
  • originir – Circuit in OriginIR format.

  • circuit_cls – The lqcloud.QuantumCircuit class (passed in so this function never imports lqcloud itself).

Returns:

An lqcloud QuantumCircuit object.

Raises:
  • ValueError – If a line cannot be parsed.

  • NotImplementedError – If the circuit uses a gate or construct with no lqcloud equivalent.

uniqc.backend_adapter.circuit_adapter.originir_to_qcis(originir)[source]

Convert an OriginIR string to QCIS text for the TianYan platform.

QCIS is a line-based format, e.g. H Q0, RX Q0 0.12, CZ Q0 Q6, M Q0. Measurement lines carry no classical-bit index — the measurement order is the cbit order, so MEASURE lines must assign cbits sequentially (the uniqc convention).

Parameters:

originir – Circuit in OriginIR format.

Returns:

QCIS text (one instruction per line).

Raises:
  • ValueError – If a line cannot be parsed or a qubit index is out of range for the QINIT size.

  • NotImplementedError – If the circuit uses a gate or construct with no QCIS equivalent.