%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.aliyun.com/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 `_ . 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 `_ . 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 `_ . 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
* Fri Jun 09 2023 Python_Bot  - 0.1.5-1
- Package Spec generated