Skip to main content

waveforms

View build status Coverage Status PyPI version

Form waveforms used in experiment.

Installation

We encourage installing waveforms via the pip tool (a python package manager):

python -m pip install waveforms

To install from the latest source, you need to clone the GitHub repository on your machine.

git clone https://github.com/feihoo87/waveforms.git

Then dependencies and waveforms can be installed in this way:

cd waveforms
python -m pip install numpy
python -m pip install -e .

Usage

import numpy as np
import matplotlib.pyplot as plt

from waveforms import *

pulse = cosPulse(20e-9)

x_wav = zero()
y_wav = zero()

I, Q = mixing(0.5*pulse, freq=-20e6, DRAGScaling=0.2)
x_wav += I
y_wav += Q

I, Q = mixing(pulse >> 1e-6, freq=-20e6, phase=np.pi/2, DRAGScaling=0.2)
x_wav += I
y_wav += Q

I, Q = mixing((0.5 * pulse) >> 2e-6, freq=-20e6, DRAGScaling=0.2)
x_wav += I
y_wav += Q


t = np.linspace(-1e-6, 9e-6, 10001)
plt.plot(t, x_wav(t))
plt.plot(t, y_wav(t))
plt.show()

Unified binary representation

Waveform is the common base class for every signal object. RealWaveform and ComplexWaveform are concrete waveforms; WaveVStack is the common stack base, with RealWaveVStack and ComplexWaveVStack as its concrete forms. The original construction style remains unchanged and automatically selects the compact C core for common pulses and repeated-pulse stacks:

import waveforms as wf

# The default tick is already the period of 120 GHz (1 / 120e9 seconds).
# To use another global tick, override it before constructing/loading waveforms:
# wf.set_time_resolution(1e-12)

pulse = (wf.gaussian(12e-9) >> 20e-9) * wf.cos(2 * wf.pi * 5e9)
data = pulse.to_bytes()
restored = wf.Waveform.from_bytes(data)

assert isinstance(pulse, wf.Waveform)
stack = wf.WaveVStack([pulse, pulse >> 40e-9])
assert isinstance(stack, wf.RealWaveVStack)
assert isinstance(stack, wf.WaveVStack)

The C block format stores signed 64-bit ticks using a process-wide clock. The default is 120 GHz. A different process-wide time resolution may be selected before the first waveform is constructed; the same C representation and evaluator continue to be used. The setting is locked by the first object.

sample() has integer-grid fast paths for 500 MHz, 1 GHz, 1.2 GHz, 2 GHz, 2.4 GHz, 2.5 GHz, 4 GHz, 6 GHz, 8 GHz, and 10 GHz. Real waveforms can be quantized directly to signed DAC buffers:

pulse.start = 0
pulse.stop = 100e-9
dac16 = pulse.sample(2_400_000_000, dtype=np.int16, full_scale=1.0)

The low-level cores store and evaluate real-valued signals only. Complex signals are represented in Python as independent real and imaginary channels:

z = (1 + 0.25j) * wf.gaussian(12e-9)
assert isinstance(z, wf.ComplexWaveform)

stack = wf.ComplexWaveVStack([z, z >> 20e-9])
samples = stack(t)  # complex NumPy array

Real waveforms and stacks therefore avoid complex storage and arithmetic for the common real-valued case. ComplexWaveform.real and .imag expose the two real channel waveforms.

Post-sampling nonlinear calibration

NonlinearMap compiles one monotone branch of calibration samples to a compact native lookup table. A centered map is useful when a waveform describes a frequency excursion around an idle point:

frequency = np.array([4.0e9, 4.5e9, 5.0e9, 5.5e9, 6.0e9])
flux = np.array([0.31, 0.22, 0.08, -0.06, -0.16])

frequency_to_flux = wf.NonlinearMap.from_samples(
    frequency,
    flux,
    method="monotone_cubic",  # PCHIP compiled to uniform cubic segments
    reference=5.0e9,          # map(0) == 0 around the idle frequency
    dtype=np.float32,
    extrapolate="error",
)

trajectory.start = 0
trajectory.stop = 200e-9
trajectory.sample_rate = 2_400_000_000
trajectory.nonlinear = frequency_to_flux
flux_samples = trajectory.sample(dtype=np.int16)

The sampling order is waveform accumulation, nonlinear mapping, optional SOS filtering/predistortion, output amplitude limits (min/max), and finally integer quantization or floating-point output. This is important for WaveVStack: the map is applied to the accumulated trajectory rather than to each pulse event independently. method="linear" selects the smaller and fastest two-point interpolation path. Maps serialize independently through to_bytes()/from_bytes() using the language-neutral NLM1 format.

Every waveform and stack has output limits, defaulting to min=-np.inf and max=np.inf. A stack ignores its child waveforms' limits and uses only its own:

stack.min = -0.2
stack.max = 0.3
samples = stack.sample()  # limit after the complete calibration/filter chain

Limits apply to whole and chunked sampling, including out= buffers and integer output. Complex signals limit I and Q independently; sample_iq() uses the same final limits. The filter state continues from the unclipped filtered signal across chunks. DAC full_scale controls integer conversion and saturation separately from these amplitude limits.

filters is a defaultdict(float) mapping exponential cascade time constants tau (in seconds) to amplitudes amp, independent of the sampling clock:

stack.filters[100e-9] += 0.12
stack.filters[2e-6] += -0.04
samples = stack.sample(sample_rate=2_400_000_000)
unfiltered = stack.sample(filters={})  # bypass predistortion for this call

The parameters describe cascade stages, not a parallel sum of exponential terms. Sampling uses exp_decay_filter_from_cascade followed by exp_decay_filter(..., inv=True, output="sos") at the actual sample rate: filtering defaults to predistortion. Coefficients are cached by parameter values and sample rate; changing an amplitude or the clock takes effect on the next sampling call. Only the parameters are saved by pickle, not cached SOS coefficients. Assign a mapping to replace them, or None to clear them. The old (sos, initial) representation is no longer accepted.

The initial level is the first sample after nonlinear mapping, before output limiting: the system is assumed to have held that level indefinitely before playback. This stage subtracts that baseline, applies the inverse filter, restores the baseline, and applies the final limits. Chunked sampling retains both the initial level and the unclipped filter state across chunks; complex signals use the first I and Q values independently.

SOS filtering runs in the C core for float64 and complex128 signals. Real int16/int32 output is quantized in the same stage, without allocating a full filtered floating-point buffer. Float output can reuse the sampled buffer. A small fixed scratch buffer keeps filtering and conversion local; waveform evaluation and nonlinear mapping still precede this stage. sample_iq() still converts the filtered complex result into separate I/Q output arrays. See the SOS benchmark.

Calling waveform(t) applies waveform/event accumulation, the object's nonlinear mapping, and then its own amplitude limits. It does not apply SOS filters or DAC quantization. Stacks and complex wrappers use raw child values; child maps and limits do not affect the parent's processing chain. Thus direct evaluation and unfiltered floating-point sampling have the same processing semantics on the same time grid, subject to floating-point rounding. With out= and accumulate=True, the processed contribution is added to the existing buffer without mapping or limiting its previous contents. Sampling starts from raw values so mapping and limits are each applied only once, with SOS filtering between them when configured. Maps and limits are metadata preserved by pickle, not part of the raw WNF4/WNS4 binary blocks.

Reporting Issues

Please report all issues on github.

License

MIT

Metadata

Release files for waveforms 3.7.0

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

Source distribution (sdist)

Source distribution for waveforms 3.7.0
File Size Uploaded
waveforms-3.7.0.tar.gz 127.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for waveforms 3.7.0
File
waveforms-3.7.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
waveforms-3.7.0-cp314-cp314t-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.31+ x86-64, Linux glibc 2.34+ x86-64 Details
waveforms-3.7.0-cp314-cp314t-macosx_10_15_universal2.whl CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) Details
waveforms-3.7.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
waveforms-3.7.0-cp314-cp314-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.31+ x86-64, Linux glibc 2.34+ x86-64 Details
waveforms-3.7.0-cp314-cp314-macosx_10_15_universal2.whl CPython 3.14 CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64) Details
waveforms-3.7.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
waveforms-3.7.0-cp313-cp313-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.31+ x86-64, Linux glibc 2.34+ x86-64 Details
waveforms-3.7.0-cp313-cp313-macosx_10_13_universal2.whl CPython 3.13 CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64) Details
waveforms-3.7.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
waveforms-3.7.0-cp312-cp312-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.34+ x86-64, Linux glibc 2.31+ x86-64 Details
waveforms-3.7.0-cp312-cp312-macosx_10_13_universal2.whl CPython 3.12 CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) Details
waveforms-3.7.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
waveforms-3.7.0-cp311-cp311-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.34+ x86-64, Linux glibc 2.31+ x86-64 Details
waveforms-3.7.0-cp311-cp311-macosx_10_9_universal2.whl CPython 3.11 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) Details
waveforms-3.7.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
waveforms-3.7.0-cp310-cp310-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.34+ x86-64, Linux glibc 2.31+ x86-64 Details
waveforms-3.7.0-cp310-cp310-macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) Details

Total release size: 15.3 MB

Release files / waveforms-3.7.0.tar.gz

Download URL waveforms-3.7.0.tar.gz
Size 127.3 kB
Tags Source
SHA-256 checksum
How to use checksums
3f1cf672d899ddf04c72214b403c56150274d8199c5fca852873b6280938f7aa
BLAKE2b-256 checksum
How to use checksums
34aea525f884d6ece0dcb41eab7c67562df910c4fbfca902ba75a1485f5cc0a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp314-cp314t-win_amd64.whl

Download URL waveforms-3.7.0-cp314-cp314t-win_amd64.whl
Size 335.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
1a1e10adfe0f3ef68a3841d01401747257c17894611a1522dd49f41f03ea05f2
BLAKE2b-256 checksum
How to use checksums
4711bc7d12d6063ee26ff2465bae50be451a6be85f616cc3eea62425c5f431e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp314-cp314t-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl

Download URL waveforms-3.7.0-cp314-cp314t-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
Size 1.5 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.31+ x86-64 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
0825c6a5b8b1471927897ad3113806d3bec32f3feeae46d60ec0bd19c6dcdfd0
BLAKE2b-256 checksum
How to use checksums
bb9279ced68b74cd44f6a3827f173f813b5d7f61f4a09956ac04ecfc15a34666
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp314-cp314t-macosx_10_15_universal2.whl

Download URL waveforms-3.7.0-cp314-cp314t-macosx_10_15_universal2.whl
Size 626.3 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
0ede8cfff6b17be2f2f4ee84c8b68cbab4c88218799e105b5d88d996c3bd4c66
BLAKE2b-256 checksum
How to use checksums
0cdd5c61d7ac87ffc97e41f75be9dfa3d8ca22d479aa3e8c6f71b02565b56b66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp314-cp314-win_amd64.whl

Download URL waveforms-3.7.0-cp314-cp314-win_amd64.whl
Size 324.1 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
d2fe79e8ad9968e41a4b0c7336df73ba5370ec1f24949abd2cca37fd7413286a
BLAKE2b-256 checksum
How to use checksums
788d15ef053efa570f09c1f0c4fa11568e666d154e0a0459e428fae0f7a90db8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp314-cp314-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl

Download URL waveforms-3.7.0-cp314-cp314-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
Size 1.6 MB
Tags CPython 3.14 Linux glibc 2.31+ x86-64 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
30c79311e2848869960d99aef540636fcef2540de074fe6a1f24589951771e09
BLAKE2b-256 checksum
How to use checksums
45f4d1a47629cafe0b83c653678078596b50667d7b7916adcc0c4e96889b5f60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp314-cp314-macosx_10_15_universal2.whl

Download URL waveforms-3.7.0-cp314-cp314-macosx_10_15_universal2.whl
Size 613.6 kB
Tags CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
927c0eea0ca7bef6e5899226280e6406fb13b8c501025fcb9381da73b67d1162
BLAKE2b-256 checksum
How to use checksums
f0416f74427d08e05a683e3592b7ba81cda1d234d9d632ff5720a280ff9d4b1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp313-cp313-win_amd64.whl

Download URL waveforms-3.7.0-cp313-cp313-win_amd64.whl
Size 317.0 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
3685c7fbf9ca7a72cc43bfcad6eb8f3289c54af56ad1bcba96d22657709ffcda
BLAKE2b-256 checksum
How to use checksums
e6eee53b4df6ae8aea4cc0a0b3384915206f1369a723e1fd25b147566003fa35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp313-cp313-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl

Download URL waveforms-3.7.0-cp313-cp313-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
Size 1.6 MB
Tags CPython 3.13 Linux glibc 2.31+ x86-64 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
cefd09b690bcec16d6404af34d35159263323883733b0a1179f33fb9fb689773
BLAKE2b-256 checksum
How to use checksums
4fecca04946e269dbad009c542a9f7493e420e33efd41f0c4564f483f5c723fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp313-cp313-macosx_10_13_universal2.whl

Download URL waveforms-3.7.0-cp313-cp313-macosx_10_13_universal2.whl
Size 612.4 kB
Tags CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
2f0d4d6bb5ab6e15368d22fadd19df18d2f41482c52987cb8eb45c6fa8b51b59
BLAKE2b-256 checksum
How to use checksums
44fa2ff5c231987e4050f93b1277649f48aec3c6c4012cd86e5b54680a01ad7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp312-cp312-win_amd64.whl

Download URL waveforms-3.7.0-cp312-cp312-win_amd64.whl
Size 316.9 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
2bef2269f9845191503a1f0bb7b2d8b102df6dbba5dbd0fc084623c70e4e439e
BLAKE2b-256 checksum
How to use checksums
5c709feb24f7b104de2076a6481e5a6cf35205f9a323e348f58238c1a7c2adb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp312-cp312-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl

Download URL waveforms-3.7.0-cp312-cp312-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
Size 1.6 MB
Tags CPython 3.12 Linux glibc 2.31+ x86-64 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
d6f201e368cfd3e00334e556c7cf9a496fea9022de23f1a8be0735018e7d1410
BLAKE2b-256 checksum
How to use checksums
53696f87aae95df7d4a8fb53764a5cb02ba362a0a9a349a1e698ed1e3041e75e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp312-cp312-macosx_10_13_universal2.whl

Download URL waveforms-3.7.0-cp312-cp312-macosx_10_13_universal2.whl
Size 611.5 kB
Tags CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
c2c5a044b044353f23a133eefde6de3785e21c013ef398340a50813f2c6d9481
BLAKE2b-256 checksum
How to use checksums
57f6920541822b4a21d13e7f16ab2004d797882a048e7063d4e34c61ba2e9d6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp311-cp311-win_amd64.whl

Download URL waveforms-3.7.0-cp311-cp311-win_amd64.whl
Size 331.7 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
77cf39d056466e43dcdef2c297aa650a54f7499ba6495928c6de199ee9d97fd4
BLAKE2b-256 checksum
How to use checksums
580ad42499d147b867c7ec45520cef5b64e3b788d67065b1a9f2082fbe677e9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp311-cp311-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl

Download URL waveforms-3.7.0-cp311-cp311-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
Size 1.7 MB
Tags CPython 3.11 Linux glibc 2.31+ x86-64 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
25008cb945e540ab3427cf8c326465323da20861190f7692a3c4ffa27915728d
BLAKE2b-256 checksum
How to use checksums
1446a7e08d359476002f6d4ac1f6577009f392ef8b5dc523451ce0c0638bcedd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp311-cp311-macosx_10_9_universal2.whl

Download URL waveforms-3.7.0-cp311-cp311-macosx_10_9_universal2.whl
Size 605.7 kB
Tags CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
440aedbb5fcbb4f9cd86a03bf94244c308338dac68649e829f2c9494f4413ca1
BLAKE2b-256 checksum
How to use checksums
f33acd2429bdaa8657248cfca40a31d983b6135597131dffc027e04b3ce04ab1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp310-cp310-win_amd64.whl

Download URL waveforms-3.7.0-cp310-cp310-win_amd64.whl
Size 332.3 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
2b6b2b7b60ac83858d4bd055d783cae8eec506b4bc30ce2b0f697819c80ec06e
BLAKE2b-256 checksum
How to use checksums
9437ea8f264312a47977b9425108f3494ee2f36d052f134a1874d5eb6a411527
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp310-cp310-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl

Download URL waveforms-3.7.0-cp310-cp310-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
Size 1.6 MB
Tags CPython 3.10 Linux glibc 2.31+ x86-64 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
e372fad50bd4aec129ec315ff4337bd85085e0c97fce4bbd56b06e8b4eed4f31
BLAKE2b-256 checksum
How to use checksums
5cd946d052cf2016b4167f59127a39097326891ceb8d5e9cf5827b65ab508aad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / waveforms-3.7.0-cp310-cp310-macosx_10_9_universal2.whl

Download URL waveforms-3.7.0-cp310-cp310-macosx_10_9_universal2.whl
Size 609.8 kB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
6e4f053f64f8c487a6f69a7df7931d2198db557b15316c85a039c9dd8502c7bd
BLAKE2b-256 checksum
How to use checksums
05e2b6451b70b822de5bcceb894c1af1fd348a26eb43acf36b06b5d57a3b3206
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release history Release notifications | RSS feed

This release

3.7.0 This release

19 release files

3.4.0

19 release files

3.3.2

19 release files

3.3.0

19 release files

3.2.0

19 release files

3.1.0

19 release files

3.0.0

19 release files

2.3.0

19 release files

2.2.3

19 release files

2.2.2

19 release files

2.2.0

13 release files

2.1.0

13 release files

2.0.1

13 release files

1.9.4

10 release files

1.9.1

10 release files

1.8.9

10 release files

1.8.8

10 release files

1.8.7

10 release files

1.8.6

10 release files

1.8.5

10 release files

1.8.4

10 release files

1.8.1

10 release files

1.8.0

10 release files

1.7.9

10 release files

1.7.8

10 release files

1.7.7

10 release files

1.7.6

7 release files

1.7.5

7 release files

1.7.4

7 release files

1.7.3

7 release files

1.7.2

7 release files

1.7.1

7 release files

1.7.0

7 release files

1.6.11

7 release files

1.6.10

7 release files

1.6.9

7 release files

1.6.8

4 release files

1.6.7

7 release files

1.6.6

7 release files

1.6.5

7 release files

1.6.4

7 release files

1.6.3

7 release files

1.6.2

7 release files

1.6.1

7 release files

1.6.0

7 release files

1.5.99

7 release files

1.5.98

7 release files

1.5.97

9 release files

1.5.93

7 release files

1.5.92

7 release files

1.5.90

7 release files

1.5.89

7 release files

1.5.87

7 release files

1.5.86

7 release files

1.5.85

7 release files

1.5.84

7 release files

1.5.83

7 release files

1.5.81

7 release files

1.5.80

7 release files

1.5.79

7 release files

1.5.78

7 release files

1.5.77

7 release files

1.5.76

7 release files

1.5.75

5 release files

1.5.74

5 release files

1.5.63

7 release files

1.5.62

7 release files

1.5.61

5 release files

1.5.60

2 release files

1.5.59

2 release files

1.5.57

2 release files

1.5.56

5 release files

1.5.55

5 release files

1.5.54

7 release files

1.5.53

7 release files

1.5.52

7 release files

1.5.51

7 release files

1.5.50

7 release files

1.5.47

7 release files

1.5.42

2 release files

1.5.38

2 release 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