# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

"""OpenQASM tooling for the QDK.

This module provides functions for compiling, running, estimating, and
generating circuits from OpenQASM 2.0/3.0 programs.

Key exports:

- :func:`~qdk.openqasm.import_openqasm` — import an OpenQASM program or
  fragment into the active Q# interpreter context.
- :func:`~qdk.openqasm.run` — simulate an OpenQASM program for one or more shots.
- :func:`~qdk.openqasm.compile` — compile an OpenQASM program to QIR for
  submission to a hardware target.
- :func:`~qdk.openqasm.circuit` — synthesize a circuit diagram from an
  OpenQASM program.
- :func:`~qdk.openqasm.estimate` — estimate the quantum resources required to
  run an OpenQASM program (deprecated; use :mod:`qdk.qre` instead).
- :class:`~qdk.openqasm.ProgramType` — controls how the source is interpreted
  (``Operation``, ``File``, or ``Fragments``).
- :class:`~qdk.openqasm.OutputSemantics` — controls measurement output
  semantics during compilation.
- :class:`~qdk.openqasm.QasmError` — raised when an OpenQASM source cannot
  be parsed or compiled.
"""

from ._circuit import circuit
from ._compile import compile
from ._estimate import estimate
from ._import import import_openqasm
from ._run import run
from .._native import ProgramType, OutputSemantics, QasmError  # type: ignore

__all__ = [
    "circuit",
    "compile",
    "estimate",
    "import_openqasm",
    "run",
    "ProgramType",
    "OutputSemantics",
    "QasmError",
]
