qdk
The Quantum Development Kit (QDK) provides a single, cohesive Python entry point for compiling, simulating, and estimating resources for quantum programs (Q# and OpenQASM), with optional extras for visualization, cloud workflows, and interoperability with Qiskit and Cirq.
Install
To install the core functionality, which include Q# & OpenQASM simulation, compilation, and resource estimation support:
pip install qdk
To include the Jupyter extra, which adds visualizations using Jupyter Widgets in the qdk.widgets submodule and syntax highlighting for Jupyter notebooks in the browser:
pip install "qdk[jupyter]"
To add the Azure Quantum extra, which includes functionality for working with the Azure Quantum service in the qdk.azure submodule:
pip install "qdk[azure]"
For Qiskit integration, which exposes Qiskit interop utilities in the qdk.qiskit submodule:
pip install "qdk[qiskit]"
For Cirq integration, which exposes Cirq interop utilities in the qdk.cirq submodule:
pip install "qdk[cirq]"
To easily install all the above extras:
pip install "qdk[all]"
Quick Start
from qdk import qsharp
result = qsharp.run("{ use q = Qubit(); H(q); return MResetZ(q); }", shots=100)
print(result)
To use widgets (installed via qdk[jupyter] extra):
from qdk.qsharp import eval, run
from qdk.widgets import Histogram
eval("""
operation BellPair() : Result[] {
use qs = Qubit[2];
H(qs[0]);CX(qs[0], qs[1]);
MResetEachZ(qs)
}
""")
results = run("BellPair()", shots=1000, noise=(0.005, 0.0, 0.0))
Histogram(results)
OpenQASM parsing and analysis
The preview qdk.openqasm.parser and qdk.openqasm.semantic modules expose
read-only syntax and semantic trees. parse is recovery-oriented and returns
diagnostics on its result rather than raising; analyze additionally resolves
symbols, checks types, and evaluates constants. Node, symbol, and diagnostic
spans are global, half-open UTF-8 byte ranges resolved through the immutable
document the result owns.
from qdk.openqasm import analyze, dumps, parse
parsed = parse(
'OPENQASM 3.0; include "defs.inc"; qubit q; local q;',
path="memory://workspace/main.qasm",
includes={"memory://workspace/defs.inc": "gate local q { x q; }"},
)
assert not parsed.has_errors
assert parsed.program.document is parsed.document
assert dumps(parsed.program).startswith("OPENQASM 3.0;")
analysis = analyze("OPENQASM 3.0; int value = missing;")
assert analysis.has_errors
diagnostic = analysis.diagnostics[0]
source_range = analysis.document.source_map.range_from_span(diagnostic.labels[0].span)
assert source_range.source_id == analysis.document.entry.id
Both trees compare and hash structurally, ignoring source position and the
document a node came from, so the same construct written twice compares equal.
Resolved types and constant values are structured nodes rather than strings, so
dispatch over them with isinstance. QASMVisitor walks either tree, and
dumps writes canonical source for a whole syntactic program. Most class names
appear in both layers, so parser.SyntaxNode and semantic.SemanticNode answer
which tree a value came from.
These APIs are in preview and may change between QDK releases. Run
help(qdk.openqasm.parser) and help(qdk.openqasm.semantic) for the full
contracts, including include resolution, the shared-class exception, the
canonical format's guarantees, and the visitor's context protocol.
Public API Surface
Submodules:
qdk.qsharp– Q# interpreter functions:init,eval,run,compile,circuit,estimate,dump_machine,dump_circuit,dump_operation, and related types.qdk.openqasm– OpenQASM compilation, execution, parsing, semantic analysis, source navigation, visitors, and canonical serialization.qdk.estimator– resource estimation utilities.qdk.simulation– noise-aware simulation utilities:NeutralAtomDevice,NoiseConfig,run_qir,DensityMatrixSimulator,StateVectorSimulator, and related types.qdk.code– dynamic namespace populated at runtime with user-defined Q# and OpenQASM callables.qdk.qre– quantum resource estimation v3:estimate,Application,Architecture,ISA,ISATransform, and related types.qdk.applications– domain-specific quantum applications (e.g.qdk.applications.magnets).qdk.widgets– Jupyter widgets for visualization (requires theqdk[jupyter]extra).qdk.azure– Azure Quantum service integration (requires theqdk[azure]extra).qdk.qiskit– Qiskit interop:QSharpBackend,NeutralAtomBackend, and related types (requires theqdk[qiskit]extra).qdk.cirq– Cirq interop:NeutralAtomSampler(requires theqdk[cirq]extra).
Top level exports
For convenience, the following helpers and types are also importable directly from the qdk root (e.g. from qdk import code, Result). Algorithm execution APIs (like run / estimate) remain under qdk.qsharp or qdk.openqasm.
| Symbol | Type | Origin | Description |
|---|---|---|---|
code |
module | qdk.code |
Exposes operations defined in Q# or OpenQASM |
init |
function | qdk.qsharp.init |
Initialize/configure the QDK interpreter (target profile, options). |
set_quantum_seed |
function | qdk.qsharp.set_quantum_seed |
Deterministic seed for quantum randomness (simulators). |
set_classical_seed |
function | qdk.qsharp.set_classical_seed |
Deterministic seed for classical host RNG. |
dump_machine |
function | qdk.qsharp.dump_machine |
Emit a structured dump of full quantum state (simulator dependent). |
Result |
class | qdk.qsharp.Result |
Measurement result token. |
TargetProfile |
class | qdk.qsharp.TargetProfile |
Target capability / profile descriptor. |
StateDump |
class | qdk.qsharp.StateDump |
Structured state dump object. |
ShotResult |
class | qdk.qsharp.ShotResult |
Multi-shot execution results container. |
PauliNoise |
class | qdk.qsharp.PauliNoise |
Pauli channel noise model spec. |
DepolarizingNoise |
class | qdk.qsharp.DepolarizingNoise |
Depolarizing noise model spec. |
BitFlipNoise |
class | qdk.qsharp.BitFlipNoise |
Bit-flip noise model spec. |
PhaseFlipNoise |
class | qdk.qsharp.PhaseFlipNoise |
Phase-flip noise model spec. |
Context |
class | qdk.Context |
Isolated Q# and OpenQASM interpreter context for independent sessions. |
Configuration Map
You can provide configuration at initialization time as a Python dictionary.
In Python, pass qdk_config: dict[str, int | float | str | bool] to Context(...).
If qdk_config is omitted, the configuration map is empty. The map is immutable
after initialization. To use different configuration values, create a new Context.
In Q#, read values with Std.Core.ConfigValue(name, defaultValue). In Q# code, config
values are immutable: in the same program, repeated calls with the same
(name, defaultValue) produce the same result.
Supported types: int, float, str, and bool (corresponding to Int, Double,
String and Bool in Q#). The type of each value in qdk_config must match the
type of its corresponding default value.
Example:
import qdk
context = qdk.Context(qdk_config={"experiment_name": "baseline", "shots": 1000})
assert context.eval('Std.Core.ConfigValue("experiment_name", "")') == "baseline"
assert context.eval('Std.Core.ConfigValue("shots", 100)') == 1000
assert context.eval('Std.Core.ConfigValue("noise_level", 0.01)') == 0.01
Telemetry
This library sends telemetry. Minimal anonymous data is collected to help measure feature usage and performance. All telemetry events can be seen in the source file telemetry_events.py.
To disable sending telemetry from this package, set the environment variable QDK_PYTHON_TELEMETRY=none
Support
For more information about the Microsoft Quantum Development Kit, visit https://aka.ms/qdk.
Contributing
Q# welcomes your contributions! Visit the Q# GitHub repository at [https://github.com/microsoft/qdk] to find out more about the project.
Release files for qdk 1.32.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| qdk-1.32.0-cp310-abi3-win_arm64.whl | CPython 3.10 | abi3 | Windows ARM64 | Details |
| qdk-1.32.0-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| qdk-1.32.0-cp310-abi3-manylinux_2_35_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.35+ x86-64 | Details |
| qdk-1.32.0-cp310-abi3-manylinux_2_35_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.35+ ARM64 | Details |
| qdk-1.32.0-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| qdk-1.32.0-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 45.8 MB
Release files / qdk-1.32.0-cp310-abi3-win_arm64.whl
| Download URL | qdk-1.32.0-cp310-abi3-win_arm64.whl |
|---|---|
| Size | 8.0 MB |
| Tags | CPython 3.10 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
f42954e8cede2a935b1ebc6c25b2e111c8c352a752ef3111c7d5f377cf589185
|
|
BLAKE2b-256 checksum How to use checksums |
d7bbc1e8db9522c052d1cb814b26617afd2277c7be34c055a6b3dd43f6785441
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Release files / qdk-1.32.0-cp310-abi3-win_amd64.whl
| Download URL | qdk-1.32.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
cf2d79da7af893918ddeac26f497e477c51aafafaf3d22cf5f25863daef22916
|
|
BLAKE2b-256 checksum How to use checksums |
d82d24242354477201578a7f16761c76e82eff20d9e7cdf9b3030883a2e2f5db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Release files / qdk-1.32.0-cp310-abi3-manylinux_2_35_x86_64.whl
| Download URL | qdk-1.32.0-cp310-abi3-manylinux_2_35_x86_64.whl |
|---|---|
| Size | 8.0 MB |
| Tags | CPython 3.10 Linux glibc 2.35+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e7f075154e307f8df1aecb7c2c873fd1f6435aeab32404b0510e0757a301cb3d
|
|
BLAKE2b-256 checksum How to use checksums |
4e227d970a2fc959634fa24e4376e740cb2007c0180ed6f55d915c00688aa51c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Release files / qdk-1.32.0-cp310-abi3-manylinux_2_35_aarch64.whl
| Download URL | qdk-1.32.0-cp310-abi3-manylinux_2_35_aarch64.whl |
|---|---|
| Size | 7.4 MB |
| Tags | CPython 3.10 Linux glibc 2.35+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
bae491908b4be179d1183a4c9e17af9579f74e2801226e5e550c669ac61fe2aa
|
|
BLAKE2b-256 checksum How to use checksums |
058e0915a0bd4969086a29bdd841ab5fd82a7e66e777997db1b072a687e56f46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Release files / qdk-1.32.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | qdk-1.32.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
25a07b124078be978ffe5e579147885cffca72ebf33bf628da9886f5f6307ac8
|
|
BLAKE2b-256 checksum How to use checksums |
d050b0457e4a317161df2b76475541bddba024f229c6124a2810c6fefd38651d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Release files / qdk-1.32.0-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | qdk-1.32.0-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 7.1 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
12de0cd881476fc1d9bbf18c13380c85de7d2429a6073da772e50b3f965327db
|
|
BLAKE2b-256 checksum How to use checksums |
950342713f55e4b4f67ce808b450f92054e993c893d05b9c06ca90596dce54f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|