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.
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
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)
| File | Size | Uploaded | |
|---|---|---|---|
| waveforms-3.7.0.tar.gz | 127.3 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| 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
|