unitarylab
A Python quantum circuit simulator for building, executing, analyzing, and exporting quantum circuits.
面向量子电路构建、执行、分析与导出的 Python 量子模拟器。
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, andClassicalRegister. - 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 算法库配合使用。
核心特性
- 简洁的电路构建接口 — 使用
Circuit、Register和ClassicalRegister创建量子电路。 - 丰富的量子门操作 — 支持单量子比特门、旋转门、受控门、多重受控门、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) # 自定义酉门
常用单量子比特操作包括 x、y、z、h、s、t、rx、ry、rz 和 p。受控及多重受控操作包括 cx、cy、cz、ch、mcx、mcy、mcz,以及受控旋转门和相位门。
测量与经典寄存器
如果需要读取经典测量结果,应先创建经典寄存器:
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 态电路,两个测量比特在每次运行中都会保持一致,每个计数键只能是 00 或 11。counts 汇总所有 shots,而 classical_results_map、classical_registers 和 state 描述最后一次执行结果。
执行后端
execute() 支持初态,以及 backend、device、dtype、shots、seed 和 backend_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_bond 或 cutoff,这些配置优先于 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(...) |
测量指定量子比特,并坍缩结果对象保存的状态。 |
shots、counts、classical_results_map、classical_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 提供高层算法构件:
| 方向 | 公开接口 |
|---|---|
| 量子傅里叶变换 | QFT、IQFT |
| 量子相位估计 | QPE |
| 线性组合酉算子 | LCU |
| 哈密顿量模拟 | hamiltonian_simulation、QSP_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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f15e56751325bf1423f429235a24fe9543f66ddec37fcde9b68200c275b9054
|
|
| MD5 |
680d3a16f4492ec761f867c32a7ab909
|
|
| BLAKE2b-256 |
20bbe51a7f45a7864523f7ff69e1ad042d64c8b2d2dccb181c89bd7b7c5f460b
|
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
- Download URL: unitarylab-1.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 52.9 MB
- Tags: CPython 3.12, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f948e3f46028f78658c04d687f5cf014bc07792e7dbeb6c998db02c8a3d9fa02
|
|
| MD5 |
35f2ded395dcbc3bb8ad266bbed3a10f
|
|
| BLAKE2b-256 |
463a3f3c8b3c82828c2e4a78614b79f004827cd4fd25d3e3de1db5fc551ab522
|
File details
Details for the file unitarylab-1.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 51.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.24+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec2a56d3f76e2b4297d658863215496ab7c0b14eb18f4f68b111445ac446b98c
|
|
| MD5 |
405a78bdf8a27de8da73dcac746cc947
|
|
| BLAKE2b-256 |
4cef65bf95a55962afe1ed406d1a7e35bef5b6072d4a09c4891ab2bf3be02099
|
File details
Details for the file unitarylab-1.2.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.1 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c6d3d6a71535f4f8bad38f2c17e64d95e8beb911007ac895a6da8d617b5f892
|
|
| MD5 |
dfe241f77e7fc872563d9323ac8c6944
|
|
| BLAKE2b-256 |
cea2f731450db23cbf30e69fcc7a01e85bec6b3d1b0c1da6ea47512e994a63cc
|
File details
Details for the file unitarylab-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 7.8 MB
- Tags: CPython 3.12, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5995b8462f09d5a825609220f3356f80b2b5d26d3140693a75fcb59ed88ed0d2
|
|
| MD5 |
9cc9414262bfd9bf587f3bfe7ff06097
|
|
| BLAKE2b-256 |
635db695d4d510b429b624a2953656a5f97dce7fe65ab8b1f1155e57a6e1cd29
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5e08b53e77579ed2c0fe9106aca4d844e994fef3875adde839439d488a93288
|
|
| MD5 |
c252c2911177817af3598bda1e84e28c
|
|
| BLAKE2b-256 |
ee885a779c2519322345a67f9a411414ad5d7892db707f1775884dd6433cd62e
|
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
- Download URL: unitarylab-1.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 51.7 MB
- Tags: CPython 3.11, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0f709c3f581f5a5f80277a27a9f5eecdbc58903ece19da362b849ed707eb4a6
|
|
| MD5 |
434dd69485b5589367466124e6f84802
|
|
| BLAKE2b-256 |
e3d771f6633da7b344f866d2fc3fb359d9a806bca8cfac6949a8034f9a1b4740
|
File details
Details for the file unitarylab-1.2.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 50.6 MB
- Tags: CPython 3.11, manylinux: glibc 2.24+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
881a71d30561f43957601c98a026bd36b13b7554d20c0cbf0161e4f09f7aa9ab
|
|
| MD5 |
078ca3aebf6de4074843a65ef6400964
|
|
| BLAKE2b-256 |
dfa1bd051de0ea030b924482fa82d04dbbe7468a3f2fac14a97625df419c22bc
|
File details
Details for the file unitarylab-1.2.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.2 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e59b538fdca1a02654e65123bc68910361508eb8da0b509c2b1ec2aa445b625c
|
|
| MD5 |
07da6e42b1e180c1f5251f3e66095df3
|
|
| BLAKE2b-256 |
90d35a59ece4d76cb638ac21d4b7d48b9291128077c70ac8ad0b3cd376258e88
|
File details
Details for the file unitarylab-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 7.9 MB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc3240615a410fc1f0451820dab86ab223603b6fe4f2ba9674205e5b23a69ac6
|
|
| MD5 |
c537aba39753764786b2c49a947d533e
|
|
| BLAKE2b-256 |
c808fa929a9de8e02fe3182b5f3eb8cf6d0a51ec223c7e96584bfb1dfc2b9ad2
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e80d6ea4824f45d3799197ba272e32b354b46ef8c878c36f99de7dbcf2f19afa
|
|
| MD5 |
72f125de767cc5c0e3867fbcbf02b895
|
|
| BLAKE2b-256 |
c6edc0edd36a07301113ca2a13105993efed8e394b36949665378ea146e361b0
|
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
- Download URL: unitarylab-1.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 49.2 MB
- Tags: CPython 3.10, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1cb57e667105148a452752fc184014f366b820b74a63e6bb8d63d59b4536c1b
|
|
| MD5 |
a530d41f55d3ad1f8b070e11fb233e88
|
|
| BLAKE2b-256 |
588761d149fbf567869d4287082299d8deb2511932aaa690bb6001931b40e916
|
File details
Details for the file unitarylab-1.2.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 48.1 MB
- Tags: CPython 3.10, manylinux: glibc 2.24+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9b040b8a10345cdc0f066cc11c00e2719b4ba7d0e48d90d963ba543e07d2066
|
|
| MD5 |
9772514fe4df92e14c85b68c2cd4204d
|
|
| BLAKE2b-256 |
229adc30fede309bd7b0ac56bde8f1582722edbce7cf38ce10750a57a35c3231
|
File details
Details for the file unitarylab-1.2.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.3 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a48bb4670c0ab4e93a464a46881f2e4b762ab633cb76b3df924d074b2b2dbcd0
|
|
| MD5 |
7d517a41795e079184a768c1af920a4f
|
|
| BLAKE2b-256 |
ac2ace5233594cf54077b3708a961b795005402fea65cde3cc8044dc921faeeb
|
File details
Details for the file unitarylab-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: unitarylab-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 8.0 MB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e1060ae39430eb876508c799279fb50aca9600795699887a4ebe2aecf5e4d99
|
|
| MD5 |
baee7678a9f76955d5fc0a373eb7fc03
|
|
| BLAKE2b-256 |
019fe0350fc35ce56b6a4fdcea484961c828d51c42c85554783189ac982495fa
|