diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-31 04:56:03 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-31 04:56:03 +0000 |
commit | caad912c3d78d421bd82ed18ba1a17e3937ae4e3 (patch) | |
tree | 024fd400489ec21d8abb8d09308c3a38ddda70b6 | |
parent | 1de614b55c8a159c5ba420c1d2566eea0f74fc58 (diff) |
automatic import of python-ptwt
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-ptwt.spec | 716 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 718 insertions, 0 deletions
@@ -0,0 +1 @@ +/ptwt-0.1.5.tar.gz diff --git a/python-ptwt.spec b/python-ptwt.spec new file mode 100644 index 0000000..335e399 --- /dev/null +++ b/python-ptwt.spec @@ -0,0 +1,716 @@ +%global _empty_manifest_terminate_build 0 +Name: python-ptwt +Version: 0.1.5 +Release: 1 +Summary: Differentiable and gpu enabled fast wavelet transforms in PyTorch +License: EUPL-1.2 +URL: https://github.com/v0lta/PyTorch-Wavelet-Toolbox +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/24/d6/bfe000cf7ae3b8ae25b7a21d783bc86517674e943134d67b8a4f493d7489/ptwt-0.1.5.tar.gz +BuildArch: noarch + +Requires: python3-PyWavelets +Requires: python3-torch +Requires: python3-scipy +Requires: python3-pooch +Requires: python3-matplotlib +Requires: python3-numpy +Requires: python3-pytest +Requires: python3-nox + +%description +******************************** +Pytorch Wavelet Toolbox (`ptwt`) +******************************** + +.. image:: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/actions/workflows/tests.yml/badge.svg + :target: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/actions/workflows/tests.yml + :alt: GitHub Actions + +.. image:: https://readthedocs.org/projects/pytorch-wavelet-toolbox/badge/?version=latest + :target: https://pytorch-wavelet-toolbox.readthedocs.io/en/latest/?badge=latest + :alt: Documentation Status + +.. image:: https://img.shields.io/pypi/pyversions/ptwt + :target: https://pypi.org/project/ptwt/ + :alt: PyPI Versions + +.. image:: https://img.shields.io/pypi/v/ptwt + :target: https://pypi.org/project/ptwt/ + :alt: PyPI - Project + +.. image:: https://img.shields.io/pypi/l/ptwt + :target: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/blob/main/LICENSE + :alt: PyPI - License + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Black code style + +.. image:: https://static.pepy.tech/personalized-badge/ptwt?period=total&units=international_system&left_color=grey&right_color=brightgreen&left_text=Downloads + :target: https://pepy.tech/project/ptwt + + + + +Welcome to the PyTorch wavelet toolbox. This package implements: + +- the fast wavelet transform (fwt) via ``wavedec`` and its inverse by providing the ``waverec`` function, +- the two-dimensional fwt is called ``wavedec2`` the synthesis counterpart ``waverec2``, +- ``wavedec3`` and ``waverec3`` cover the three-dimensional analysis and synthesis case, +- ``fswavedec2``, ``fswavedec3``, ``fswaverec2`` and ``fswaverec3`` support separable transformations. +- ``MatrixWavedec`` and ``MatrixWaverec`` implement sparse-matrix-based fast wavelet transforms with boundary filters, +- 2d sparse-matrix transforms with separable & non-separable boundary filters are available, +- ``MatrixWavedec3`` and ``MatrixWaverec3`` allow separable 3D-fwt's with boundary filters. +- ``cwt`` computes a one-dimensional continuous forward transform, +- single and two-dimensional wavelet packet forward and backward transforms are available via the ``WaveletPacket`` and ``WaveletPacket2D`` objects, +- finally, this package provides adaptive wavelet support (experimental). + +This toolbox extends `PyWavelets <https://pywavelets.readthedocs.io/en/latest/>`_ . We additionally provide GPU and gradient support via a PyTorch backend. +Complete documentation is available at: https://pytorch-wavelet-toolbox.readthedocs.io/ + + +**Installation** + +Install the toolbox via pip or clone this repository. In order to use ``pip``, type: + +.. code-block:: sh + + $ pip install ptwt + + +You can remove it later by typing ``pip uninstall ptwt``. + +Example usage: +"""""""""""""" +**Single dimensional transform** + +One way to compute fast wavelet transforms is to rely on padding and +convolution. Consider the following example: + +.. code-block:: python + + import torch + import numpy as np + import pywt + import ptwt # use "from src import ptwt" for a cloned the repo + + # generate an input of even length. + data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0]) + data_torch = torch.from_numpy(data.astype(np.float32)) + wavelet = pywt.Wavelet('haar') + + # compare the forward fwt coefficients + print(pywt.wavedec(data, wavelet, mode='zero', level=2)) + print(ptwt.wavedec(data_torch, wavelet, mode='zero', level=2)) + + # invert the fwt. + print(ptwt.waverec(ptwt.wavedec(data_torch, wavelet, mode='zero'), + wavelet)) + + +The functions ``wavedec`` and ``waverec`` compute the 1d-fwt and its inverse. +Internally both rely on ``conv1d``, and its transposed counterpart ``conv_transpose1d`` +from the ``torch.nn.functional`` module. This toolbox supports discrete wavelets +see also ``pywt.wavelist(kind='discrete')``. I have tested +Daubechies-Wavelets ``db-x`` and symlets ``sym-x``, which are usually a good starting point. + +**Two-dimensional transform** + +Analog to the 1d-case ``wavedec2`` and ``waverec2`` rely on +``conv2d``, and its transposed counterpart ``conv_transpose2d``. +To test an example run: + + +.. code-block:: python + + import ptwt, pywt, torch + import numpy as np + import scipy.misc + + face = np.transpose(scipy.datasets.face(), + [2, 0, 1]).astype(np.float64) + pytorch_face = torch.tensor(face) + coefficients = ptwt.wavedec2(pytorch_face, pywt.Wavelet("haar"), + level=2, mode="constant") + reconstruction = ptwt.waverec2(coefficients, pywt.Wavelet("haar")) + np.max(np.abs(face - reconstruction.squeeze(1).numpy())) + + + +**Boundary Wavelets with Sparse-Matrices** + +In addition to convolution and padding approaches, +sparse-matrix-based code with boundary wavelet support is available. +In contrast to padding, boundary wavelets do not add extra pixels at +the edges. +Internally, boundary wavelet support relies on ``torch.sparse.mm``. +Generate 1d sparse matrix forward and backward transforms with the +``MatrixWavedec`` and ``MatrixWaverec`` classes. +Reconsidering the 1d case, try: + +.. code-block:: python + + import torch + import numpy as np + import pywt + import ptwt # use "from src import ptwt" for a cloned the repo + + # generate an input of even length. + data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0]) + data_torch = torch.from_numpy(data.astype(np.float32)) + # forward + matrix_wavedec = ptwt.MatrixWavedec(pywt.Wavelet("haar"), level=2) + coeff = matrix_wavedec(data_torch) + print(coeff) + # backward + matrix_waverec = ptwt.MatrixWaverec(pywt.Wavelet("haar")) + rec = matrix_waverec(coeff) + print(rec) + + +The process for the 2d transforms ``MatrixWavedec2``, ``MatrixWaverec2`` works similarly. +By default, a separable transformation is used. +To use a non-separable transformation, pass ``separable=False`` to ``MatrixWavedec2`` and ``MatrixWaverec2``. +Separable transformations use a 1d transformation along both axes, which might be faster since fewer matrix entries +have to be orthogonalized. + + +**Adaptive** **Wavelets** + +Experimental code to train an adaptive wavelet layer in PyTorch is available in the ``examples`` folder. In addition to static wavelets +from pywt, + +- Adaptive product-filters +- and optimizable orthogonal-wavelets are supported. + +See https://github.com/v0lta/PyTorch-Wavelet-Toolbox/tree/main/examples/network_compression/ for a complete implementation. + + +**Testing** + +The ``tests`` folder contains multiple tests to allow independent verification of this toolbox. +The GitHub workflow executes a subset of all tests for efficiency reasons. +After cloning the repository, moving into the main directory, and installing ``nox`` with ``pip install nox`` run + +.. code-block:: sh + + $ nox --session test + + + +to run all existing tests. + +Citation +"""""""" + +If you use this work in a scientific context please cite: + +.. code-block:: + + @phdthesis{handle:20.500.11811/9245, + urn: https://nbn-resolving.org/urn:nbn:de:hbz:5-63361, + author = {{Moritz Wolter}}, + title = {Frequency Domain Methods in Recurrent Neural Networks for Sequential Data Processing}, + school = {Rheinische Friedrich-Wilhelms-Universität Bonn}, + year = 2021, + month = jul, + url = {https://hdl.handle.net/20.500.11811/9245} + } + +If you use the boundary wavelet support please additionally cite: + +.. code-block:: + + @thesis{Blanke2021, + author = {Felix Blanke}, + title = {{Randbehandlung bei Wavelets für Faltungsnetzwerke}}, + type = {Bachelor's Thesis}, + annote = {Gbachelor}, + year = {2021}, + school = {Institut f\"ur Numerische Simulation, Universit\"at Bonn} + } + + + +%package -n python3-ptwt +Summary: Differentiable and gpu enabled fast wavelet transforms in PyTorch +Provides: python-ptwt +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-ptwt +******************************** +Pytorch Wavelet Toolbox (`ptwt`) +******************************** + +.. image:: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/actions/workflows/tests.yml/badge.svg + :target: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/actions/workflows/tests.yml + :alt: GitHub Actions + +.. image:: https://readthedocs.org/projects/pytorch-wavelet-toolbox/badge/?version=latest + :target: https://pytorch-wavelet-toolbox.readthedocs.io/en/latest/?badge=latest + :alt: Documentation Status + +.. image:: https://img.shields.io/pypi/pyversions/ptwt + :target: https://pypi.org/project/ptwt/ + :alt: PyPI Versions + +.. image:: https://img.shields.io/pypi/v/ptwt + :target: https://pypi.org/project/ptwt/ + :alt: PyPI - Project + +.. image:: https://img.shields.io/pypi/l/ptwt + :target: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/blob/main/LICENSE + :alt: PyPI - License + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Black code style + +.. image:: https://static.pepy.tech/personalized-badge/ptwt?period=total&units=international_system&left_color=grey&right_color=brightgreen&left_text=Downloads + :target: https://pepy.tech/project/ptwt + + + + +Welcome to the PyTorch wavelet toolbox. This package implements: + +- the fast wavelet transform (fwt) via ``wavedec`` and its inverse by providing the ``waverec`` function, +- the two-dimensional fwt is called ``wavedec2`` the synthesis counterpart ``waverec2``, +- ``wavedec3`` and ``waverec3`` cover the three-dimensional analysis and synthesis case, +- ``fswavedec2``, ``fswavedec3``, ``fswaverec2`` and ``fswaverec3`` support separable transformations. +- ``MatrixWavedec`` and ``MatrixWaverec`` implement sparse-matrix-based fast wavelet transforms with boundary filters, +- 2d sparse-matrix transforms with separable & non-separable boundary filters are available, +- ``MatrixWavedec3`` and ``MatrixWaverec3`` allow separable 3D-fwt's with boundary filters. +- ``cwt`` computes a one-dimensional continuous forward transform, +- single and two-dimensional wavelet packet forward and backward transforms are available via the ``WaveletPacket`` and ``WaveletPacket2D`` objects, +- finally, this package provides adaptive wavelet support (experimental). + +This toolbox extends `PyWavelets <https://pywavelets.readthedocs.io/en/latest/>`_ . We additionally provide GPU and gradient support via a PyTorch backend. +Complete documentation is available at: https://pytorch-wavelet-toolbox.readthedocs.io/ + + +**Installation** + +Install the toolbox via pip or clone this repository. In order to use ``pip``, type: + +.. code-block:: sh + + $ pip install ptwt + + +You can remove it later by typing ``pip uninstall ptwt``. + +Example usage: +"""""""""""""" +**Single dimensional transform** + +One way to compute fast wavelet transforms is to rely on padding and +convolution. Consider the following example: + +.. code-block:: python + + import torch + import numpy as np + import pywt + import ptwt # use "from src import ptwt" for a cloned the repo + + # generate an input of even length. + data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0]) + data_torch = torch.from_numpy(data.astype(np.float32)) + wavelet = pywt.Wavelet('haar') + + # compare the forward fwt coefficients + print(pywt.wavedec(data, wavelet, mode='zero', level=2)) + print(ptwt.wavedec(data_torch, wavelet, mode='zero', level=2)) + + # invert the fwt. + print(ptwt.waverec(ptwt.wavedec(data_torch, wavelet, mode='zero'), + wavelet)) + + +The functions ``wavedec`` and ``waverec`` compute the 1d-fwt and its inverse. +Internally both rely on ``conv1d``, and its transposed counterpart ``conv_transpose1d`` +from the ``torch.nn.functional`` module. This toolbox supports discrete wavelets +see also ``pywt.wavelist(kind='discrete')``. I have tested +Daubechies-Wavelets ``db-x`` and symlets ``sym-x``, which are usually a good starting point. + +**Two-dimensional transform** + +Analog to the 1d-case ``wavedec2`` and ``waverec2`` rely on +``conv2d``, and its transposed counterpart ``conv_transpose2d``. +To test an example run: + + +.. code-block:: python + + import ptwt, pywt, torch + import numpy as np + import scipy.misc + + face = np.transpose(scipy.datasets.face(), + [2, 0, 1]).astype(np.float64) + pytorch_face = torch.tensor(face) + coefficients = ptwt.wavedec2(pytorch_face, pywt.Wavelet("haar"), + level=2, mode="constant") + reconstruction = ptwt.waverec2(coefficients, pywt.Wavelet("haar")) + np.max(np.abs(face - reconstruction.squeeze(1).numpy())) + + + +**Boundary Wavelets with Sparse-Matrices** + +In addition to convolution and padding approaches, +sparse-matrix-based code with boundary wavelet support is available. +In contrast to padding, boundary wavelets do not add extra pixels at +the edges. +Internally, boundary wavelet support relies on ``torch.sparse.mm``. +Generate 1d sparse matrix forward and backward transforms with the +``MatrixWavedec`` and ``MatrixWaverec`` classes. +Reconsidering the 1d case, try: + +.. code-block:: python + + import torch + import numpy as np + import pywt + import ptwt # use "from src import ptwt" for a cloned the repo + + # generate an input of even length. + data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0]) + data_torch = torch.from_numpy(data.astype(np.float32)) + # forward + matrix_wavedec = ptwt.MatrixWavedec(pywt.Wavelet("haar"), level=2) + coeff = matrix_wavedec(data_torch) + print(coeff) + # backward + matrix_waverec = ptwt.MatrixWaverec(pywt.Wavelet("haar")) + rec = matrix_waverec(coeff) + print(rec) + + +The process for the 2d transforms ``MatrixWavedec2``, ``MatrixWaverec2`` works similarly. +By default, a separable transformation is used. +To use a non-separable transformation, pass ``separable=False`` to ``MatrixWavedec2`` and ``MatrixWaverec2``. +Separable transformations use a 1d transformation along both axes, which might be faster since fewer matrix entries +have to be orthogonalized. + + +**Adaptive** **Wavelets** + +Experimental code to train an adaptive wavelet layer in PyTorch is available in the ``examples`` folder. In addition to static wavelets +from pywt, + +- Adaptive product-filters +- and optimizable orthogonal-wavelets are supported. + +See https://github.com/v0lta/PyTorch-Wavelet-Toolbox/tree/main/examples/network_compression/ for a complete implementation. + + +**Testing** + +The ``tests`` folder contains multiple tests to allow independent verification of this toolbox. +The GitHub workflow executes a subset of all tests for efficiency reasons. +After cloning the repository, moving into the main directory, and installing ``nox`` with ``pip install nox`` run + +.. code-block:: sh + + $ nox --session test + + + +to run all existing tests. + +Citation +"""""""" + +If you use this work in a scientific context please cite: + +.. code-block:: + + @phdthesis{handle:20.500.11811/9245, + urn: https://nbn-resolving.org/urn:nbn:de:hbz:5-63361, + author = {{Moritz Wolter}}, + title = {Frequency Domain Methods in Recurrent Neural Networks for Sequential Data Processing}, + school = {Rheinische Friedrich-Wilhelms-Universität Bonn}, + year = 2021, + month = jul, + url = {https://hdl.handle.net/20.500.11811/9245} + } + +If you use the boundary wavelet support please additionally cite: + +.. code-block:: + + @thesis{Blanke2021, + author = {Felix Blanke}, + title = {{Randbehandlung bei Wavelets für Faltungsnetzwerke}}, + type = {Bachelor's Thesis}, + annote = {Gbachelor}, + year = {2021}, + school = {Institut f\"ur Numerische Simulation, Universit\"at Bonn} + } + + + +%package help +Summary: Development documents and examples for ptwt +Provides: python3-ptwt-doc +%description help +******************************** +Pytorch Wavelet Toolbox (`ptwt`) +******************************** + +.. image:: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/actions/workflows/tests.yml/badge.svg + :target: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/actions/workflows/tests.yml + :alt: GitHub Actions + +.. image:: https://readthedocs.org/projects/pytorch-wavelet-toolbox/badge/?version=latest + :target: https://pytorch-wavelet-toolbox.readthedocs.io/en/latest/?badge=latest + :alt: Documentation Status + +.. image:: https://img.shields.io/pypi/pyversions/ptwt + :target: https://pypi.org/project/ptwt/ + :alt: PyPI Versions + +.. image:: https://img.shields.io/pypi/v/ptwt + :target: https://pypi.org/project/ptwt/ + :alt: PyPI - Project + +.. image:: https://img.shields.io/pypi/l/ptwt + :target: https://github.com/v0lta/PyTorch-Wavelet-Toolbox/blob/main/LICENSE + :alt: PyPI - License + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Black code style + +.. image:: https://static.pepy.tech/personalized-badge/ptwt?period=total&units=international_system&left_color=grey&right_color=brightgreen&left_text=Downloads + :target: https://pepy.tech/project/ptwt + + + + +Welcome to the PyTorch wavelet toolbox. This package implements: + +- the fast wavelet transform (fwt) via ``wavedec`` and its inverse by providing the ``waverec`` function, +- the two-dimensional fwt is called ``wavedec2`` the synthesis counterpart ``waverec2``, +- ``wavedec3`` and ``waverec3`` cover the three-dimensional analysis and synthesis case, +- ``fswavedec2``, ``fswavedec3``, ``fswaverec2`` and ``fswaverec3`` support separable transformations. +- ``MatrixWavedec`` and ``MatrixWaverec`` implement sparse-matrix-based fast wavelet transforms with boundary filters, +- 2d sparse-matrix transforms with separable & non-separable boundary filters are available, +- ``MatrixWavedec3`` and ``MatrixWaverec3`` allow separable 3D-fwt's with boundary filters. +- ``cwt`` computes a one-dimensional continuous forward transform, +- single and two-dimensional wavelet packet forward and backward transforms are available via the ``WaveletPacket`` and ``WaveletPacket2D`` objects, +- finally, this package provides adaptive wavelet support (experimental). + +This toolbox extends `PyWavelets <https://pywavelets.readthedocs.io/en/latest/>`_ . We additionally provide GPU and gradient support via a PyTorch backend. +Complete documentation is available at: https://pytorch-wavelet-toolbox.readthedocs.io/ + + +**Installation** + +Install the toolbox via pip or clone this repository. In order to use ``pip``, type: + +.. code-block:: sh + + $ pip install ptwt + + +You can remove it later by typing ``pip uninstall ptwt``. + +Example usage: +"""""""""""""" +**Single dimensional transform** + +One way to compute fast wavelet transforms is to rely on padding and +convolution. Consider the following example: + +.. code-block:: python + + import torch + import numpy as np + import pywt + import ptwt # use "from src import ptwt" for a cloned the repo + + # generate an input of even length. + data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0]) + data_torch = torch.from_numpy(data.astype(np.float32)) + wavelet = pywt.Wavelet('haar') + + # compare the forward fwt coefficients + print(pywt.wavedec(data, wavelet, mode='zero', level=2)) + print(ptwt.wavedec(data_torch, wavelet, mode='zero', level=2)) + + # invert the fwt. + print(ptwt.waverec(ptwt.wavedec(data_torch, wavelet, mode='zero'), + wavelet)) + + +The functions ``wavedec`` and ``waverec`` compute the 1d-fwt and its inverse. +Internally both rely on ``conv1d``, and its transposed counterpart ``conv_transpose1d`` +from the ``torch.nn.functional`` module. This toolbox supports discrete wavelets +see also ``pywt.wavelist(kind='discrete')``. I have tested +Daubechies-Wavelets ``db-x`` and symlets ``sym-x``, which are usually a good starting point. + +**Two-dimensional transform** + +Analog to the 1d-case ``wavedec2`` and ``waverec2`` rely on +``conv2d``, and its transposed counterpart ``conv_transpose2d``. +To test an example run: + + +.. code-block:: python + + import ptwt, pywt, torch + import numpy as np + import scipy.misc + + face = np.transpose(scipy.datasets.face(), + [2, 0, 1]).astype(np.float64) + pytorch_face = torch.tensor(face) + coefficients = ptwt.wavedec2(pytorch_face, pywt.Wavelet("haar"), + level=2, mode="constant") + reconstruction = ptwt.waverec2(coefficients, pywt.Wavelet("haar")) + np.max(np.abs(face - reconstruction.squeeze(1).numpy())) + + + +**Boundary Wavelets with Sparse-Matrices** + +In addition to convolution and padding approaches, +sparse-matrix-based code with boundary wavelet support is available. +In contrast to padding, boundary wavelets do not add extra pixels at +the edges. +Internally, boundary wavelet support relies on ``torch.sparse.mm``. +Generate 1d sparse matrix forward and backward transforms with the +``MatrixWavedec`` and ``MatrixWaverec`` classes. +Reconsidering the 1d case, try: + +.. code-block:: python + + import torch + import numpy as np + import pywt + import ptwt # use "from src import ptwt" for a cloned the repo + + # generate an input of even length. + data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0]) + data_torch = torch.from_numpy(data.astype(np.float32)) + # forward + matrix_wavedec = ptwt.MatrixWavedec(pywt.Wavelet("haar"), level=2) + coeff = matrix_wavedec(data_torch) + print(coeff) + # backward + matrix_waverec = ptwt.MatrixWaverec(pywt.Wavelet("haar")) + rec = matrix_waverec(coeff) + print(rec) + + +The process for the 2d transforms ``MatrixWavedec2``, ``MatrixWaverec2`` works similarly. +By default, a separable transformation is used. +To use a non-separable transformation, pass ``separable=False`` to ``MatrixWavedec2`` and ``MatrixWaverec2``. +Separable transformations use a 1d transformation along both axes, which might be faster since fewer matrix entries +have to be orthogonalized. + + +**Adaptive** **Wavelets** + +Experimental code to train an adaptive wavelet layer in PyTorch is available in the ``examples`` folder. In addition to static wavelets +from pywt, + +- Adaptive product-filters +- and optimizable orthogonal-wavelets are supported. + +See https://github.com/v0lta/PyTorch-Wavelet-Toolbox/tree/main/examples/network_compression/ for a complete implementation. + + +**Testing** + +The ``tests`` folder contains multiple tests to allow independent verification of this toolbox. +The GitHub workflow executes a subset of all tests for efficiency reasons. +After cloning the repository, moving into the main directory, and installing ``nox`` with ``pip install nox`` run + +.. code-block:: sh + + $ nox --session test + + + +to run all existing tests. + +Citation +"""""""" + +If you use this work in a scientific context please cite: + +.. code-block:: + + @phdthesis{handle:20.500.11811/9245, + urn: https://nbn-resolving.org/urn:nbn:de:hbz:5-63361, + author = {{Moritz Wolter}}, + title = {Frequency Domain Methods in Recurrent Neural Networks for Sequential Data Processing}, + school = {Rheinische Friedrich-Wilhelms-Universität Bonn}, + year = 2021, + month = jul, + url = {https://hdl.handle.net/20.500.11811/9245} + } + +If you use the boundary wavelet support please additionally cite: + +.. code-block:: + + @thesis{Blanke2021, + author = {Felix Blanke}, + title = {{Randbehandlung bei Wavelets für Faltungsnetzwerke}}, + type = {Bachelor's Thesis}, + annote = {Gbachelor}, + year = {2021}, + school = {Institut f\"ur Numerische Simulation, Universit\"at Bonn} + } + + + +%prep +%autosetup -n ptwt-0.1.5 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-ptwt -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 31 2023 Python_Bot <Python_Bot@openeuler.org> - 0.1.5-1 +- Package Spec generated @@ -0,0 +1 @@ +daa97e11c2ae766b93cc1164cefa3c2b ptwt-0.1.5.tar.gz |