🧠 memory-esn: Long-Memory Echo State Networks
Reservoir Computing for Time-Series Forecasting with Long-Range Dependence 📈✨
Long-Memory Echo State Networks for Time-Series Forecasting
A reservoir-computing library that augments the classic Echo State Network with a dedicated memory reservoir for long-range dependence. Two memory mechanisms are provided — a fractional-difference filter (fESN) and a wavelet-smoothed fractional filter (wESN) — while keeping all internal weights fixed after random initialization and training only a linear ridge readout. BLAS-backed Cython kernels make it fast; pure-NumPy fallbacks keep it portable.
The vanilla reservoir captures short-term nonlinear dynamics (exponential forgetting); the memory reservoir sustains long-term dynamics (polynomially decaying weights). Their states are concatenated and mapped to the output.
Class hierarchy
PersistenceMixin save() / load() (joblib)
│
BaseESN single reservoir + ridge readout
│
MultiESN N reservoirs, one input each (composes BaseESN)
└── DoubleReservoirESN fixed to 2 reservoirs; fit([X1, X2], y)
├── fESN memory reservoir <- ((1-B)^d - 1) u(t)
└── wESN memory reservoir <- ((1-B)^d - 1) MODWT_smooth(u(t))
Reservoir 1 (vanilla) always sees the raw series; reservoir 2 (memory) sees a
pure-past, long-memory filter of it. fESN/wESN take a single series and build the
memory input internally; DoubleReservoirESN and MultiESN take the inputs explicitly.
Plus TimeSeriesDataset — sliding-window train/val/test splitting with leakage-free
scaling (none / minmax / standard / log).
Defaults follow the paper
Out of the box the models match the paper's construction: uniform weight
initialization, reservoirs sparsified to 90% zeros then rescaled to a spectral
radius < 1, and a memory filter f(t) = ((1-B)^d - 1) u(t) = Σ_{k≥1} ω_k u(t-k)
(standard fractional differencing with the present term removed, so the memory
reservoir is driven purely by the past). Optional isotropic state noise
η(t) ~ N(0, σ² I) is available via noise=σ.
Install
pip install -e . # installs deps; builds Cython kernels if a
# C compiler is available
# or build the fast kernels in place:
python setup.py build_ext --inplace
The compiled kernels are optional — pure-NumPy fallbacks are used automatically when they are not present (with a one-time warning). Check which is active:
import memory_esn as m
m.USING_CYTHON_RESERVOIR, m.USING_CYTHON_FRACDIFF, m.USING_CYTHON_MODWT
Dependencies: numpy, scipy, scikit-learn, joblib, PyWavelets.
Quickstart
import numpy as np
from memory_esn import BaseESN, fESN
X = np.cumsum(np.random.randn(1000, 3), axis=0) * 0.1
y = np.sin(X[:, :1])
Xtr, Xte, ytr, yte = X[:800], X[800:], y[:800], y[800:]
# Single reservoir
esn = BaseESN(n_reservoir=200, spectral_radius=0.95, random_state=0)
esn.fit(Xtr, ytr, washout=100)
y_pred = esn.predict(Xte)
# Fractional ESN (raw + fractionally-differenced branch)
fesn = fESN(n_reservoir=(200, 150), d=0.5, K=100, random_state=0)
fesn.fit(Xtr, ytr, washout=100)
y_pred = fesn.predict(Xte, continuation=True) # continuation keeps output length
See examples/quickstart.py for one example per class.
Wavelet options (wESN)
wESN decomposes each input feature with a MODWT (undecimated, shift-invariant)
and feeds the selected component(s) to reservoir 2. The wavelet is validated at
construction:
- Discrete wavelets (usable):
haar,db1..db38,sym2..sym20,coif1..coif17,bior*,rbio*,dmey— 106 in total (pywt.wavelist(kind='discrete')). - Continuous wavelets (
mexh,morl,gaus*,cmor, …) raiseNotImplementedError— support is planned for a future release.
Pick which decomposition components form reservoir 2's input via wavelet_components:
from memory_esn import wESN
# default: level-J smooth (approximation) trend — one component
wESN(wavelet='db4', wavelet_level=2) # components = [A2]
# a single detail level
wESN(wavelet='db4', wavelet_level=3, wavelet_components=2) # components = [D2]
# MULTIVARIATE: several levels stacked -> reservoir 2 gets multiple channels
wESN(wavelet='db4', wavelet_level=3,
wavelet_components=[1, 2, 'smooth']) # components = [D1, D2, A3]
# shortcuts
wESN(wavelet='haar', wavelet_level=2, wavelet_components='all') # D1, D2, A2
wESN(wavelet='haar', wavelet_level=2, wavelet_components='details') # D1, D2
wavelet_level is the decomposition depth J; detail levels are 1..J and 'smooth'
is the level-J approximation. Selecting n components on an F-feature series gives
reservoir 2 an F × n-channel (multivariate) input.
MODWT normalization — wavelet_norm='modwt' (default) uses the standard
Percival–Walden rescaling (Haar smooth filter [1/2, 1/2]); wavelet_norm='classic'
uses the DWT orthonormal filters ([1/√2, 1/√2]). The two differ only by a per-level
constant absorbed by the random memory-input weights, so they are model-equivalent.
Multivariate fESN (multiple differencing orders)
fESN has the analogous knob: d accepts a single order (default, univariate)
or a list of orders that are stacked as channels.
from memory_esn import fESN
fESN(d=0.5) # univariate (default)
fESN(d=[0.3, 0.5, 0.8]) # multivariate: 3 orders stacked
Selecting n orders on an F-feature series gives reservoir 2 an F × n-channel input.
Defaults for both classes are univariate: fESN d=0.5, wESN wavelet_components='smooth'.
wESN also accepts a list d, which cross-products with the wavelet
components: n_features × n_components × n_d channels. For example
wESN(wavelet_components=[1, 2, 'smooth'], d=[0.3, 0.5]) on a 2-feature series
→ 2 × 3 × 2 = 12 channels into reservoir 2.
Weight initialization & reservoir options
Every reservoir weight is drawn from a configurable distribution (memory_esn.weights):
| parameter | controls | options | default |
|---|---|---|---|
input_init |
input weights W_in |
uniform, gaussian, bernoulli, laplace |
uniform |
reservoir_init |
reservoir weights W |
same | uniform |
bias_init |
neuron bias | same | uniform |
input_scaling |
scale of W_in (= U[-ψ, ψ] for uniform) |
float | 0.5 |
spectral_radius |
W rescaled to this ρ |
float <1 |
0.9 |
sparsity |
fraction of W set to zero (φ) |
[0,1) |
0.9 |
bias_scaling |
scale of bias (0 = none) | float | 0.0 |
noise |
std σ of state noise η(t)~N(0,σ²I) |
float ≥ 0 | 0.0 |
In MultiESN each is broadcastable — a scalar applies to all reservoirs, a list of
length n_reservoirs sets them per reservoir. In the two-reservoir models a scalar or
a (vanilla, memory) pair is accepted. random_state follows the same rule: a single
int derives distinct per-reservoir seeds (reproducible but not identical); a list sets
them explicitly.
Paper ↔ code notation
| paper | meaning | code |
|---|---|---|
p, q |
vanilla / memory reservoir sizes | n_reservoir=(p, q) |
ρ_x, ρ_m |
spectral radii | spectral_radius=(ρ_x, ρ_m) |
φ_x, φ_m |
sparsification proportion | sparsity=(φ_x, φ_m) |
ψ_x, ψ_m |
input scalings | input_scaling=(ψ_x, ψ_m) |
σ_x, σ_m |
state-noise std | noise=(σ_x, σ_m) |
d |
fractional-differencing order | d |
K |
filter truncation (lags) | K |
ζ |
washout ratio T₀/T |
washout=int(ζ*T) |
H |
forecast horizon | number of columns of y |
The per-horizon readouts W_out^(h) are fitted jointly as a multi-output ridge on a
single design matrix Φ = [x; m; u; f] ∈ ℝ^{p+q+2}, with RidgeCV selecting λ by
efficient leave-one-out — matching the paper's shared-Cholesky LOOCV.
Notes on alignment (fESN / wESN)
The fractional-difference filter needs K past samples. With skip_initial=True
(default) and continuation=False, predictions are K steps shorter than the
input. With continuation=True, the model prepends stored history so the output
matches the input length — this is the normal mode for streaming / iterative
forecasting. wESN.predict uses continuation=True by default (it also re-smooths
using training history to avoid wavelet boundary effects).
Speed-up kernels
memory_esn/_speedups/ holds three Cython extensions (with NumPy fallbacks):
| kernel | what it does |
|---|---|
esn_reservoir_optimized |
reservoir state update via BLAS dgemv, nogil, 12 activations |
fractional_diff |
binomial fractional-difference weights + windowed filtering |
modwt_fast |
maximal-overlap DWT (smoothing) via circular convolution |
Tests
pip install pytest
python -m pytest tests/ # run from the project root
The suite includes Cython-vs-NumPy numerical-equivalence checks, so the fast and fallback paths are guaranteed to agree.
Repository layout
memory_esn/ the package (import as `memory_esn`)
base.py BaseESN, PersistenceMixin
multi.py MultiESN
double.py DoubleReservoirESN
fractional.py fESN (alias FractionalESN)
wavelet.py wESN (alias WaveletESN)
dataset.py TimeSeriesDataset
_speedups/ Cython kernels + NumPy fallbacks
examples/quickstart.py
tests/test_package.py
setup.py builds the Cython extensions
garbage/ the previous, pre-refactor files (archived)
Authors
Citation
If you use memory-esn in your research, please cite it (see CITATION.cff).
License
MIT — see LICENSE.
Metadata
Release files for memory-esn 0.1.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 | Provenance | |
|---|---|---|---|---|
| memory_esn-0.1.1.tar.gz | 490.8 kB | Without provenance | Details |
Built distributions (wheels)
Total release size: 20.3 MB
Release files / memory_esn-0.1.1.tar.gz
| Download URL | memory_esn-0.1.1.tar.gz |
|---|---|
| Size | 490.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f04567e6ccd6f8dfc39f6f879c65543c27176773e4d1529e097b0f93f6128df6
|
|
BLAKE2b-256 checksum How to use checksums |
eb6cad81b6242c5d75db28dc34685d8e3c3bec9ccaf517b333e0ac5f125360f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp313-cp313-win_amd64.whl
| Download URL | memory_esn-0.1.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 698.0 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
54ecd70a7df354f0e95e852a391eb66ffd20b4c9c85d1e1bf2dd85fa64b20e3b
|
|
BLAKE2b-256 checksum How to use checksums |
6fd6e8543d6744ba7c14c3d32bd92b4c42f41138025749ddb6e30a0dbd0f4e8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
| Download URL | memory_esn-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
2fa7b4e6369514180e397b325d44a9362c4db296786156188aab59a1256e7e29
|
|
BLAKE2b-256 checksum How to use checksums |
88abbabfdbbc3c405e3c6bff6fc47e270a93b54805ebb6895c58837d7475b687
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | memory_esn-0.1.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 718.8 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e7c13a53c19dbdc207e263021e31c15a87637e00b8c6d9532cbba195470ad5d5
|
|
BLAKE2b-256 checksum How to use checksums |
dff3c76f88125d1f722c28ce38bfd49835900cb1c3c2b08860a7bfa50b9260ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | memory_esn-0.1.1-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 722.0 kB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
536f0c3850efe8e68f56268ca754e61a6e850b4ce7afd2cdbe74f5da879aeb2d
|
|
BLAKE2b-256 checksum How to use checksums |
8d4b4d13bd100790f5aef13fd702be3e44a3eed64f4d0b7dd6595d8b684ad6f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp312-cp312-win_amd64.whl
| Download URL | memory_esn-0.1.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 699.4 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a5dc10d1616b7e541c7cea9bd52edd32ffbfded5f1221dfee39c0dc054446665
|
|
BLAKE2b-256 checksum How to use checksums |
013dfc7304e4c760dd7fe678717c72e30d40737be1f7975bc99389bb3c1ca0b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
| Download URL | memory_esn-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
d4206f5fd3a55771bb48fc7adda61732ef429bfdd302b91304a65d720c7ddbad
|
|
BLAKE2b-256 checksum How to use checksums |
12301483ff07a70a0fd56a32f10e61fe5a5a19d8c396f2439f7fee47ec11c6c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | memory_esn-0.1.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 720.8 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
aabcdce8d7aa7f936ab324c672c1c778c8a5295c16c196bbd6936084c65a2d7e
|
|
BLAKE2b-256 checksum How to use checksums |
ce5edf8dda6922b4eac024f8657cd7d79e038e46d735b29077882882253d586e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | memory_esn-0.1.1-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 724.1 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
8de66b8880fdca4f6b3e76abd0198975218141d384ead2c18a6b29bc786e2253
|
|
BLAKE2b-256 checksum How to use checksums |
755ed89b20b9b62c826aaa59f9324c81132f2e4e5e3ff75f3db3e5aaa19300fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp311-cp311-win_amd64.whl
| Download URL | memory_esn-0.1.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 695.6 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
05fa74391e79c6eef00e863bc20d3c524f3a43548dcb8a155f8f17687bafac96
|
|
BLAKE2b-256 checksum How to use checksums |
bb0c5702a1c72709da1964dede3eaa6e473a0b9b13e64aee733bf9f68d4ecf1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
| Download URL | memory_esn-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
8c1c645bcece27e8fc93e0bda2979db2e455312f27011924b8f1e8c21785af6a
|
|
BLAKE2b-256 checksum How to use checksums |
aa8c1ea67c85a96aa0b72ef49c85de14ed26c1f6ab051743cab05a48b5cfe479
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | memory_esn-0.1.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 716.4 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
46fe83c5061d3bcad23e16b039fc530fbe626fa2d6493f4fccaf3b9655324393
|
|
BLAKE2b-256 checksum How to use checksums |
e077dff18949c26b156d2aaf266ddce7b0f98c98de6c379de4fa1169783b8aac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | memory_esn-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 720.1 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
d5486932cee3cf2f31a424bee4d72bb848695691a333ae3e11da0a8e1ee1573e
|
|
BLAKE2b-256 checksum How to use checksums |
44b3e8edee4f7febde98a52f6811c80d69478e2152bae821072baab2eadc6aa2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp310-cp310-win_amd64.whl
| Download URL | memory_esn-0.1.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 695.9 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2adbd5d3c8686df895c5d8bfbaa89cc40d91f97cb0738ddfbdd8828a10815423
|
|
BLAKE2b-256 checksum How to use checksums |
3c93cf4b40862c119a400c45363b56c5a98b7fb232830117611e57d2b1be4c22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
| Download URL | memory_esn-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
83e137449f9c3801c5078c567a40462aacffb7291a1e98bb2e86f8928d045834
|
|
BLAKE2b-256 checksum How to use checksums |
c68fa4333ec701122bf8bfb2ed39b132d9ef0abf137d6d129b5f7121b3dec216
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | memory_esn-0.1.1-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 718.6 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4eb6fb94baee30fb98f06feebbe4bb81259ce67eefe8422ad68138f606692ff7
|
|
BLAKE2b-256 checksum How to use checksums |
88048a4489e16d574a99d89db45c90ea755a60de8181b1b23d6c289e4968867f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | memory_esn-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 722.0 kB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
9b8c178196d2f6caa501e1e0f5498c18d462523fb116244a98dfa108dccf2d69
|
|
BLAKE2b-256 checksum How to use checksums |
396daf718dd3d2a5aa7e311137738a4f650f967540da194452aca0958e08b5ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp39-cp39-win_amd64.whl
| Download URL | memory_esn-0.1.1-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 697.0 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2423f743432608a33d32d4709f8f755d5f6f802b42e1e7a1c0f7a7f09c9cce79
|
|
BLAKE2b-256 checksum How to use checksums |
989c182999654754f5961dbc3b44dd6b70745c50bc0d557829238a7dff957f87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
| Download URL | memory_esn-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
45db88e1f35614c27405a10307864b27d1632e53fdd732905d11a47c89f030f8
|
|
BLAKE2b-256 checksum How to use checksums |
c5a7eb8c02958d966f6ccda147ca6fb90c15e048a269fa199a3a79e3a670f12b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | memory_esn-0.1.1-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 719.9 kB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0779f3e88ef6082d78783a72f6a8767aa71cde984e080dc8b14cec9ad0559b53
|
|
BLAKE2b-256 checksum How to use checksums |
df6822a03e3660e261a2cfa5008be7e0031c02d18888c9e7f44f984a0fae142d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / memory_esn-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl
| Download URL | memory_esn-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl |
|---|---|
| Size | 723.3 kB |
| Tags | CPython 3.9 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
504c77ad75f4039ae640f338b3ce797f81ab39fae34cf686f4bd2b3522cc3907
|
|
BLAKE2b-256 checksum How to use checksums |
4c5909d1923c50ec5807629c3dafb437333035516d883c526c7f4abe1d49bb2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for memory-esn 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.