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

What is unitarylab?

Unitarylab is the Python quantum simulator SDK developed by UnitaryLab. It provides a high-level Circuit interface backed by statevector and tensor-network execution, so you can move from circuit construction to simulation results and circuit inspection in a single workflow.

It is suitable for quantum-computing education, algorithm prototyping, research experiments, and integrating the UnitaryLab Algorithms library.

Key Features

  • Simple circuit construction — Build circuits with Circuit, Register, and ClassicalRegister.
  • Rich gate operations — Use single-qubit, rotation, controlled, multi-controlled, SWAP, and custom unitary gates.
  • Statevector and tensor-network simulation — Use dense statevector backends or an MPS-based TensorNet backend, then inspect probabilities, samples, expectation values, and measurement results through a common result interface.
  • Flexible backends — Execute with NumPy, PyTorch, C++, or TensorNet on CPU; use PyTorch with CUDA-capable GPU environments when available.
  • Circuit inspection — Visualize circuits using Matplotlib, text, or LaTeX, and analyze gate counts, circuit depth, and layer structure.
  • Circuit transformations — Copy, invert, append, compose, and decompose circuits without changing the original circuit.
  • Interoperability — Import and export circuits through OpenQASM 3.0 utilities.
  • Algorithm-ready foundation — Use high-level modules such as QFT, QPE, LCU, HHL, QSP, QSVT, and Hamiltonian simulation.

Installation

pip install unitarylab

CPU-only installation (optional)

If you do not need GPU acceleration, install the CPU-only build of PyTorch before installing unitarylab:

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

Verify the installation:

import unitarylab

print(unitarylab.__version__)

Quick Start: Bell State

The following example creates a two-qubit Bell state, executes it, and reads its statevector and probabilities.

from unitarylab import Circuit

# Create a 2-qubit circuit
qc = Circuit(2)

# Prepare (|00> + |11>) / sqrt(2)
qc.h(0)
qc.cx(0, 1)

# Execute the circuit
result = qc.execute()

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

The probability distribution contains approximately 50% for |00> and 50% for |11>:

{'00': 0.5, '11': 0.5}

probabilities uses binary computational-basis strings as keys. The simulator follows a little-endian qubit-ordering convention; keep this in mind when interpreting multi-qubit results.

Common Gate Operations

Circuit provides single-qubit, rotation, controlled, multi-controlled, SWAP, and custom unitary operations. For example:

import numpy as np
from unitarylab import Circuit

qc = Circuit(3)
qc.h(0)                              # Single-qubit gate
qc.rx(np.pi / 2, 1)                  # Rotation gate
qc.cx(0, 1)                          # Controlled gate
qc.mcx([0, 1], 2)                    # Multi-controlled gate
qc.swap(1, 2)                        # SWAP gate
qc.unitary(np.array([[0, 1], [1, 0]]), target=2)  # Custom unitary

Common single-qubit operations include x, y, z, h, s, t, rx, ry, rz, and p. Controlled and multi-controlled variants include cx, cy, cz, ch, mcx, mcy, mcz, and controlled rotation/phase operations.

Measurements and Classical Registers

Create a classical register when you need classical measurement outcomes:

from unitarylab import Circuit, Register, ClassicalRegister

qr = Register('q', 2)
cr = ClassicalRegister('c', 2)
qc = Circuit(qr, cr)

qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

result = qc.execute(shots=1000, seed=42)
print(result.counts)
print(result.classical_results_map)
print(result.classical_registers)

For this Bell-state circuit, the two measured bits agree on every run: each count key is either 00 or 11. counts aggregates all shots, while classical_results_map, classical_registers, and state describe the final shot.

Execution Backends

execute() accepts an initial state and the backend, device, dtype, shots, seed, and backend_options options:

# PyTorch backend on CPU (default backend)
result = qc.execute(backend='torch', device='cpu')

# NumPy backend on CPU
result = qc.execute(backend='numpy', device='cpu')

# C++ backend on CPU
result = qc.execute(backend='cpp', device='cpu')

# Tensor-network backend on CPU
result = qc.execute(
    backend='tensornet',
    device='cpu',
    backend_options={'max_bond': 64, 'cutoff': 1e-10, 'routing': 'auto'},
)

# PyTorch backend on GPU (requires a suitable PyTorch/CUDA environment)
result = qc.execute(backend='torch', device='gpu')

The TensorNet backend accepts a dense statevector, a TensorNetState, or a list/tuple of open-boundary MPS site tensors:

import numpy as np
from unitarylab import Circuit
from unitarylab.backend.tensornet import TensorNetState

qc = Circuit(2)
dense_state = np.array([1, 0, 0, 1], dtype=complex) / np.sqrt(2)
mps_state = TensorNetState.from_statevector(dense_state, max_bond=64)
result = qc.execute(initial_state=mps_state, backend='tensornet')

# Each tensor is ordered as (left bond, physical dimension 2, right bond).
# tensors[0] represents qubit 0.
result = qc.execute(initial_state=mps_state.tensors, backend='tensornet')

initial_state is copied before execution. Explicit max_bond and cutoff values in backend_options override the values stored in TensorNetState; otherwise the state settings are preserved. The dtype argument remains authoritative and converts input tensors when necessary. Tensor-network initial states are not implicitly contracted for statevector backends—call mps_state.to_statevector() explicitly when that conversion is intended.

For precision-sensitive workloads, a dtype can also be supplied:

import numpy as np

result = qc.execute(backend='torch', device='cpu', dtype=np.complex128)

Working with Execution Results

Statevector backends return ExecutionResult; the TensorNet backend returns TensorNetExecutionResult, which provides the same public query interface using tensor-network contractions where possible.

Interface Description
state / backend_state Read the dense NumPy statevector or inspect the native backend state.
num_qubits Get the number of qubits represented by the result.
probabilities / probability(...) Read the full distribution or one computational-basis probability.
marginal_probabilities(...) Read the probability distribution for selected qubits.
sample(...) Sample the final state without collapsing it.
expectation(...) Evaluate a Pauli string, local observable, or sum of observable terms.
measure(...) Measure selected qubits and collapse the stored result state.
shots, counts, classical_results_map, classical_registers Inspect circuit-execution and classical-measurement results.
from unitarylab import Circuit

qc = Circuit(2)
qc.h(0)
qc.cx(0, 1)
result = qc.execute(backend='tensornet')

print(result.probability('0', qubits=[0]))
print(result.marginal_probabilities(qubits=[0, 1]))
print(result.sample(shots=1000, qubits=[0, 1], seed=42))
print(result.expectation('ZZ', qubits=[0, 1]))

Circuit.execute(shots=...) reruns the whole circuit and builds counts from in-circuit measurement gates. In contrast, result.sample(shots=...) samples the already computed final state without changing it; result.measure(...) does collapse the stored state.

For TensorNetExecutionResult, accessing state contracts the MPS into a dense vector, and accessing probabilities enumerates all 2**n basis outcomes. For larger systems, prefer probability(...), marginal_probabilities(...) on a small qubit subset, or local expectation(...) queries.

Draw and Analyze Circuits

# Display the circuit diagram. Matplotlib is the default output format.
# Text and LaTeX formats are also supported.
qc.draw()
# qc.draw(output="text")
# qc.draw(output="latex")

# Save the Matplotlib circuit diagram
qc.draw(filename="bell-state.png", title="Bell State")

# Analyze the circuit structure
info = qc.analyze()
info.show()

# Get the matrix representation of a small-scale circuit
matrix = qc.get_matrix()

analyze() is useful for checking gate counts, circuit depth, and layer structure before running larger experiments.

Circuit Transformations

Circuit transformations return new circuit objects and leave the source circuit unchanged:

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

copied = qc.copy()
inverse = qc.inverse()
dagger = qc.dagger()

Circuits can also be appended or composed to build larger workflows from reusable circuit blocks.

OpenQASM Import and Export

Export a circuit as OpenQASM 3.0 and reconstruct a new circuit from the generated source:

qasm = qc.to_qasm()
restored = Circuit.from_qasm(qasm)

# OpenQASM 2.0 export is also available. from_qasm() detects the version.
qasm2 = qc.to_qasm2()
restored_qasm2 = Circuit.from_qasm(qasm2)

Algorithm and Utility Library

The simulator provides high-level algorithm components through unitarylab.library:

Area Public interfaces
Quantum Fourier transform QFT, IQFT
Quantum phase estimation QPE
Linear combination of unitaries LCU
Hamiltonian simulation hamiltonian_simulation, QSP_hamiltonian_simulation
Quantum signal processing QSP
Quantum singular value transformation QSVT
Block encoding block_encode
Linear-system solving solve

These interfaces are the public algorithm API of the simulator. Internal implementation modules and private module names are not part of the documented API and may change between releases.

Example: construct a QFT circuit and embed it into a larger circuit:

from unitarylab import Circuit
from unitarylab.library import QFT

qft = QFT(n=4)
qc = Circuit(4)
qc.append(qft, target=[0, 1, 2, 3])
qc.draw(title='Quantum Fourier Transform')

Package Structure

unitarylab/
├── core/               # Circuit, Register, and ClassicalRegister
├── backend/            # Gates, statevector/TensorNet execution, results, and QASM
├── circuit_analysis/   # Circuit structure analysis
├── drawer/             # Circuit drawing and text/LaTeX output
├── info/               # Information display utilities
├── codegen/             # Circuit code generation
├── transpiler/          # Circuit transformation and optimization
└── library/             # Public algorithm interfaces

Most users only need:

from unitarylab import Circuit

Further Documentation


中文

unitarylab 是什么?

unitarylab 是由 UnitaryLab 开发的 Python 量子模拟器 SDK。它以高层 Circuit 接口为核心,提供状态向量和张量网络量子电路执行能力,帮助用户在同一套工作流中完成电路构建、模拟运行、结果读取和结构分析。

该模拟器适合量子计算教学、算法原型开发、科研实验,以及与 UnitaryLab Algorithms 算法库配合使用。

核心特性

  • 简洁的电路构建接口 — 使用 CircuitRegisterClassicalRegister 创建量子电路。
  • 丰富的量子门操作 — 支持单量子比特门、旋转门、受控门、多重受控门、SWAP 门和自定义酉门。
  • 状态向量与张量网络模拟 — 可选择稠密状态向量后端或基于 MPS 的 TensorNet 后端,并通过统一结果接口查询概率、采样、期望值和测量结果。
  • 灵活的执行后端 — 支持 NumPy、PyTorch、C++ 和 TensorNet 在 CPU 执行,并可在合适的 CUDA 环境下使用 PyTorch GPU 加速。
  • 电路可视化与分析 — 使用 Matplotlib、文本或 LaTeX 可视化电路,并分析门数、电路深度和层结构。
  • 电路变换 — 支持复制、求逆、追加、组合和分解电路,原始电路不会被修改。
  • OpenQASM 互操作 — 通过 OpenQASM 3.0 工具导入和导出电路。
  • 算法库基础设施 — 提供 QFT、QPE、LCU、HHL、QSP、QSVT 和哈密顿量模拟等高层模块。

安装

pip install unitarylab

仅使用 CPU(可选)

如果不需要 GPU 加速,可先安装 PyTorch 的 CPU 版本,再安装 unitarylab

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

验证安装:

import unitarylab
print(unitarylab.__version__)

快速开始:Bell 态

下面的示例创建一个两量子比特 Bell 态,执行电路并读取状态向量与概率分布。

from unitarylab import Circuit

# 创建两量子比特电路
qc = Circuit(2)

# 制备 (|00> + |11>) / sqrt(2)
qc.h(0)
qc.cx(0, 1)

# 执行电路
result = qc.execute()
print(result.state)
print(result.probabilities)

运行结果中,|00>|11> 的概率约各为 50%:

{'00': 0.5, '11': 0.5}

probabilities 使用计算基二进制字符串作为键;解释多量子比特结果时,请注意模拟器采用 little-endian 的量子比特顺序约定。

常用量子门操作

Circuit 提供单量子比特门、旋转门、受控门、多重受控门、SWAP 门和自定义酉门。例如:

import numpy as np
from unitarylab import Circuit

qc = Circuit(3)
qc.h(0)                              # 单量子比特门
qc.rx(np.pi / 2, 1)                  # 旋转门
qc.cx(0, 1)                          # 受控门
qc.mcx([0, 1], 2)                    # 多重受控门
qc.swap(1, 2)                        # SWAP 门
qc.unitary(np.array([[0, 1], [1, 0]]), target=2)  # 自定义酉门

常用单量子比特操作包括 xyzhstrxryrzp。受控及多重受控操作包括 cxcyczchmcxmcymcz,以及受控旋转门和相位门。

测量与经典寄存器

如果需要读取经典测量结果,应先创建经典寄存器:

from unitarylab import Circuit, Register, ClassicalRegister

qr = Register('q', 2)
cr = ClassicalRegister('c', 2)
qc = Circuit(qr, cr)

qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

result = qc.execute(shots=1000, seed=42)
print(result.counts)
print(result.classical_results_map)
print(result.classical_registers)

对于这个 Bell 态电路,两个测量比特在每次运行中都会保持一致,每个计数键只能是 0011counts 汇总所有 shots,而 classical_results_mapclassical_registersstate 描述最后一次执行结果。

执行后端

execute() 支持初态,以及 backenddevicedtypeshotsseedbackend_options 参数:

# PyTorch CPU 后端(默认后端)
result = qc.execute(backend='torch', device='cpu')

# NumPy CPU 后端
result = qc.execute(backend='numpy', device='cpu')

# C++ CPU 后端
result = qc.execute(backend='cpp', device='cpu')

# TensorNet CPU 后端
result = qc.execute(
    backend='tensornet',
    device='cpu',
    backend_options={'max_bond': 64, 'cutoff': 1e-10, 'routing': 'auto'},
)

# PyTorch GPU 后端(需要合适的 PyTorch/CUDA 环境)
result = qc.execute(backend='torch', device='gpu')

TensorNet 后端可以接受稠密状态向量、TensorNetState,或者由开放边界 MPS 站点张量组成的 list/tuple:

import numpy as np
from unitarylab import Circuit
from unitarylab.backend.tensornet import TensorNetState

qc = Circuit(2)
dense_state = np.array([1, 0, 0, 1], dtype=complex) / np.sqrt(2)
mps_state = TensorNetState.from_statevector(dense_state, max_bond=64)
result = qc.execute(initial_state=mps_state, backend='tensornet')

# 每个张量的维度顺序为 (左键合维度, 物理维度 2, 右键合维度)。
# tensors[0] 对应 qubit 0。
result = qc.execute(initial_state=mps_state.tensors, backend='tensornet')

执行前会复制 initial_state。如果在 backend_options 中显式指定 max_bondcutoff,这些配置优先于 TensorNetState 中保存的值; 否则保留状态自身配置。dtype 参数仍具有最高优先级,必要时会转换输入张量。 状态向量后端不会隐式收缩张量网络,需要转换时应显式调用 mps_state.to_statevector()

对于对精度敏感的任务,也可以指定数据类型:

import numpy as np

result = qc.execute(backend='torch', device='cpu', dtype=np.complex128)

使用执行结果

状态向量后端返回 ExecutionResult;TensorNet 后端返回 TensorNetExecutionResult。后者尽可能通过张量网络收缩实现相同的公开查询接口。

接口 说明
state / backend_state 读取稠密 NumPy 状态向量,或查看后端原生状态。
num_qubits 获取结果表示的量子比特数量。
probabilities / probability(...) 读取完整概率分布,或查询一个计算基结果的概率。
marginal_probabilities(...) 查询指定量子比特的边缘概率分布。
sample(...) 从最终状态采样,但不坍缩状态。
expectation(...) 计算 Pauli 串、局部可观测量或可观测量项之和的期望值。
measure(...) 测量指定量子比特,并坍缩结果对象保存的状态。
shotscountsclassical_results_mapclassical_registers 查看电路执行次数和经典测量结果。
from unitarylab import Circuit

qc = Circuit(2)
qc.h(0)
qc.cx(0, 1)
result = qc.execute(backend='tensornet')

print(result.probability('0', qubits=[0]))
print(result.marginal_probabilities(qubits=[0, 1]))
print(result.sample(shots=1000, qubits=[0, 1], seed=42))
print(result.expectation('ZZ', qubits=[0, 1]))

Circuit.execute(shots=...) 会重新运行整个电路,并根据线路内的测量门生成 counts。相比之下,result.sample(shots=...) 只对已经算出的最终状态进行采样,不会改变状态;result.measure(...) 则会坍缩结果对象保存的状态。

对于 TensorNetExecutionResult,访问 state 会把 MPS 收缩为稠密向量,访问 probabilities 会枚举全部 2**n 个计算基结果。处理较大系统时,应优先使用 probability(...)、针对少量量子比特的 marginal_probabilities(...),或局部 expectation(...) 查询。

电路绘图与分析

# 显示电路图,支持 Matplotlib(默认)、文本格式和 LaTeX
qc.draw()
# qc.draw(output="text")
# qc.draw(output="latex")

# 保存 Matplotlib 电路图
qc.draw(filename='bell-state.png', title='Bell State')

# 分析电路结构
info = qc.analyze()
info.show()

# 获取小规模电路的矩阵
matrix = qc.get_matrix()

analyze() 可用于在运行较大规模实验前检查门数量、电路深度和层结构。

电路变换

电路变换会返回新的电路对象,不会修改源电路:

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

copied = qc.copy()
inverse = qc.inverse()
dagger = qc.dagger()  

还可以通过追加或组合电路,将可复用的电路模块构建成更大的工作流。

OpenQASM 导入与导出

可以将电路导出为 OpenQASM 3.0,并根据生成的源码重建电路:

qasm = qc.to_qasm()
restored = Circuit.from_qasm(qasm)

# 也支持导出 OpenQASM 2.0;from_qasm() 会自动识别版本。
qasm2 = qc.to_qasm2()
restored_qasm2 = Circuit.from_qasm(qasm2)

算法与工具库

模拟器通过 unitarylab.library 提供高层算法构件:

方向 公开接口
量子傅里叶变换 QFTIQFT
量子相位估计 QPE
线性组合酉算子 LCU
哈密顿量模拟 hamiltonian_simulationQSP_hamiltonian_simulation
量子信号处理 QSP
量子奇异值变换 QSVT
块编码 block_encode
线性方程组求解 solve

以上接口构成模拟器公开的算法 API。内部实现模块和私有模块名称不属于文档化 API,后续版本中可能发生变化。

下面是构造 QFT 电路并将其嵌入更大电路的示例:

from unitarylab import Circuit
from unitarylab.library import QFT

qft = QFT(n=4)
qc = Circuit(4)
qc.append(qft, target=[0, 1, 2, 3])
qc.draw(title='Quantum Fourier Transform')

包结构

unitarylab/
├── core/               # Circuit、Register 和 ClassicalRegister
├── backend/            # 量子门、状态向量/TensorNet 执行、结果与 QASM 支持
├── circuit_analysis/   # 电路结构分析
├── drawer/             # 电路绘图及文本/LaTeX 输出
├── info/               # 信息展示工具
├── codegen/            # 电路代码生成
├── transpiler/         # 电路转换与优化
└── library/            # 公开算法接口

大多数用户只需要导入:

from unitarylab import Circuit

更多文档

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.2.0-cp312-cp312-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.12Windows x86-64

unitarylab-1.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (52.9 MB view details)

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

unitarylab-1.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (51.1 MB view details)

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

unitarylab-1.2.0-cp312-cp312-macosx_11_0_arm64.whl (7.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

unitarylab-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl (7.8 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

unitarylab-1.2.0-cp311-cp311-win_amd64.whl (6.9 MB view details)

Uploaded CPython 3.11Windows x86-64

unitarylab-1.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (51.7 MB view details)

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

unitarylab-1.2.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (50.6 MB view details)

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

unitarylab-1.2.0-cp311-cp311-macosx_11_0_arm64.whl (7.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

unitarylab-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

unitarylab-1.2.0-cp310-cp310-win_amd64.whl (6.9 MB view details)

Uploaded CPython 3.10Windows x86-64

unitarylab-1.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (49.2 MB view details)

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

unitarylab-1.2.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (48.1 MB view details)

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

unitarylab-1.2.0-cp310-cp310-macosx_11_0_arm64.whl (7.3 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

unitarylab-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: unitarylab-1.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 6.7 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.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0f15e56751325bf1423f429235a24fe9543f66ddec37fcde9b68200c275b9054
MD5 680d3a16f4492ec761f867c32a7ab909
BLAKE2b-256 20bbe51a7f45a7864523f7ff69e1ad042d64c8b2d2dccb181c89bd7b7c5f460b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f948e3f46028f78658c04d687f5cf014bc07792e7dbeb6c998db02c8a3d9fa02
MD5 35f2ded395dcbc3bb8ad266bbed3a10f
BLAKE2b-256 463a3f3c8b3c82828c2e4a78614b79f004827cd4fd25d3e3de1db5fc551ab522

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ec2a56d3f76e2b4297d658863215496ab7c0b14eb18f4f68b111445ac446b98c
MD5 405a78bdf8a27de8da73dcac746cc947
BLAKE2b-256 4cef65bf95a55962afe1ed406d1a7e35bef5b6072d4a09c4891ab2bf3be02099

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c6d3d6a71535f4f8bad38f2c17e64d95e8beb911007ac895a6da8d617b5f892
MD5 dfe241f77e7fc872563d9323ac8c6944
BLAKE2b-256 cea2f731450db23cbf30e69fcc7a01e85bec6b3d1b0c1da6ea47512e994a63cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5995b8462f09d5a825609220f3356f80b2b5d26d3140693a75fcb59ed88ed0d2
MD5 9cc9414262bfd9bf587f3bfe7ff06097
BLAKE2b-256 635db695d4d510b429b624a2953656a5f97dce7fe65ab8b1f1155e57a6e1cd29

See more details on using hashes here.

File details

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

File metadata

  • Download URL: unitarylab-1.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 6.9 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.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b5e08b53e77579ed2c0fe9106aca4d844e994fef3875adde839439d488a93288
MD5 c252c2911177817af3598bda1e84e28c
BLAKE2b-256 ee885a779c2519322345a67f9a411414ad5d7892db707f1775884dd6433cd62e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e0f709c3f581f5a5f80277a27a9f5eecdbc58903ece19da362b849ed707eb4a6
MD5 434dd69485b5589367466124e6f84802
BLAKE2b-256 e3d771f6633da7b344f866d2fc3fb359d9a806bca8cfac6949a8034f9a1b4740

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 881a71d30561f43957601c98a026bd36b13b7554d20c0cbf0161e4f09f7aa9ab
MD5 078ca3aebf6de4074843a65ef6400964
BLAKE2b-256 dfa1bd051de0ea030b924482fa82d04dbbe7468a3f2fac14a97625df419c22bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e59b538fdca1a02654e65123bc68910361508eb8da0b509c2b1ec2aa445b625c
MD5 07da6e42b1e180c1f5251f3e66095df3
BLAKE2b-256 90d35a59ece4d76cb638ac21d4b7d48b9291128077c70ac8ad0b3cd376258e88

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bc3240615a410fc1f0451820dab86ab223603b6fe4f2ba9674205e5b23a69ac6
MD5 c537aba39753764786b2c49a947d533e
BLAKE2b-256 c808fa929a9de8e02fe3182b5f3eb8cf6d0a51ec223c7e96584bfb1dfc2b9ad2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: unitarylab-1.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 6.9 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.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e80d6ea4824f45d3799197ba272e32b354b46ef8c878c36f99de7dbcf2f19afa
MD5 72f125de767cc5c0e3867fbcbf02b895
BLAKE2b-256 c6edc0edd36a07301113ca2a13105993efed8e394b36949665378ea146e361b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d1cb57e667105148a452752fc184014f366b820b74a63e6bb8d63d59b4536c1b
MD5 a530d41f55d3ad1f8b070e11fb233e88
BLAKE2b-256 588761d149fbf567869d4287082299d8deb2511932aaa690bb6001931b40e916

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c9b040b8a10345cdc0f066cc11c00e2719b4ba7d0e48d90d963ba543e07d2066
MD5 9772514fe4df92e14c85b68c2cd4204d
BLAKE2b-256 229adc30fede309bd7b0ac56bde8f1582722edbce7cf38ce10750a57a35c3231

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a48bb4670c0ab4e93a464a46881f2e4b762ab633cb76b3df924d074b2b2dbcd0
MD5 7d517a41795e079184a768c1af920a4f
BLAKE2b-256 ac2ace5233594cf54077b3708a961b795005402fea65cde3cc8044dc921faeeb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unitarylab-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1e1060ae39430eb876508c799279fb50aca9600795699887a4ebe2aecf5e4d99
MD5 baee7678a9f76955d5fc0a373eb7fc03
BLAKE2b-256 019fe0350fc35ce56b6a4fdcea484961c828d51c42c85554783189ac982495fa

See more details on using hashes here.

Release history Release notifications | RSS feed

1.4.2

15 files

1.4.1

15 files

1.4.0

15 files

1.3.1

15 files

1.2.1

15 files

This release

1.2.0 This release

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