| """PyWavelets device test for Android Python STB.
|
|
|
| Generated by RIMI.
|
|
|
| Validates the pywavelets Android wheel (import name ``pywt``):
|
| import, version reporting, Wavelet objects, dwt/idwt + wavedec/waverec
|
| roundtrips, SWT roundtrip, 2D transforms, thresholding smoke, wavelist,
|
| and bundled data loading.
|
|
|
| Run on device (Scripts folder) AFTER installing:
|
| 1. numpy 2.5.2 Android wheel (from its own package folder), then
|
| 2. pywavelets-1.10.0-cp312-cp312-android_24_<arch>.whl (STANDALONE)
|
|
|
| Exit-code contract: prints [PASS]/[FAIL] per test, a summary line, and
|
| exits 0 only if every test passed (1 otherwise).
|
| """
|
|
|
| import sys
|
| import traceback
|
|
|
| PASS = 0
|
| FAIL = 0
|
| FAILURES = []
|
|
|
|
|
| def run(name, fn):
|
| global PASS, FAIL
|
| try:
|
| fn()
|
| except Exception as e:
|
| FAIL += 1
|
| FAILURES.append(name)
|
| print("[FAIL] %s -- %s: %s" % (name, type(e).__name__, e))
|
| traceback.print_exc()
|
| else:
|
| PASS += 1
|
| print("[PASS] %s" % name)
|
|
|
|
|
| def test_import():
|
| import pywt
|
| import numpy
|
| assert pywt is not None
|
| assert numpy is not None
|
| print(" pywt file:", pywt.__file__)
|
| print(" numpy:", numpy.__version__)
|
|
|
|
|
| def test_version():
|
| import pywt
|
|
|
|
|
|
|
|
|
|
|
| assert isinstance(pywt.__version__, str) and len(pywt.__version__) > 0
|
| print(" pywt.__version__ =", pywt.__version__)
|
|
|
|
|
| def test_wavelet_object():
|
| import pywt
|
| w = pywt.Wavelet("db1")
|
| assert w.name == "db1"
|
| assert w.dec_len == 2 and w.rec_len == 2
|
| assert "haar" in pywt.wavelist(kind="discrete") or "haar" in pywt.wavelist()
|
|
|
|
|
| def test_wavelist():
|
| import pywt
|
| wl = pywt.wavelist()
|
| for required in ("db1", "db2", "haar", "sym2"):
|
| assert required in wl, "missing wavelet %s" % required
|
| print(" %d wavelets listed" % len(wl))
|
|
|
|
|
| def test_dwt_idwt_roundtrip():
|
| import numpy as np
|
| import pywt
|
| x = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0])
|
| cA, cD = pywt.dwt(x, "db1")
|
| y = pywt.idwt(cA, cD, "db1")
|
| assert np.allclose(x, y, atol=1e-12), "dwt/idwt roundtrip failed"
|
|
|
|
|
| def test_wavedec_waverec_roundtrip():
|
| import numpy as np
|
| import pywt
|
| rng = np.random.RandomState(42)
|
| x = rng.randn(64)
|
| coeffs = pywt.wavedec(x, "db2", level=2)
|
| assert len(coeffs) == 3
|
| y = pywt.waverec(coeffs, "db2")
|
| assert np.allclose(x, y, atol=1e-10), "wavedec/waverec roundtrip failed"
|
|
|
|
|
| def test_swt_roundtrip():
|
| import numpy as np
|
| import pywt
|
| x = np.arange(16, dtype=float)
|
| coeffs = pywt.swt(x, "haar", level=1)
|
| assert len(coeffs) == 1
|
| cA, cD = coeffs[0]
|
| assert cA.shape == x.shape and cD.shape == x.shape
|
| y = pywt.iswt(coeffs, "haar")
|
| assert np.allclose(x, y, atol=1e-12), "swt/iswt roundtrip failed"
|
|
|
|
|
| def test_dwt2_idwt2_roundtrip():
|
| import numpy as np
|
| import pywt
|
| x = np.arange(64, dtype=float).reshape(8, 8)
|
| coeffs = pywt.dwt2(x, "haar")
|
| cA, (cH, cV, cD) = coeffs
|
| assert cA.shape == (4, 4)
|
| y = pywt.idwt2(coeffs, "haar")
|
| assert np.allclose(x, y, atol=1e-12), "dwt2/idwt2 roundtrip failed"
|
|
|
|
|
| def test_threshold_smoke():
|
| import numpy as np
|
| import pywt
|
| data = np.linspace(-2.0, 2.0, 32)
|
| t = pywt.threshold(data, 1.0, mode="soft")
|
| assert t.shape == data.shape
|
| assert abs(t[16]) < abs(data[16])
|
| t_hard = pywt.threshold(data, 1.0, mode="hard")
|
| assert t_hard.shape == data.shape
|
|
|
|
|
| def test_data_camera():
|
| import pywt
|
| arr = pywt.data.camera()
|
| assert arr.ndim == 2 and arr.shape[0] > 0 and arr.shape[1] > 0
|
| print(" camera shape:", arr.shape)
|
|
|
|
|
| TESTS = [
|
| ("import pywt + numpy", test_import),
|
| ("version string present", test_version),
|
| ("Wavelet object db1", test_wavelet_object),
|
| ("wavelist contents", test_wavelist),
|
| ("dwt/idwt roundtrip", test_dwt_idwt_roundtrip),
|
| ("wavedec/waverec roundtrip", test_wavedec_waverec_roundtrip),
|
| ("swt/iswt roundtrip", test_swt_roundtrip),
|
| ("dwt2/idwt2 roundtrip", test_dwt2_idwt2_roundtrip),
|
| ("threshold smoke", test_threshold_smoke),
|
| ("data.camera load", test_data_camera),
|
| ]
|
|
|
|
|
| def main():
|
| print("PyWavelets device test (pywt) - Generated by RIMI")
|
| for name, fn in TESTS:
|
| run(name, fn)
|
| print("----------------------------------------")
|
| print("RESULT: %d passed, %d failed" % (PASS, FAIL))
|
| if FAIL:
|
| print("FAILURES:", ", ".join(FAILURES))
|
| return 1
|
| print("ALL PASSED")
|
| return 0
|
|
|
|
|
| if __name__ == "__main__":
|
| sys.exit(main())
|
|
|