Source code for uniqc.compile.converter

"""OriginIR and OpenQASM2 format conversion utilities.

This module provides bidirectional conversion between OriginIR-ext,
official OriginIR, and OpenQASM2 quantum circuit representations.
"""

__all__ = [
    "convert_oir_to_qasm",
    "convert_qasm_to_oir",
    "convert_originir_ext_to_originir",
]
from uniqc._error_hints import format_enriched_message
from uniqc.exceptions import CircuitTranslationError

from .originir import OriginIR_BaseParser
from .qasm import OpenQASM2_BaseParser


[docs] def convert_oir_to_qasm(originir_str: str) -> str: """ Convert OriginIR to OpenQASM2. """ try: originir_parser = OriginIR_BaseParser() originir_parser.parse(originir_str) if originir_parser.qram_declarations: raise CircuitTranslationError( "Circuit contains QRAM declarations which cannot be converted to " "OpenQASM 2.0. QRAM is an OriginIR-ext-only feature.", source_format="originir-ext", target_format="qasm2", ) return originir_parser.to_qasm() except CircuitTranslationError: raise except Exception as e: raise CircuitTranslationError( format_enriched_message(f"Failed to convert OriginIR to OpenQASM2: {e}", "compilation") ) from e
[docs] def convert_qasm_to_oir(qasm_str: str) -> str: """ Convert OpenQASM2 to OriginIR. """ try: qasm_parser = OpenQASM2_BaseParser() qasm_parser.parse(qasm_str) return qasm_parser.to_originir() except Exception as e: raise CircuitTranslationError( format_enriched_message(f"Failed to convert OpenQASM2 to OriginIR: {e}", "compilation") ) from e
[docs] def convert_originir_ext_to_originir(originir_ext_str: str) -> str: """Convert OriginIR-ext (superset) to strict official OriginIR. Pipeline: 1. Parse the OriginIR-ext string into a :class:`~uniqc.Circuit`. 2. Decompose extended gates to the official gate set. 3. Serialize using block-level ``DAGGER``/``CONTROL`` syntax. The output is valid under the official OriginIR specification accepted by OriginQ cloud. """ try: parser = OriginIR_BaseParser() parser.parse(originir_ext_str) if parser.qram_declarations: raise CircuitTranslationError( "Circuit contains QRAM declarations which cannot be converted to " "official OriginIR. QRAM is an OriginIR-ext-only feature.", source_format="originir-ext", target_format="originir", ) circuit = parser.to_circuit() return circuit.to_originir_official() except CircuitTranslationError: raise except Exception as e: raise CircuitTranslationError( format_enriched_message( f"Failed to convert OriginIR-ext to official OriginIR: {e}", "compilation" ) ) from e