Skip to main content

unitarylab

A Python toolkit for building, simulating, analyzing, and compiling quantum circuits.
面向量子线路构建、模拟、分析与编译的 Python 工具包。

Python 3.10, 3.11, and 3.12 NumPy, PyTorch, C++, and TensorNet backends Circuit interface UnitaryLab license

English · 中文


English

UnitaryLab provides a high-level Circuit API for quantum-circuit construction, simulation, analysis, visualization, interoperability, and hardware compilation. It supports dense statevectors, matrix-product states, and density matrices.

Website · Simulator User Manual · 中文

Installation

UnitaryLab requires Python 3.10–3.12.

pip install unitarylab

Optional components can be installed as needed:

# CUDA 12 C++ backend
pip install "unitarylab[cuda]"

# Quantum chemistry workflows
pip install "unitarylab[chemistry]"

The main package supports Windows, Linux, and macOS. The CUDA extra supports Linux x86_64, Linux aarch64 server environments, and Windows x86-64, and requires a compatible NVIDIA driver. The chemistry extension currently supports Linux and macOS.

Bell-state quick start

from unitarylab import Circuit

circuit = Circuit(2)
circuit.h(0)
circuit.cx(0, 1)

result = circuit.execute()
print(result.probabilities)

The probability mapping contains every computational basis state:

{"00": 0.5, "10": 0.0, "01": 0.0, "11": 0.5}

Displayed bit strings use little-endian qubit order: qubit 0 is the rightmost bit.

Core capabilities

Area Capability
Circuit construction Registers, standard gates, controlled gates, measurements, and reusable circuit blocks
Statevector execution PyTorch, NumPy, native C++ CPU/CUDA backends
Tensor Network execution Matrix-Product-State-based TensorNet backends
Mixed-state execution Density-matrix simulation and built-in noise channels
Results State, probabilities, marginal queries, sampling, measurement, counts, and expectation values
Circuit tools Drawing, analysis, transforms, optimization, and transpilation
Interoperability OpenQASM 2/3 import and export, plus UnitaryLab and CUDA-Q Python source generation
Hardware Local compilation and provider-neutral hardware submission
Algorithms Quantum transforms, simulation, linear solvers, equations, and Schrodingerization

Common workflow

Create a circuit, add measurements when classical results are needed, and choose the number of measurement samples with shots:

from unitarylab import Circuit, Register, ClassicalRegister

q = Register("q", 2)
c = ClassicalRegister("c", 2)
circuit = Circuit(q, c)

circuit.h(q[0])
circuit.cx(q[0], q[1])
circuit.measure(q[0:2], c[0:2])

result = circuit.execute(shots=1000, seed=42)
print(result.counts)
print(result.classical_results_map)
print(result.classical_registers)
  • counts aggregates classical bit strings from all shots.
  • classical_results_map contains classical-bit values from the final shot.
  • classical_registers groups final-shot values by register name.
  • state is the dense final-shot state; backend_state exposes the native backend representation.

For state inspection without circuit measurements, execution results also provide targeted probability queries, marginal distributions, non-collapsing sampling, projective measurement, and normalized observable expectation values.

result = Circuit(1).execute()

print(result.probability("0"))
print(result.sample(shots=8, seed=7))
print(result.expectation("Z"))

Pauli-string characters correspond to the supplied qubits in order. This operator order is separate from displayed probability strings, where qubit 0 appears at the right-hand end.

Backend compatibility

Backend Device Notes
torch cpu, gpu Default backend with broad compatibility; GPU uses a compatible CUDA or Apple MPS environment
numpy cpu Dense NumPy statevector and a convenient NumPy-native result
cpp cpu Performance-oriented native C++ execution; generally preferred when speed is the priority
cpp gpu Performance-oriented CUDA C++ execution; requires unitarylab[cuda]
tensornet cpu Tensor network execution for low-entanglement circuits
execute_density() cpu, gpu/cuda CUDA devices require unitarylab[cuda]

Backend selection is explicit when needed:

result = circuit.execute(backend="numpy", device="cpu")
result = circuit.execute(backend="tensornet", device="cpu")
density_result = circuit.execute_density(device="cpu")

Density-matrix execution supports circuit measurements and multi-shot counts.

Circuit analysis and quantum computer task submission

The high-level API includes circuit drawing and analysis, structural circuit operations, local optimization and transpilation, OpenQASM 2/3 import and export, compilation, and provider-neutral hardware submission.

circuit.draw()
info = circuit.analyze(show=False)

optimized = circuit.optimize(optimization_level=1)
transpiled = circuit.transpile(basis="default")
qasm = circuit.to_qasm()
cudaq_source = circuit.to_python(framework="cudaq")

Generating CUDA-Q source does not require CUDA-Q to be installed. Running that source or calling circuit.to_cudaq() requires a separate cudaq installation.

Real-hardware submission requires provider API token and may require a machine identifier or vendor SDK:

TOKEN = "your-provider-token"

job = circuit.submit(
    provider="guodun",
    machine="gd_qc1",  # Guodun "Xiaohong-1"
    token=TOKEN,
    shots=1024,
)
hardware_result = job.result()  # Query once; call again later if unfinished.

An unfinished result has empty distributions and a message. Submission does not wait for execution, and each job.result() call queries once.

Confirm the provider, target machine, credentials, and possible quota or charges before submitting a real hardware task. See the online manual for provider-specific requirements.

For complete API signatures, backend behavior, noise semantics, hardware provider requirements, and algorithm examples, see the Simulator User Manual.

Documentation


中文

UnitaryLab 通过高层 Circuit API 提供量子线路构建、模拟、分析、绘图、 互操作和硬件编译能力,支持稠密状态向量、矩阵乘积态与密度矩阵模拟。

官网 · 模拟器用户手册 · English

安装

UnitaryLab 支持 Python 3.10–3.12。

pip install unitarylab

可按需安装可选组件:

# CUDA 12 C++ 后端
pip install "unitarylab[cuda]"

# 量子化学工作流
pip install "unitarylab[chemistry]"

主包支持 Windows、Linux 和 macOS。CUDA extra 支持 Linux x86_64、Linux aarch64 服务器环境和 Windows x86-64,并要求兼容的 NVIDIA 驱动。量子化学 扩展目前支持 Linux 和 macOS。

Bell 态快速示例

from unitarylab import Circuit

circuit = Circuit(2)
circuit.h(0)
circuit.cx(0, 1)

result = circuit.execute()
print(result.probabilities)

概率映射包含全部计算基态:

{"00": 0.5, "10": 0.0, "01": 0.0, "11": 0.5}

显示的比特字符串采用 little-endian 量子比特顺序,qubit 0 位于最右侧。

核心能力

方向 能力
线路构建 寄存器、标准门、受控门、测量与可复用线路块
状态向量执行 PyTorch、NumPy、原生 C++ CPU/CUDA 后端
张量网络执行 基于矩阵乘积态的 TensorNet 后端
混态执行 密度矩阵模拟与内置噪声通道
执行结果 状态、概率、边缘查询、采样、测量、计数与期望值
线路工具 绘图、分析、线路变换、优化与转译
互操作 OpenQASM 2/3 导入导出,以及 UnitaryLab 和 CUDA-Q Python 源码生成
量子硬件 本地编译与统一的真机提交接口
算法 量子变换、模拟、线性求解、方程与薛定谔化

常用工作流

创建线路;需要经典结果时添加测量,并通过 shots 指定测量采样次数:

from unitarylab import Circuit, Register, ClassicalRegister

q = Register("q", 2)
c = ClassicalRegister("c", 2)
circuit = Circuit(q, c)

circuit.h(q[0])
circuit.cx(q[0], q[1])
circuit.measure(q[0:2], c[0:2])

result = circuit.execute(shots=1000, seed=42)
print(result.counts)
print(result.classical_results_map)
print(result.classical_registers)
  • counts 汇总全部 shots 的经典比特串。
  • classical_results_map 保存最后一个 shot 的经典位值。
  • classical_registers 按寄存器名称组织最后一个 shot 的结果。
  • state 是最后一个 shot 的稠密状态,backend_state 则保留后端原生表示。

未在线路中添加测量时,执行结果还支持单项概率、边缘分布、不坍缩采样、 投影测量和归一化 Observable 期望值查询。

result = Circuit(1).execute()

print(result.probability("0"))
print(result.sample(shots=8, seed=7))
print(result.expectation("Z"))

Pauli 字符串中的字符按传入的 qubits 顺序逐一对应量子比特。该算符顺序与 概率字符串的显示顺序相互独立;概率字符串中 qubit 0 位于最右侧。

后端兼容表

后端 device 说明
torch cpu、gpu 兼容性广的默认后端;GPU 使用兼容的 CUDA 或 Apple MPS 环境
numpy cpu 稠密 NumPy 状态向量,便于直接获得 NumPy 原生结果
cpp cpu 面向性能的原生 C++ 执行
cpp gpu 面向高性能的 CUDA C++ 执行;需要 unitarylab[cuda]
tensornet cpu 面向低纠缠线路的张量网络后端执行
execute_density() cpu、gpu/cuda CUDA device 需要 unitarylab[cuda]

需要时可显式选择后端:

result = circuit.execute(backend="numpy", device="cpu")
result = circuit.execute(backend="tensornet", device="cpu")
density_result = circuit.execute_density(device="cpu")

密度矩阵执行支持线路测量和多 shots 的 counts 统计。

线路转义分析及量子真机任务提交

高层接口提供线路绘图与分析、线路结构变换、本地优化与转译、OpenQASM 2/3 导入导出、编译,以及统一的真机提交能力。

circuit.draw()
info = circuit.analyze(show=False)

optimized = circuit.optimize(optimization_level=1)
transpiled = circuit.transpile(basis="default")
qasm = circuit.to_qasm()
cudaq_source = circuit.to_python(framework="cudaq")

生成 CUDA-Q 源码无需安装 CUDA-Q;运行生成的源码或调用 circuit.to_cudaq() 则需要单独安装 cudaq。

真机提交需要真机供应商 API token,并可能要求机器标识或厂商 SDK:

TOKEN = "your-provider-token"

job = circuit.submit(
    provider="guodun",
    machine="gd_qc1",  # 国盾量子“骁鸿一号”
    token=TOKEN,
    shots=1024,
)
hardware_result = job.result()  # 单次查询,未完成时可稍后再次调用。

未完成的结果包含空分布和提示信息。提交不等待任务执行完成,每次 job.result() 只查询一次。

提交真实硬件任务前,请确认 provider、目标机器、token以及可能产生的额度或费用, 并在在线用户手册中查看各 provider 的具体要求。

完整 API 签名、后端行为、噪声语义、硬件 provider 要求和算法示例请查看 模拟器用户手册。

文档导航


License

License: LicenseRef-UnitaryLab-LICENSE. The Chinese license text is authoritative; the English version is provided for reference only.

Metadata

Release files for unitarylab 1.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for unitarylab 1.5.1
File Actions
unitarylab-1.5.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for unitarylab-1.5.1-cp312-cp312-win_amd64.whl
unitarylab-1.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for unitarylab-1.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
unitarylab-1.5.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for unitarylab-1.5.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
unitarylab-1.5.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for unitarylab-1.5.1-cp312-cp312-macosx_11_0_arm64.whl
unitarylab-1.5.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for unitarylab-1.5.1-cp311-cp311-win_amd64.whl
unitarylab-1.5.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for unitarylab-1.5.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
unitarylab-1.5.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for unitarylab-1.5.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
unitarylab-1.5.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for unitarylab-1.5.1-cp311-cp311-macosx_11_0_arm64.whl
unitarylab-1.5.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for unitarylab-1.5.1-cp310-cp310-win_amd64.whl
unitarylab-1.5.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for unitarylab-1.5.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
unitarylab-1.5.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for unitarylab-1.5.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
unitarylab-1.5.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for unitarylab-1.5.1-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 228.9 MB

Release files / unitarylab-1.5.1-cp312-cp312-win_amd64.whl

Download URL unitarylab-1.5.1-cp312-cp312-win_amd64.whl
Size 15.5 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
77900c267970d80e3d7864f546f24e24ea0156a0059f687b2ac09df5fa2a9531
BLAKE2b-256 checksum
How to use checksums
eb1c5e9bac24c2cc95838bb201adf13440ccfdc802b42329eb0f82ba8b059de1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL unitarylab-1.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 22.2 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ed115cdb27f27e7519dd8f03c9b86136cdfa005a39ecc17e30ba2abb8c8f25bb
BLAKE2b-256 checksum
How to use checksums
d16e2e4370dcf5304c854e36ab11839fe7a46695b87de3516e12eccbd1e442e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL unitarylab-1.5.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 20.7 MB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3d3d80e7cab5009c6e6ca62c32cd6a16be78ec682c28fa2fccf4a805cd68ad9f
BLAKE2b-256 checksum
How to use checksums
e1c2a97f5779d448b51181c86c2f489c75ee93c8f635f56ccb39b2cd265c4e4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL unitarylab-1.5.1-cp312-cp312-macosx_11_0_arm64.whl
Size 16.2 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2b128f923c0950bdd6b24c84eb378499171c09dff7e2603e2999842e56dc7c4a
BLAKE2b-256 checksum
How to use checksums
647b50fac2526517efae35d470a4e096fe153a78c9ef061c4c380b1f811523b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp311-cp311-win_amd64.whl

Download URL unitarylab-1.5.1-cp311-cp311-win_amd64.whl
Size 16.0 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
a48d6103b7f5ddba86079f66ae2c71f57b23bcf6ce6496e21e6b63f758937769
BLAKE2b-256 checksum
How to use checksums
06ab30a63a6fca112cc764571b78b4868b3f6965d2d5b5352c953f35ce99a4f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL unitarylab-1.5.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 23.0 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
82ff2c1c699d61393dcc0a8257de088293c5421ed9a97581f4c3b063a4adc821
BLAKE2b-256 checksum
How to use checksums
bdba0b43c2ea0abcb3e085c49a32af60039608fad73e6e358823a57b66e3bdfe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL unitarylab-1.5.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 21.6 MB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5fc6cc3855f0b3339c97250ac1a2220c35f7ae0b0f476616319d926158752490
BLAKE2b-256 checksum
How to use checksums
0c7bb4b0b1cf1626a33a69c5a176939908ce7bcc67dc04667f421f9b149f500d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL unitarylab-1.5.1-cp311-cp311-macosx_11_0_arm64.whl
Size 16.2 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0835540837b928726fb62c4d2c15215d9689eb8d8c81044a3f5954c26def36be
BLAKE2b-256 checksum
How to use checksums
ca849b3a226501f7f90a094805f0b29911c19c74d04800e4bdc1c3874cd68d08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp310-cp310-win_amd64.whl

Download URL unitarylab-1.5.1-cp310-cp310-win_amd64.whl
Size 16.1 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
a5d2b1f94e894a622183bc358aad0eb44ef112858d40f3f450a9bd9a71901363
BLAKE2b-256 checksum
How to use checksums
1ed7c4785f62b392a1a36d9457396c616086d7505217102827b8175047e24104
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL unitarylab-1.5.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 23.1 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ddfcc264502afd5aac563861484cecba6edf86d7fa797c118f055a24adfa85d9
BLAKE2b-256 checksum
How to use checksums
a1228fc1efce746c77495a2888b5d2972b1e5099d613d65d1bf7d61bdb27075d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL unitarylab-1.5.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 21.8 MB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
9c83ca976b522c283c19ed526d6494049edb593b0656aeb9082a68de7bd12c46
BLAKE2b-256 checksum
How to use checksums
769b8f7118f00002d314f5df385d42ed9d4c1e2ac196d7f7307670aad66ebc60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / unitarylab-1.5.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL unitarylab-1.5.1-cp310-cp310-macosx_11_0_arm64.whl
Size 16.5 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ec7d39384e66ea6c87bd0e8430bf2aadc6e3a1fa26ef1329afbc88a5d63171b5
BLAKE2b-256 checksum
How to use checksums
6ed32c93b70d51d1b60a72de824f87dd4922405556da98c97331f29bf2eabed5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Security for unitarylab 1.5.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page