Upload pywavelets/PYWAVELETS_USER_GUIDE.txt with huggingface_hub
Browse files
pywavelets/PYWAVELETS_USER_GUIDE.txt
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
================================================================================
|
| 2 |
+
PYWAVELETS - USER GUIDE (Android Python STB) - Generated by RIMI
|
| 3 |
+
================================================================================
|
| 4 |
+
|
| 5 |
+
PyWavelets 1.10.0 for Android (CPython 3.12, API 24)
|
| 6 |
+
----------------------------------------------------
|
| 7 |
+
PyWavelets (import name: pywt) is a wavelet transform library for Python:
|
| 8 |
+
discrete and stationary wavelet transforms (1D, 2D, nD), wavelet packets,
|
| 9 |
+
continuous wavelet transform (CWT), thresholding, and multilevel analysis.
|
| 10 |
+
|
| 11 |
+
Provided wheels (C extensions, cross-compiled with NDK r26):
|
| 12 |
+
pywavelets-1.10.0-cp312-cp312-android_24_arm64_v8a.whl (real ARM64 phones)
|
| 13 |
+
pywavelets-1.10.0-cp312-cp312-android_24_x86_64.whl (x86_64 emulators)
|
| 14 |
+
|
| 15 |
+
Installation
|
| 16 |
+
------------
|
| 17 |
+
1. Install the numpy 2.5.2 Android wheel FIRST (from its own package
|
| 18 |
+
folder — do NOT look for numpy in the pywavelets folder):
|
| 19 |
+
numpy-2.5.2-cp312-cp312-android_24_<arch>.whl
|
| 20 |
+
2. Install the matching pywavelets STANDALONE wheel:
|
| 21 |
+
pywavelets-1.10.0-cp312-cp312-android_24_<arch>.whl
|
| 22 |
+
pip resolves the `numpy<3,>=1.26.4` runtime dependency from the
|
| 23 |
+
already-installed numpy (both wheels share the same Python 3.12 ABI).
|
| 24 |
+
3. Run Test_PyWavelets.py from the Scripts folder; expect ALL PASSED.
|
| 25 |
+
|
| 26 |
+
Quick start
|
| 27 |
+
-----------
|
| 28 |
+
import pywt
|
| 29 |
+
import numpy as np
|
| 30 |
+
|
| 31 |
+
x = np.arange(16, dtype=float)
|
| 32 |
+
|
| 33 |
+
# 1D discrete transform and perfect reconstruction
|
| 34 |
+
cA, cD = pywt.dwt(x, 'db1')
|
| 35 |
+
y = pywt.idwt(cA, cD, 'db1')
|
| 36 |
+
|
| 37 |
+
# Multilevel decomposition
|
| 38 |
+
coeffs = pywt.wavedec(x, 'db2', level=2)
|
| 39 |
+
y = pywt.waverec(coeffs, 'db2')
|
| 40 |
+
|
| 41 |
+
# Stationary (undecimated) transform
|
| 42 |
+
swt = pywt.swt(x, 'haar', level=1)
|
| 43 |
+
y = pywt.iswt(swt, 'haar')
|
| 44 |
+
|
| 45 |
+
# 2D transform
|
| 46 |
+
img = np.arange(64, dtype=float).reshape(8, 8)
|
| 47 |
+
cA, (cH, cV, cD) = pywt.dwt2(img, 'haar')
|
| 48 |
+
rec = pywt.idwt2((cA, (cH, cV, cD)), 'haar')
|
| 49 |
+
|
| 50 |
+
# Denoising-style thresholding
|
| 51 |
+
t = pywt.threshold(np.linspace(-2, 2, 32), 1.0, mode='soft')
|
| 52 |
+
|
| 53 |
+
print(pywt.wavelist()[:5]) # ['bior1.1', 'bior1.3', ...]
|
| 54 |
+
|
| 55 |
+
Android-specific notes
|
| 56 |
+
----------------------
|
| 57 |
+
* The 4 native modules (pywt/_extensions/_cwt, _dwt, _pywt, _swt,
|
| 58 |
+
named *.cpython-312.so) link only against librimi.so + system
|
| 59 |
+
libm/libdl/libc. No C++ runtime is needed (pure C + Cython).
|
| 60 |
+
* 16 KB page aligned, no GNU_RELRO: safe on Android 13+ (no dlopen
|
| 61 |
+
`can't enable GNU RELRO protection` crash).
|
| 62 |
+
* No OPENBLAS/Fortran dependency — unlike numpy/scipy this wheel is
|
| 63 |
+
small (~4.3 MB) and has no native deps besides numpy's headers
|
| 64 |
+
at build time.
|
| 65 |
+
* Shell `python3` on device cannot load these modules (librimi.so needs
|
| 66 |
+
the app JVM context); always test inside the app via Scripts.
|
| 67 |
+
|
| 68 |
+
Known upstream quirk (NOT a build defect)
|
| 69 |
+
-----------------------------------------
|
| 70 |
+
The 1.10.0 source distribution ships util/version_utils.py with the
|
| 71 |
+
version constants still at 1.8.0, so `pywt.__version__` reports '1.8.0'
|
| 72 |
+
— the official PyPI 1.10.0 wheels do exactly the same. The *wheel*
|
| 73 |
+
version (pywavelets-1.10.0.dist-info) is 1.10.0. The device test
|
| 74 |
+
therefore checks only that the version string is present.
|
| 75 |
+
|
| 76 |
+
Tested features (device script Test_PyWavelets.py, 10 checks)
|
| 77 |
+
--------------------------------------------------------------
|
| 78 |
+
import pywt + numpy / version string / Wavelet('db1') object /
|
| 79 |
+
wavelist contents (db1, db2, haar, sym2) / dwt+idwt roundtrip /
|
| 80 |
+
wavedec+waverec roundtrip (db2, level 2) / swt+iswt roundtrip (haar) /
|
| 81 |
+
dwt2+idwt2 roundtrip (haar, 8x8) / soft+hard threshold smoke /
|
| 82 |
+
pywt.data.camera() load.
|
| 83 |
+
|
| 84 |
+
Runtime dependency
|
| 85 |
+
------------------
|
| 86 |
+
numpy<3,>=1.26.4 (declared in METADATA Requires-Dist; install the
|
| 87 |
+
numpy 2.5.2 Android wheel from its own package folder separately).
|
| 88 |
+
|
| 89 |
+
================================================================================
|
| 90 |
+
Generated by RIMI
|
| 91 |
+
================================================================================
|