Skip to main content

unitarylab

A Python quantum circuit simulator for building, executing, analyzing, and exporting quantum circuits.
面向量子电路构建、执行、分析与导出的 Python 量子模拟器。

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

English · 中文


English

Introduction

unitarylab provides a high-level Circuit interface, statevector and matrix-product-state execution, circuit drawing and analysis, OpenQASM interoperability, transpilation, and a collection of quantum algorithms.

The top-level user API is:

from unitarylab import Circuit, Register, ClassicalRegister

The simulator uses little-endian qubit ordering when displaying basis-state labels. For example, basis-state strings are interpreted with qubit 0 at the right-hand end of the underlying statevector indexing convention.

Minimal example: statevector index 1 is labeled "01", so qubit 0 = 1 and qubit 1 = 0.

Installation

pip install unitarylab

For the optional CUDA 12 C++ backend on Linux x86_64, Linux aarch64 server environments, or Windows x86-64, install the CUDA extra:

pip install "unitarylab[cuda]"

The extra installs the CPU package and the separately distributed unitarylab-cu12 wheel selected for the current Python and platform. It requires a compatible NVIDIA driver, but not a local CUDA Toolkit.

For the optional molecular Chemistry workflow, install the Chemistry extra:

pip install "unitarylab[chemistry]"

The extra installs the separately distributed unitarylab-chemistry package. Import its public API from unitarylab_chemistry.

Verify the installation:

import unitarylab

print(unitarylab.__version__)

Python 3.10+ is required. NumPy is a core dependency; PyTorch powers the default backend, while SciPy and Matplotlib support TensorNet, algorithms, and drawing. The C++ backend requires the packaged native extension.

For a CPU-only PyTorch installation:

pip install torch --index-url https://download.pytorch.org/whl/cpu
pip install unitarylab

Quick Start

Create and execute a Bell-state circuit:

from unitarylab import Circuit

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

result = circuit.execute()

print(result.state)
print(result.probabilities)

The probability distribution is approximately:

{"00": 0.5, "11": 0.5}

Common gate families include single-qubit gates, rotation gates, controlled and multi-controlled gates, SWAP, and custom unitary matrices.

Measurement and Sampling

Create a classical register and map measured qubits to classical bits:

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)

shots must be a positive integer and defaults to 1. seed defaults to 42; pass None for nondeterministic circuit measurements.

  • counts aggregates measured classical bit strings over all shots.
  • classical_results_map contains the final shot as {classical_bit: value}.
  • classical_registers groups the final-shot values by register name.
  • Unmeasured classical bits are represented by # in count keys and by -1 in register snapshots.

You can also sample an already executed quantum state without adding circuit measurement instructions:

from unitarylab import Circuit

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

result = circuit.execute()
samples = result.sample(shots=10, qubits=[0, 1], seed=7)
print(samples)

sample() does not collapse the stored result state. In contrast, result.measure(...) performs a projective measurement and updates the state.

Execution Result

Circuit.execute() returns an ExecutionResult or, for TensorNet execution, a compatible TensorNetExecutionResult.

Member Purpose
state Dense statevector. TensorNet materializes it on access.
backend_state Native backend representation, such as an MPS.
probabilities Full basis-state probability mapping.
probability(bitstring, qubits=None) Probability of one outcome.
marginal_probabilities(qubits=None) Distribution on selected qubits.
sample(shots, qubits=None, seed=None) Sample without collapsing the state.
expectation(observable, qubits=None) Normalized observable expectation value.
measure(qubits, seed=None) Measure and collapse selected qubits.
counts Classical counts collected by execute(shots=...).
classical_registers Final classical values grouped by register.

Computing every dense probability or requesting .state can be expensive for large systems. Prefer targeted probability, marginal, sampling, or expectation queries where possible.

Observables and Expectation Values

Use result.expectation(...) with these supported user-facing forms:

  • A full-length Pauli string, such as "ZZ" for a two-qubit result.
  • A Pauli string plus explicit qubits, such as "XX", qubits=(0, 2).
  • A single-qubit 2×2 Hermitian matrix plus one qubit.
  • A list of (coefficient, observable) or (coefficient, observable, qubits) tuples.
  • A list of mappings with coeff, pauli, and optional qubits keys.
from unitarylab import Circuit

circuit = Circuit(2)
circuit.h(0)
circuit.cx(0, 1)
result = circuit.execute(backend="numpy")

print(result.expectation("ZZ"))
print(result.expectation("X", qubits=0))

hamiltonian = [
    (0.5, "ZZ", (0, 1)),
    {"coeff": -0.25, "pauli": "X", "qubits": (0,)},
]
print(result.expectation(hamiltonian))

Pauli labels are limited to I, X, Y, and Z. Matrix observables must be finite, Hermitian, 2×2 matrices and currently apply to exactly one qubit.

Execution Backends

Circuit.execute() accepts initial_state, backend, device, dtype, shots, seed, and backend_options. Its defaults are backend="torch", device="cpu", dtype=np.complex128, shots=1, and seed=42.

Backend Device Native state Main notes
torch cpu, gpu PyTorch tensor GPU requires a compatible PyTorch environment.
numpy cpu NumPy array Dense statevector execution.
cpp cpu NumPy-compatible result Requires the native cppgates extension.
cpp gpu NumPy-compatible result Requires pip install "unitarylab[cuda]" and a CUDA 12 runtime.
tensornet cpu TensorNetState MPS Supports max_bond, cutoff, and routing options.

Select the CUDA backend with circuit.execute(backend="cpp", device="gpu") after installing the CUDA extra.

backend_options is accepted only by the TensorNet backend. Torch GPU support depends on the installed PyTorch backend. On Apple MPS, complex128 is rejected and the implementation limits execution to at most 16 qubits.

Density-Matrix Simulation

Use Circuit.execute_density() when the full mixed-state density matrix is required. This is a separate CPU backend backed by the native cppdensity extension; it is not selected through the backend argument of Circuit.execute().

import numpy as np

from unitarylab import Circuit

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

result = circuit.execute_density(device="cpu", dtype=np.complex128,)

print(result.state)          # shape: (2**n, 2**n)
print(result.trace)          # approximately 1
print(result.purity)         # 1 for this pure Bell state
print(result.probabilities)  # {"00": 0.5, "11": 0.5}
print(result.expectation("ZZ"))

initial_state may be None, a statevector, a density matrix, or a DensityMatrixState. complex64 and complex128 are supported. The returned DensityMatrixResult provides state, backend_state, trace, purity, probabilities, probability(), marginal_probabilities(), and expectation().

The density-matrix backend currently supports CPU unitary evolution and does not support circuit measurement, state collapse, shots/counts, or GPU execution.

Noise Models

The density-matrix backend provides BitFlip, PhaseFlip, DepolarizingNoise, AmplitudeDamping, and PhaseDamping. Attach channels with NoiseOperator, collect them in a NoiseModel, and pass the model to execute_density():

from unitarylab import Circuit
from unitarylab.backend import (
    AmplitudeDamping,
    BitFlip,
    NoiseModel,
    NoiseOperator,
)

noise_model = NoiseModel([
    NoiseOperator(BitFlip(0.02), gate_ids=("x", "rx")),
    NoiseOperator(AmplitudeDamping(0.05), qubits=(1,)),
])

result = circuit.execute_density(noise_model=noise_model)

Noise is applied after matching primitive gates. Channels are single-qubit and do not currently cover correlated noise, readout error, or GPU noise.

Circuit Operations

Frequently used circuit operations include:

Operation Behavior
initialize(state, qubits) Append state-preparation gates.
append(other, target, ...) Mutate the circuit by appending a circuit block.
prepend(other, target, ...) Mutate the circuit by prepending a circuit block.
inverse() Return a new inverse circuit.
dagger() Return a new Hermitian-adjoint circuit.
repeat(times) Return a new repeated circuit.
control(num_control_qubits, ...) Return a new controlled circuit.
decompose(n=1, name=None) Return a new circuit with block gates decomposed.
transpile(gates_to_unroll=None, basis="default") Return a transpiled circuit.

append() and prepend() modify the receiving circuit. Transformations such as inverse(), dagger(), repeat(), control(), and decompose() return new circuits and leave the source circuit unchanged.

from unitarylab import Circuit

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

circuit = Circuit(2)
circuit.append(block, target=[0, 1])

inverse = circuit.inverse()
repeated = circuit.repeat(2)
controlled = circuit.control(1)
decomposed = circuit.decompose()
transpiled = circuit.transpile()

initialize() accepts a normalized statevector whose dimension matches the selected qubits.

TensorNet

The TensorNet backend stores states as an open-boundary matrix product state (MPS). Use TensorNetState to create, copy, or convert user-level MPS states.

import numpy as np

from unitarylab import Circuit
from unitarylab.backend.tensornet import TensorNetState

dense_state = np.array([1, 0, 0, 0], dtype=np.complex128)
mps_state = TensorNetState.from_statevector(dense_state, max_bond=64)

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

result = circuit.execute(
    initial_state=mps_state,
    backend="tensornet",
    backend_options={
        "max_bond": 64,
        "cutoff": 1e-10,
        "routing": "auto",
    },
)

print(result.backend_state)
print(result.backend_state.to_statevector())

Each MPS tensor uses (left bond, physical dimension 2, right bond) ordering; the first tensor represents qubit 0. routing may be "auto", "swap", or "mpo".

Explicit max_bond and cutoff values in backend_options override values stored in the input TensorNetState. The input is copied before execution. Statevector backends do not implicitly contract MPS inputs; convert explicitly with to_statevector().

Drawing and Analysis

from unitarylab import Circuit

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

circuit.draw()
print(circuit.draw(output="text"))
circuit.draw(output="latex", filename="bell.tex")
circuit.draw(filename="bell.png", title="Bell State")

info = circuit.analyze(show=False)
print(info.depth())
print(info.count_ops())
info.show()

matrix = circuit.get_matrix(backend="numpy")

Drawing outputs support Matplotlib (mpl/matplotlib), text (text/txt), and LaTeX (latex/tex/quantikz).

Compilation and Hardware Submission

The Circuit methods cover the common optimization, transpilation, mapping, and hardware-submission flow:

from unitarylab import Circuit

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

optimized = circuit.optimize(optimization_level=1)
transpiled = circuit.transpile(basis="default")

# Optimize, transpile, and map without submitting a hardware job.
compiled = circuit.compile(provider="guodun")

# Compile and submit a real hardware job.
result = circuit.submit(
    provider="guodun",
    token=TOKEN,
    shots=1024,
)

optimize() and transpile() return Circuit objects. transpile() performs local basis conversion, while compile() continues through mapping and returns a CompilationResult without submitting a job. submit() returns a provider-neutral HardwareResult.

Real-machine compilation and submission require provider credentials. Guodun credentials can be supplied through GUODUN_LOGIN_KEY or a QCompiler hardware.login_key. Use QCompiler when OpenQASM input or detailed pipeline and mitigation configuration is needed. Non-Guodun providers may require their vendor SDKs: LQCloud uses lqcloud, QPanda3 uses pyqpanda3, and Quafu needs no additional SDK.

Serialization and OpenQASM

The circuit API supports OpenQASM 2.0 and 3.0, file import/export, and Python source generation:

from unitarylab import Circuit

circuit = Circuit(2)
circuit.rx(0.5, 0)
circuit.cx(0, 1)

qasm3 = circuit.to_qasm()
qasm2 = circuit.to_qasm2()
restored = Circuit.from_qasm(qasm3)

circuit.to_qasm_file("bell.qasm")
from_file = Circuit.from_qasm_file("bell.qasm")

python_source = circuit.to_python(variable_name="bell")
circuit.to_python_file("bell.py", variable_name="bell")

from_qasm() auto-detects OpenQASM 2.0 or 3.0 from the header. to_qasm() and to_qasm_file() emit OpenQASM 3.0; to_qasm2() emits OpenQASM 2.0. Some gates must be decomposed or transpiled before QASM export. Python source generation currently supports native rx, ry, rz, p, and cx gates; unsupported or nested gate structures raise RuntimeError.

Algorithm Library

The following user-facing areas are available below unitarylab.library. Chemistry APIs are intentionally outside the scope of this quick guide.

Area Main entry points
Quantum Fourier transform QFT, IQFT
Quantum phase estimation QPE
Linear combination of unitaries LCU
Block encoding block_encode, with FABLE and Nagy subpackages
Hamiltonian simulation hamiltonian_simulation, QSP/Trotter/Taylor/QDrift methods
Signal and singular-value transformation QSP, QSVT
Linear systems solve, plus HHL/QSVT/Schrödingerization/AQC/VQLS/CKS solvers
Equations Differential operators, parsing, and Schrödingerization APIs
Fermi-Hubbard Hamiltonian construction, ground-state, and magnetic-moment utilities
Pauli operators Decomposition, evolution, products, and matrix conversion

Further Documentation


中文

简介

unitarylab 以高层 Circuit 接口为核心,支持状态向量和矩阵乘积态模拟、 电路绘图与分析、OpenQASM 互操作、转译及常用量子算法。

顶层用户入口为:

from unitarylab import Circuit, Register, ClassicalRegister

模拟器显示计算基标签时采用 little-endian 量子比特顺序。最小示例:状态向量 索引 1 的概率标签为 "01",即 qubit 0 = 1qubit 1 = 0

安装

pip install unitarylab

在 Linux x86_64、Linux aarch64 服务器环境或 Windows x86-64 上使用可选的 CUDA 12 C++ 后端,可安装 CUDA extra:

pip install "unitarylab[cuda]"

该 extra 会安装 CPU 主包,并根据当前 Python 和平台选择独立发布的 unitarylab-cu12 wheel。运行需要兼容的 NVIDIA 驱动,但不要求本地安装 CUDA Toolkit。

使用可选的分子 Chemistry 工作流时,可安装 Chemistry extra:

pip install "unitarylab[chemistry]"

该 extra 会安装独立发布的 unitarylab-chemistry 包。其公开 API 从 unitarylab_chemistry 导入。

验证安装:

import unitarylab

print(unitarylab.__version__)

需要 Python 3.10+。NumPy 是核心依赖;PyTorch 提供默认后端,SciPy 和 Matplotlib 用于 TensorNet、算法及绘图。C++ 后端需要安装包中的原生扩展。

快速开始

from unitarylab import Circuit

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

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

概率分布约为 {"00": 0.5, "11": 0.5}

测量与采样

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)

shots 必须是正整数,默认值为 1seed 默认值为 42,传入 None 可使用非确定性电路测量。

  • counts 汇总所有 shots 的经典比特字符串。
  • classical_results_map 保存最后一次 shot 的 {经典位: 测量值}
  • classical_registers 按寄存器名称组织最后一次测量值。
  • 未测量经典位在 counts 键中表示为 #,在寄存器快照中表示为 -1

执行后也可以直接采样量子态:

from unitarylab import Circuit

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

print(result.sample(shots=10, qubits=[0, 1], seed=7))

sample() 不会坍缩结果中的状态;result.measure(...) 会执行投影测量并更新状态。

执行结果

成员 用途
state 稠密状态向量;TensorNet 在访问时进行收缩。
backend_state 后端原生状态,例如 MPS。
probabilities 完整计算基概率映射。
probability(bitstring, qubits=None) 查询单个结果概率。
marginal_probabilities(qubits=None) 查询指定量子比特的边缘分布。
sample(shots, qubits=None, seed=None) 不坍缩状态的采样。
expectation(observable, qubits=None) 计算归一化期望值。
measure(qubits, seed=None) 测量并坍缩指定量子比特。
counts execute(shots=...) 收集的经典计数。
classical_registers 按经典寄存器分组的最终值。

大型系统应优先使用单项概率、边缘概率、采样或期望值查询,避免不必要地访问 完整概率映射或稠密状态向量。

Observable 与期望值

result.expectation(...) 支持:完整 Pauli 字符串;Pauli 字符串加指定量子比特; 单量子比特 2×2 Hermitian 矩阵;tuple 项或 mapping 项组成的列表。

from unitarylab import Circuit

circuit = Circuit(2)
circuit.h(0)
circuit.cx(0, 1)
result = circuit.execute(backend="numpy")

print(result.expectation("ZZ"))
print(result.expectation("X", qubits=0))

hamiltonian = [
    (0.5, "ZZ", (0, 1)),
    {"coeff": -0.25, "pauli": "X", "qubits": (0,)},
]
print(result.expectation(hamiltonian))

Pauli 标签仅支持 I/X/Y/Z。矩阵 Observable 必须是有限、Hermitian 的 2×2 矩阵,并且当前只能作用于一个量子比特。

执行后端

execute() 默认使用 backend="torch"device="cpu"dtype=np.complex128shots=1seed=42

后端 device 原生状态 主要限制
torch cpugpu PyTorch tensor GPU 依赖 PyTorch 环境。
numpy cpu NumPy array 稠密状态向量。
cpp cpu NumPy 兼容结果 需要 cppgates 原生扩展。
cpp gpu NumPy 兼容结果 需要 pip install "unitarylab[cuda]" 和 CUDA 12 runtime。
tensornet cpu TensorNetState MPS 支持截断和 routing 配置。

安装 CUDA extra 后,通过 circuit.execute(backend="cpp", device="gpu") 选择 CUDA 后端。

backend_options 仅适用于 TensorNet。Apple MPS 路径不支持 complex128, 且源码将执行规模限制为最多 16 个量子比特。

密度矩阵模拟

需要完整混态密度矩阵时,可使用 Circuit.execute_density()。它是由原生 cppdensity 扩展支持的独立 CPU 后端,不通过 Circuit.execute()backend 参数选择。

import numpy as np

from unitarylab import Circuit

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

result = circuit.execute_density(
    initial_state=None,
    device="cpu",
    dtype=np.complex128,
)

print(result.state)          # shape 为 (2**n, 2**n)
print(result.trace)          # 约等于 1
print(result.purity)         # 当前 Bell 纯态为 1
print(result.probabilities)  # {"00": 0.5, "11": 0.5}
print(result.expectation("ZZ"))

initial_state 可以是 None、状态向量、密度矩阵或 DensityMatrixState, 支持 complex64complex128。返回的 DensityMatrixResult 提供 statebackend_statetracepurityprobabilitiesprobability()marginal_probabilities()expectation()

当前密度矩阵后端支持 CPU unitary 演化,暂不支持电路测量、状态坍缩、 shots/counts 和 GPU 执行。

噪声模型

当前提供 BitFlipPhaseFlipDepolarizingNoiseAmplitudeDampingPhaseDamping。使用 NoiseOperator 将 channel 与门匹配规则绑定,加入 NoiseModel 后传给 execute_density()

from unitarylab import Circuit
from unitarylab.backend import (
    AmplitudeDamping,
    BitFlip,
    NoiseModel,
    NoiseOperator,
)

noise_model = NoiseModel([
    NoiseOperator(BitFlip(0.02), gate_ids=("x", "rx")),
    NoiseOperator(AmplitudeDamping(0.05), qubits=(1,)),
])

result = circuit.execute_density(noise_model=noise_model)

噪声会在匹配的 primitive gate 后应用。当前 channel 均为单量子比特,暂不覆盖 相关多比特噪声、readout error 或 GPU noise。

常用电路操作

操作 行为
initialize(state, qubits) 追加状态制备门。
append(other, target, ...) 原地追加电路块。
prepend(other, target, ...) 原地前置电路块。
inverse() / dagger() 返回新的逆电路或共轭转置电路。
repeat(times) 返回新的重复电路。
control(n, ...) 返回新的受控电路。
decompose() 返回新的分解电路。
transpile() 返回转译后的电路。
from unitarylab import Circuit

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

circuit = Circuit(2)
circuit.append(block, target=[0, 1])

inverse = circuit.inverse()
repeated = circuit.repeat(2)
controlled = circuit.control(1)
decomposed = circuit.decompose()
transpiled = circuit.transpile()

append()prepend() 修改接收电路;其余表中列出的变换返回新电路。 initialize() 要求输入归一化状态向量,维度与目标量子比特数量匹配。

TensorNet

TensorNet 后端以开放边界矩阵乘积态(MPS)保存状态。TensorNetState 是用户级 MPS 状态入口。

import numpy as np

from unitarylab import Circuit
from unitarylab.backend.tensornet import TensorNetState

dense_state = np.array([1, 0, 0, 0], dtype=np.complex128)
mps_state = TensorNetState.from_statevector(dense_state, max_bond=64)

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

result = circuit.execute(
    initial_state=mps_state,
    backend="tensornet",
    backend_options={
        "max_bond": 64,
        "cutoff": 1e-10,
        "routing": "auto",
    },
)

print(result.backend_state)
print(result.backend_state.to_statevector())

MPS 张量维度顺序为 (左键合, 物理维度 2, 右键合),第一个张量对应 qubit 0。 routing 支持 auto/swap/mpo。显式 max_bondcutoff 会覆盖输入状态中 的配置。状态向量后端不会隐式收缩 MPS,应先调用 to_statevector()

绘图与分析

from unitarylab import Circuit

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

circuit.draw()
print(circuit.draw(output="text"))
circuit.draw(output="latex", filename="bell.tex")
circuit.draw(filename="bell.png", title="Bell State")

info = circuit.analyze(show=False)
print(info.depth())
print(info.count_ops())
info.show()

matrix = circuit.get_matrix(backend="numpy")

绘图支持 Matplotlib、文本和 LaTeX 输出。

编译与硬件提交

Circuit 接口覆盖常用的优化、门展开、mapping 和硬件提交流程:

from unitarylab import Circuit

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

optimized = circuit.optimize(optimization_level=1)
transpiled = circuit.transpile(basis="default")

# 优化、门展开和 mapping,但不提交硬件任务
compiled = circuit.compile(provider="guodun")

# 编译并提交真实硬件任务
result = circuit.submit(
    provider="guodun",
    token=TOKEN,
    shots=1024,
)

optimize()transpile() 返回 Circuittranspile() 只进行本地 basis 转换,compile() 会继续完成 mapping,并在不提交任务的情况下返回 CompilationResultsubmit() 返回统一的 HardwareResult

真机编译和提交需要 provider 凭据。Guodun 凭据可通过 GUODUN_LOGIN_KEYQCompilerhardware.login_key 提供。OpenQASM 输入或需要详细 pipeline、mitigation 配置时可使用 QCompiler。非 Guodun provider 可能需要厂商 SDK:LQCloud 使用 lqcloud,QPanda3 使用 pyqpanda3,Quafu 无需额外 SDK。

序列化与 OpenQASM

from unitarylab import Circuit

circuit = Circuit(2)
circuit.rx(0.5, 0)
circuit.cx(0, 1)

qasm3 = circuit.to_qasm()
qasm2 = circuit.to_qasm2()
restored = Circuit.from_qasm(qasm3)

circuit.to_qasm_file("bell.qasm")
from_file = Circuit.from_qasm_file("bell.qasm")

python_source = circuit.to_python(variable_name="bell")
circuit.to_python_file("bell.py", variable_name="bell")

from_qasm() 根据头部自动识别 OpenQASM 2.0 或 3.0;to_qasm()to_qasm_file() 输出 3.0,to_qasm2() 输出 2.0。部分量子门必须先分解或 转译才能导出。Python 源码生成当前支持原生 rx/ry/rz/p/cx 门;不支持或 嵌套的门结构会抛出 RuntimeError

算法库概览

以下用户级能力位于 unitarylab.library。本快速指南不介绍 Chemistry。

方向 主要入口
量子傅里叶变换 QFTIQFT
量子相位估计 QPE
线性组合酉算子 LCU
块编码 block_encode,以及 FABLE、Nagy 子包
哈密顿量模拟 hamiltonian_simulation 及 QSP/Trotter/Taylor/QDrift 方法
信号与奇异值变换 QSPQSVT
线性方程组 solve 及 HHL/QSVT/Schrödinger化/AQC/VQLS/CKS 求解器
方程 微分算子、方程解析和 Schrödingerization
Fermi-Hubbard Hamiltonian 构建、基态与磁矩工具
Pauli Operator 分解、演化、乘积和矩阵转换

更多文档


License

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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

unitarylab-1.4.0-cp312-cp312-win_amd64.whl (10.1 MB view details)

Uploaded CPython 3.12Windows x86-64

unitarylab-1.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (79.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

unitarylab-1.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (77.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

unitarylab-1.4.0-cp312-cp312-macosx_11_0_arm64.whl (10.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

unitarylab-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl (12.1 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

unitarylab-1.4.0-cp311-cp311-win_amd64.whl (10.4 MB view details)

Uploaded CPython 3.11Windows x86-64

unitarylab-1.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (78.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

unitarylab-1.4.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (77.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

unitarylab-1.4.0-cp311-cp311-macosx_11_0_arm64.whl (11.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

unitarylab-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl (12.1 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

unitarylab-1.4.0-cp310-cp310-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.10Windows x86-64

unitarylab-1.4.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (75.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

unitarylab-1.4.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (74.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

unitarylab-1.4.0-cp310-cp310-macosx_11_0_arm64.whl (11.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

unitarylab-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl (12.2 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file unitarylab-1.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: unitarylab-1.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 10.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for unitarylab-1.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ea2bf08a355b0d4fe09cd6d98adfbaa5e59502049f20eafbc4787cd459d4f305
MD5 ef2fd6f53a455e0a203184a3a4efdc7b
BLAKE2b-256 86607d456b4497bd6be8bc04368da61a5f35ba273021eab9b2a14ed04a95319c

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 00f8902adc5bf032b88f8111ee6238d983121ec7be3a53656aa6188ba109dc5e
MD5 26f0a7b7f8a7284131bc80382e1b5bfb
BLAKE2b-256 0a3f4dacecd0c568994b61623bfa5add06c83772d28956e4ea253a1db93c19f0

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0dd63ac90c4a376bef214d0df318f0644b09a1b293db4c4d9516151169dfb47b
MD5 a66ab0e4987739957b12cf0005de9efd
BLAKE2b-256 03a11afc87aa60a815a5c437afe5708c863a58b01181045efada1fb4ad75ec25

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15e5c572a9e1a8eef6cfaf4ee533bf256d0f3a02046d6da158ffa7705e9da059
MD5 019659538e91452770a922fa39f5f086
BLAKE2b-256 600f8606edc7bd59725932ee9d410808d8838827f3734ab7052f045e8193aff5

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 8f6274fe7c072551dbfbb51714209010aa60772228a6aaedb3ac4ba9e124fbf8
MD5 271504b4c94a94960155242227c131c1
BLAKE2b-256 922ba566f16561aa77269ca5b1e7a510e6cacd5142f48fe641d9845a63f3b82f

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: unitarylab-1.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 10.4 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for unitarylab-1.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5fa5321b76421d2bb57a341242a43053fff809bcf632a110bf567e76a3ea194f
MD5 45c0375848ba6d1f007eadaae6ac6864
BLAKE2b-256 8493dc59441aa55aa3e5a4b9998a4050b4a5c5e88bbf1adac36d7b1f8049df75

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fcca324e1879eb77958f056a1a68894e29c5f53ed3f98284626ba8266e83ca3b
MD5 50d6cc3e71c4ad197d9265de651a8c21
BLAKE2b-256 f1f7a13b05d3211ed495f3324b1b6e242e274c3b3945b8653e14781274160126

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d335119a76be87fc2ba10d8ee50f0a67329639e42d92c706868a097f671eae55
MD5 bdad9c756c49933ee7d72592e5b237b6
BLAKE2b-256 86db54a55c9d5fd687015132b30abd07f6e7076f4505774094306f12ecbf26e1

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7676ba240bcd81f461ffab3544757f1f641bc90b129be281b1151b332d004d4c
MD5 642e0edfcb9f2d2aa8d0ce8562883d5b
BLAKE2b-256 20e47dcb8863e64416098b68c8e7d99fd23e5643fa2d2326b2dfe05ec24c7d33

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3a42e19763c12da14c3a1e0f63af0c25cd4ecc9cb9bde51072b0108ff39bbc90
MD5 7369156efe8d9757f761481bbe92f8e2
BLAKE2b-256 ab77ab4f6eff1b3a869b30eb6bdfe9634fcae8668867b44cda1134b08aedb236

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: unitarylab-1.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 10.5 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for unitarylab-1.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f37de3d0a53d88bcc8adf95d79ed8ba2ab8041eb2e2afb889ce49ca83208af26
MD5 bbb324c7f55127beac2e71778842de9c
BLAKE2b-256 33c1d8a19c26b17161534f15d41b846b1a259d2683444625debf5f20af6b7e88

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 822fb354203106057bb8980d942e753c26cb960eebd6f4254c5320837762d382
MD5 d74cc7b0ed7f600ecf541eb0d75cfa57
BLAKE2b-256 506da1756a740c1b094886375bd7023cc7958f84931b855758c1695a7c0dc704

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6a6ccc67edf09231c35330f516941670180f5d0ff725a790df1c4a00665f1609
MD5 c342d0c58f61df3fef65b5f73216556b
BLAKE2b-256 ce5d4d6dca79468846819baea2bec0a42372066ee903ddb41d6a13282dc224b1

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cf4f05b313de1cba403d5ab757117635b41a88fd4e46d9e3058cd4820bd21257
MD5 d47a991029b3142a6072d51a8dd0ecc5
BLAKE2b-256 a054c8c2c44fa412b9346d4cf005dfaed9de7ae627bb8be4230c124cdf410e3f

See more details on using hashes here.

File details

Details for the file unitarylab-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for unitarylab-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9021f47918d936c5708b2d9d5029524e59658e9ca42b542f5e5e04b93704aa45
MD5 24e95608a293e1f29bbff597253f6c37
BLAKE2b-256 014da83470decfa0caef74104911b43f3b8c4cf236163469842a33f661e7f23d

See more details on using hashes here.

Release history Release notifications | RSS feed

1.4.2

15 files

1.4.1

15 files

This release

1.4.0 This release

15 files

1.3.1

15 files

1.2.1

15 files

1.2.0

15 files

1.1.6

15 files

1.1.5

15 files

1.1.4

15 files

1.1.3

15 files

1.1.2

15 files

1.1.0

12 files

1.0.1

12 files

1.0.0

12 files

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