waveforms
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.
Real-coefficient SOS filters (filters=(sos, initial)) run in the C core for
float64 and complex128 signals. This stage subtracts the baseline initial,
applies the cascade, restores the baseline, and applies the final limits.
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. Complex
coefficients and extended precision retain the SciPy implementation.
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
Metadata
Release files for waveforms 3.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| waveforms-3.6.1.tar.gz | 123.4 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| waveforms-3.6.1-cp314-cp314t-win_amd64.whl | CPython 3.14 | CPython 3.14 free-threading | Windows x86-64 | Details |
| waveforms-3.6.1-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.6.1-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.6.1-cp314-cp314-win_amd64.whl | CPython 3.14 | CPython 3.14 | Windows x86-64 | Details |
| waveforms-3.6.1-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.6.1-cp314-cp314-macosx_10_15_universal2.whl | CPython 3.14 | CPython 3.14 | macOS 10.15+ universal2 (ARM64, x86-64) | Details |
| waveforms-3.6.1-cp313-cp313-win_amd64.whl | CPython 3.13 | CPython 3.13 | Windows x86-64 | Details |
| waveforms-3.6.1-cp313-cp313-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.34+ x86-64, Linux glibc 2.31+ x86-64 | Details |
| waveforms-3.6.1-cp313-cp313-macosx_10_13_universal2.whl | CPython 3.13 | CPython 3.13 | macOS 10.13+ universal2 (ARM64, x86-64) | Details |
| waveforms-3.6.1-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| waveforms-3.6.1-cp312-cp312-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.31+ x86-64, Linux glibc 2.34+ x86-64 | Details |
| waveforms-3.6.1-cp312-cp312-macosx_10_13_universal2.whl | CPython 3.12 | CPython 3.12 | macOS 10.13+ universal2 (ARM64, x86-64) | Details |
| waveforms-3.6.1-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| waveforms-3.6.1-cp311-cp311-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.31+ x86-64, Linux glibc 2.34+ x86-64 | Details |
| waveforms-3.6.1-cp311-cp311-macosx_10_9_universal2.whl | CPython 3.11 | CPython 3.11 | macOS 10.9+ universal2 (ARM64, x86-64) | Details |
| waveforms-3.6.1-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| waveforms-3.6.1-cp310-cp310-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.31+ x86-64, Linux glibc 2.34+ x86-64 | Details |
| waveforms-3.6.1-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.2 MB
Release files / waveforms-3.6.1.tar.gz
| Download URL | waveforms-3.6.1.tar.gz |
|---|---|
| Size | 123.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b4fec999dc4728ed73ab7724ea7b5fa76a328003532b4f16a4580ac6bbc2b648
|
|
BLAKE2b-256 checksum How to use checksums |
c7d2f04a3faccd10606211bd17af0b7b2d8816238709d4239ffc614dd6630dff
|
| 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.6.1-cp314-cp314t-win_amd64.whl
| Download URL | waveforms-3.6.1-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 333.6 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a920bc3c18ff3989d2e651b7ba49c2639e389df3214a520a09e00a6578326be8
|
|
BLAKE2b-256 checksum How to use checksums |
d7d34b1da40c5014342a7b1c4c8439811ea981399f96f83b3ff02e4ee02c9c7f
|
| 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.6.1-cp314-cp314t-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
| Download URL | waveforms-3.6.1-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 |
7b6f01a5d97c20a6cdba54d7fd44fa06c415a88f37318915a5b2bdaa78a7b4b4
|
|
BLAKE2b-256 checksum How to use checksums |
e6e72ef3871023af7638efcb986d2570f3140b91cfafcfa91d0ea7b975b497b4
|
| 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.6.1-cp314-cp314t-macosx_10_15_universal2.whl
| Download URL | waveforms-3.6.1-cp314-cp314t-macosx_10_15_universal2.whl |
|---|---|
| Size | 624.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
bb539211ee3ae54405013ada191cab5b15f88ed1fa736ddcdf49472981e8bfb9
|
|
BLAKE2b-256 checksum How to use checksums |
66ece62ff6e1c460d35bdacf35c2187c17a242a9c31bfe0c38c8128913df0b1a
|
| 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.6.1-cp314-cp314-win_amd64.whl
| Download URL | waveforms-3.6.1-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 322.7 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
acef4cddf4f8e3536df29ba9deec3b3a3f707234f5471b5f88ecc183da574226
|
|
BLAKE2b-256 checksum How to use checksums |
8e8188490e9fd9206fcccde859cc402ec96fead3c3b13246f438f66b31bb6668
|
| 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.6.1-cp314-cp314-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
| Download URL | waveforms-3.6.1-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 |
1065a229bdf8e41bd8622e514ad46a45570dfa5a71b45aa73262808931c6f0b7
|
|
BLAKE2b-256 checksum How to use checksums |
1134b30dd50d652e3a004c0025377142402ae7a6fd62acd7d7a17ad3597363b9
|
| 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.6.1-cp314-cp314-macosx_10_15_universal2.whl
| Download URL | waveforms-3.6.1-cp314-cp314-macosx_10_15_universal2.whl |
|---|---|
| Size | 612.2 kB |
| Tags | CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
9955a257b033553bd637760073ed4912ecd22f6d6ef9a7d9eef12636957bb326
|
|
BLAKE2b-256 checksum How to use checksums |
b1e8a3d80c1f3d9d680fc3b13aa62272cd843e00159adc526c7a242d1dddf4fc
|
| 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.6.1-cp313-cp313-win_amd64.whl
| Download URL | waveforms-3.6.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 315.5 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
54f835efe7db254ca9f1000ed7d52b9c19e53f94c9ad342cc7a8000d6e8675da
|
|
BLAKE2b-256 checksum How to use checksums |
48b07b15ad3b1a7957d2ba6e8267cb5e3aebb06e47811710d2aba8248924de0d
|
| 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.6.1-cp313-cp313-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
| Download URL | waveforms-3.6.1-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 |
62e4b4b02ae90ab64164c25204b525d36494b71ae132cd0687ce5b5ee0e2706d
|
|
BLAKE2b-256 checksum How to use checksums |
fe59b5752bedd7c68398f8db033ee1e39f56a63bc94df9505fd058843397e819
|
| 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.6.1-cp313-cp313-macosx_10_13_universal2.whl
| Download URL | waveforms-3.6.1-cp313-cp313-macosx_10_13_universal2.whl |
|---|---|
| Size | 611.0 kB |
| Tags | CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
755391f553973a2289abd11334068a5177e55e1fec9071a7b075ed98d06cd1cc
|
|
BLAKE2b-256 checksum How to use checksums |
3f0c3941fb800e42ee036c0a52066ad8ae7adeed5c0e275e251c712923e4be91
|
| 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.6.1-cp312-cp312-win_amd64.whl
| Download URL | waveforms-3.6.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 315.5 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6a790612c3c73837ad1b2db98003ff335a92a24afed89ff294e2816a823ff68c
|
|
BLAKE2b-256 checksum How to use checksums |
4a19f2a56b708968cdfda92a01ee9baded160149d2c964c5419ba16c2eab5477
|
| 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.6.1-cp312-cp312-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
| Download URL | waveforms-3.6.1-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 |
5f37559f219563b787b05f6e6cb34248ad821d572067df639c98fe4794814eb3
|
|
BLAKE2b-256 checksum How to use checksums |
297052a0cdb35f47c70c426274f6d0f32dc02a35fd11c39ef569f49da94d3b15
|
| 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.6.1-cp312-cp312-macosx_10_13_universal2.whl
| Download URL | waveforms-3.6.1-cp312-cp312-macosx_10_13_universal2.whl |
|---|---|
| Size | 610.1 kB |
| Tags | CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
2f49f9a4133c92ae52bec7f326c476789b5ce8668f93953da74a4533d678735a
|
|
BLAKE2b-256 checksum How to use checksums |
7b69e4f0c255ccd9632748bc67e291f903106a3c917240d0a8343a5b4970514e
|
| 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.6.1-cp311-cp311-win_amd64.whl
| Download URL | waveforms-3.6.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 330.3 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d0a8a232c9edbb6f0a52f8cda828fd2eb505a4d3f00fef6dc48d8036264aa41b
|
|
BLAKE2b-256 checksum How to use checksums |
14c7d0b581625e7bff72f3c37dfae7d26a9e2046e68f31bbc57514a657b811bc
|
| 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.6.1-cp311-cp311-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
| Download URL | waveforms-3.6.1-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 |
5c503f1e2ce5d8692637470601ec24787e98d1f39e6ed7511edc3b05644d2ed6
|
|
BLAKE2b-256 checksum How to use checksums |
0215b769fc00bc687d91dac3c32659f58b4eea4addea7f264ab76e771a799c83
|
| 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.6.1-cp311-cp311-macosx_10_9_universal2.whl
| Download URL | waveforms-3.6.1-cp311-cp311-macosx_10_9_universal2.whl |
|---|---|
| Size | 604.3 kB |
| Tags | CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
0efc8a3a8e22e64cd1e077d499db989ff74963aed0b16581617857980554bcac
|
|
BLAKE2b-256 checksum How to use checksums |
b3d50cd7dbf7506b41a947c5582bd63dd3d6c2e6aa0a5e779b6822e5f291791b
|
| 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.6.1-cp310-cp310-win_amd64.whl
| Download URL | waveforms-3.6.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 330.9 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ae52423d3872ebe44baa671b6668d34c6b43e3bfbef7c169f35153126bbcb5ec
|
|
BLAKE2b-256 checksum How to use checksums |
cfeefe1799d67b8e26e8d533bce5676165d9b1fc8c42723cace7838bb5e429e5
|
| 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.6.1-cp310-cp310-manylinux_2_31_x86_64.manylinux_2_34_x86_64.whl
| Download URL | waveforms-3.6.1-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 |
71476a1cc2179894e3b6d2b310fa38052159eefddffd65c051e812c94a3040e2
|
|
BLAKE2b-256 checksum How to use checksums |
29aaff39084ae53af92d72e1dcaee3f036572fbcc042197f1518af3312aeff10
|
| 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.6.1-cp310-cp310-macosx_10_9_universal2.whl
| Download URL | waveforms-3.6.1-cp310-cp310-macosx_10_9_universal2.whl |
|---|---|
| Size | 608.4 kB |
| Tags | CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
6fe8717346adeae1d305d5dd1a7c95d1a7780ec4ecc0391cf4c1b7b0d6b72698
|
|
BLAKE2b-256 checksum How to use checksums |
121585b8079617b34f24135c4188dd2266b49e601bf4626620a817b6ffdf9837
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|