================================================================================ PYWAVELETS - USER GUIDE (Android Python STB) - Generated by RIMI ================================================================================ PyWavelets 1.10.0 for Android (CPython 3.12, API 24) ---------------------------------------------------- PyWavelets (import name: pywt) is a wavelet transform library for Python: discrete and stationary wavelet transforms (1D, 2D, nD), wavelet packets, continuous wavelet transform (CWT), thresholding, and multilevel analysis. Provided wheels (C extensions, cross-compiled with NDK r26): pywavelets-1.10.0-cp312-cp312-android_24_arm64_v8a.whl (real ARM64 phones) pywavelets-1.10.0-cp312-cp312-android_24_x86_64.whl (x86_64 emulators) Installation ------------ 1. Install the numpy 2.5.2 Android wheel FIRST (from its own package folder — do NOT look for numpy in the pywavelets folder): numpy-2.5.2-cp312-cp312-android_24_.whl 2. Install the matching pywavelets STANDALONE wheel: pywavelets-1.10.0-cp312-cp312-android_24_.whl pip resolves the `numpy<3,>=1.26.4` runtime dependency from the already-installed numpy (both wheels share the same Python 3.12 ABI). 3. Run Test_PyWavelets.py from the Scripts folder; expect ALL PASSED. Quick start ----------- import pywt import numpy as np x = np.arange(16, dtype=float) # 1D discrete transform and perfect reconstruction cA, cD = pywt.dwt(x, 'db1') y = pywt.idwt(cA, cD, 'db1') # Multilevel decomposition coeffs = pywt.wavedec(x, 'db2', level=2) y = pywt.waverec(coeffs, 'db2') # Stationary (undecimated) transform swt = pywt.swt(x, 'haar', level=1) y = pywt.iswt(swt, 'haar') # 2D transform img = np.arange(64, dtype=float).reshape(8, 8) cA, (cH, cV, cD) = pywt.dwt2(img, 'haar') rec = pywt.idwt2((cA, (cH, cV, cD)), 'haar') # Denoising-style thresholding t = pywt.threshold(np.linspace(-2, 2, 32), 1.0, mode='soft') print(pywt.wavelist()[:5]) # ['bior1.1', 'bior1.3', ...] Android-specific notes ---------------------- * The 4 native modules (pywt/_extensions/_cwt, _dwt, _pywt, _swt, named *.cpython-312.so) link only against librimi.so + system libm/libdl/libc. No C++ runtime is needed (pure C + Cython). * 16 KB page aligned, no GNU_RELRO: safe on Android 13+ (no dlopen `can't enable GNU RELRO protection` crash). * No OPENBLAS/Fortran dependency — unlike numpy/scipy this wheel is small (~4.3 MB) and has no native deps besides numpy's headers at build time. * Shell `python3` on device cannot load these modules (librimi.so needs the app JVM context); always test inside the app via Scripts. Known upstream quirk (NOT a build defect) ----------------------------------------- The 1.10.0 source distribution ships util/version_utils.py with the version constants still at 1.8.0, so `pywt.__version__` reports '1.8.0' — the official PyPI 1.10.0 wheels do exactly the same. The *wheel* version (pywavelets-1.10.0.dist-info) is 1.10.0. The device test therefore checks only that the version string is present. Tested features (device script Test_PyWavelets.py, 10 checks) -------------------------------------------------------------- import pywt + numpy / version string / Wavelet('db1') object / wavelist contents (db1, db2, haar, sym2) / dwt+idwt roundtrip / wavedec+waverec roundtrip (db2, level 2) / swt+iswt roundtrip (haar) / dwt2+idwt2 roundtrip (haar, 8x8) / soft+hard threshold smoke / pywt.data.camera() load. Runtime dependency ------------------ numpy<3,>=1.26.4 (declared in METADATA Requires-Dist; install the numpy 2.5.2 Android wheel from its own package folder separately). ================================================================================ Generated by RIMI ================================================================================