Skip to content

Commit c204095

Browse files
authored
Merge pull request #602 from mrava87/v2.3
Prepare for v2.3.0
2 parents 3e6dc8f + a7ad7d0 commit c204095

File tree

6 files changed

+103
-48
lines changed

6 files changed

+103
-48
lines changed

CHANGELOG.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
Changelog
2+
=========
3+
4+
# 2.3.0
5+
6+
* Added `pylops.JaxOperator`, `pylops.signalprocessing.DWTND`, and `pylops.signalprocessing.DTCWT` operators.
7+
* Added `updatesrc` method to `pylops.waveeqprocessing.AcousticWave2D`.
8+
* Added `verb` to `pylops.signalprocessing.Sliding1D.sliding1d_design`, `pylops.signalprocessing.Sliding2D.sliding2d_design`, `pylops.signalprocessing.Sliding3D.sliding3d_design`, `pylops.signalprocessing.Patch2D.patch2d_design`, and `pylops.signalprocessing.Patch3D.patch3d_design`.
9+
* Added `kwargs_fft` to `pylops.signalprocessing.FFTND`.
10+
* Added `cosinetaper` to `pylops.utils.tapers.cosinetaper`.
11+
* Added `kind` to `pylops.waveeqprocessing.Deghosting`.
12+
* Modified all methods in `pylops.utils.backend` to enable jax integration.
13+
* Modified implementations of `pylops.signalprocessing.Sliding1D`, `pylops.signalprocessing.Sliding2D`,
14+
`pylops.signalprocessing.Sliding3D`, `pylops.signalprocessing.Patch2D`, and
15+
`pylops.signalprocessing.Patch3D` to being directly implemented instead of relying on other PyLops operators. Added also `savetaper` parameter and an option to apply the operator `Op` simultaneously to all windows.
16+
* Modified `pylops.waveeqprocessing.AcousticWave2D._born_oneshot` and
17+
`pylops.waveeqprocessing.AcousticWave2D._born_allshots` to avoid recreating the devito solver for each shot (and enabling internal caching...)
18+
* Modified `dtype` of `pylops.signalprocessing.Shift` to be that of the input vector.
19+
* Modified `pylops.waveeqprocessing.BlendingContinuous` to use `matvec/rmatvec` instead of `@/.H @` for compatibility with pylops solvers.
20+
* Removed `cusignal` as optional dependency and `cupy`'s equivalent methods (since the library
21+
is now unmantained and merged into `cupy`).
22+
* Fixed ImportError of optional dependencies when installed but not correctly functioning (see [Issue #548](https://github.com/PyLops/pylops/issues/548))
23+
* Fixed bug in :py:func:`pylops.utils.deps.to_cupy_conditional` (see [Issue #579](https://github.com/PyLops/pylops/issues/579))
24+
* Fixed bug in the definition of `nttot` in :py:class:`pylops.waveeqprocessing.BlendingContinuous`
25+
* Fixed bug in :py:func:`pylops.utils.signalprocessing.dip_estimate` (see [Issue #572](https://github.com/PyLops/pylops/issues/572))
26+
27+
128
# 2.2.0
229

330
* Added `pylops.signalprocessing.NonStationaryConvolve3D` operator
@@ -287,7 +314,7 @@ To aid users in navigating the breaking changes, we provide the following docume
287314
``pylops.waveeqprocessing.UpDownComposition3Doperator``, and
288315
``pylops.waveeqprocessing.PhaseShift`` operators
289316
* Fix bug in ``pylops.basicoperators.Kronecker``
290-
(see [Issue #125](https://github.com/Statoil/pylops/issues/125))
317+
(see [Issue #125](https://github.com/PyLops/pylops/issues/125))
291318

292319
# 1.7.0
293320
* Added ``pylops.basicoperators.Gradient``,

docs/source/changelog.rst

Lines changed: 71 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,52 @@
33
Changelog
44
=========
55

6+
Version 2.3.0
7+
-------------
8+
9+
*Released on: 16/08/2024*
10+
11+
* Added :py:class:`pylops.JaxOperator`, :py:class:`pylops.signalprocessing.DWTND`, and :py:class:`pylops.signalprocessing.DTCWT` operators.
12+
* Added `updatesrc` method to :py:class:`pylops.waveeqprocessing.AcousticWave2D`
13+
* Added `verb` to :py:func:`pylops.signalprocessing.Sliding1D.sliding1d_design`, :py:func:`pylops.signalprocessing.Sliding2D.sliding2d_design`,
14+
:py:func:`pylops.signalprocessing.Sliding3D.sliding3d_design`, :py:func:`pylops.signalprocessing.Patch2D.patch2d_design`,
15+
and :py:func:`pylops.signalprocessing.Patch3D.patch3d_design`
16+
* Added `kwargs_fft` to :py:class:`pylops.signalprocessing.FFTND`
17+
* Added `cosinetaper` to :py:class:`pylops.utils.tapers.cosinetaper`
18+
* Added `kind` to :py:class:`pylops.waveeqprocessing.Deghosting`.
19+
* Modified all methods in :py:mod:`pylops.utils.backend` to enable jax integration
20+
* Modified implementations of :py:class:`pylops.signalprocessing.Sliding1D`, :py:class:`pylops.signalprocessing.Sliding2D`,
21+
:py:class:`pylops.signalprocessing.Sliding3D`, :py:class:`pylops.signalprocessing.Patch2D`, and
22+
:py:class:`pylops.signalprocessing.Patch3D` to being directly implemented instead of relying on
23+
other PyLops operators. Added also `savetaper` parameter and an option to apply the operator `Op`
24+
simultaneously to all windows
25+
* Modified :py:func:`pylops.waveeqprocessing.AcousticWave2D._born_oneshot`
26+
and :py:func:`pylops.waveeqprocessing.AcousticWave2D._born_allshots` to avoid
27+
recreating the devito solver for each shot (and enabling internal caching...)
28+
* Modified `dtype` of :py:class:`pylops.signalprocessing.Shift` to be that of the input vector.
29+
* Modified :py:class:`pylops.waveeqprocessing.BlendingContinuous` to use `matvec/rmatvec` instead of `@/.H @`
30+
for compatibility with pylops solvers
31+
* Removed `cusignal` as optional dependency and `cupy`'s equivalent methods (since the library
32+
is now unmantained and merged into `cupy`)
33+
* Fixed ImportError of optional dependencies when installed but not correctly functioning (see https://github.com/PyLops/pylops/issues/548)
34+
* Fixed bug in :py:func:`pylops.utils.deps.to_cupy_conditional` (see https://github.com/PyLops/pylops/issues/579)
35+
* Fixed bug in the definition of `nttot` in :py:class:`pylops.waveeqprocessing.BlendingContinuous`
36+
* Fixed bug in :py:func:`pylops.utils.signalprocessing.dip_estimate` (see https://github.com/PyLops/pylops/issues/572)
37+
638
Version 2.2.0
739
-------------
840

941
*Released on: 11/11/2023*
1042

11-
* Added :class:`pylops.signalprocessing.NonStationaryConvolve3D` operator
12-
* Added nd-array capabilities to :class:`pylops.basicoperators.Identity` and :class:`pylops.basicoperators.Zero`
13-
* Added second implementation in :class:`pylops.waveeqprocessing.BlendingContinuous` which is more
43+
* Added :py:class:`pylops.signalprocessing.NonStationaryConvolve3D` operator
44+
* Added nd-array capabilities to :py:class:`pylops.basicoperators.Identity` and :py:class:`pylops.basicoperators.Zero`
45+
* Added second implementation in :py:class:`pylops.waveeqprocessing.BlendingContinuous` which is more
1446
performant when dealing with small number of receivers
15-
* Added `forceflat` property to operators with ambiguous `rmatvec` (:class:`pylops.basicoperators.Block`,
16-
:class:`pylops.basicoperators.Bilinear`, :class:`pylops.basicoperators.BlockDiag`, :class:`pylops.basicoperators.HStack`,
17-
:class:`pylops.basicoperators.MatrixMult`, :class:`pylops.basicoperators.VStack`, and :class:`pylops.basicoperators.Zero`)
18-
* Improved `dynamic` mode of :class:`pylops.waveeqprocessing.Kirchhoff` operator
19-
* Modified :class:`pylops.signalprocessing.Convolve1D` to allow both filters that are both shorter and longer of the
47+
* Added `forceflat` property to operators with ambiguous `rmatvec` (:py:class:`pylops.basicoperators.Block`,
48+
:py:class:`pylops.basicoperators.Bilinear`, :py:class:`pylops.basicoperators.BlockDiag`, :py:class:`pylops.basicoperators.HStack`,
49+
:py:class:`pylops.basicoperators.MatrixMult`, :py:class:`pylops.basicoperators.VStack`, and :py:class:`pylops.basicoperators.Zero`)
50+
* Improved `dynamic` mode of :py:class:`pylops.waveeqprocessing.Kirchhoff` operator
51+
* Modified :py:class:`pylops.signalprocessing.Convolve1D` to allow both filters that are both shorter and longer of the
2052
input vector
2153
* Modified all solvers to use `matvec/rmatvec` instead of `@/.H @` to improve performance
2254

@@ -26,19 +58,19 @@ Version 2.1.0
2658

2759
*Released on: 17/03/2023*
2860

29-
* Added :class:`pylops.signalprocessing.DCT`, :class:`pylops.signalprocessing.NonStationaryConvolve1D`,
30-
:class:`pylops.signalprocessing.NonStationaryConvolve2D`, :class:`pylops.signalprocessing.NonStationaryFilters1D`, and
31-
:class:`pylops.signalprocessing.NonStationaryFilters2D` operators
32-
* Added :class:`pylops.waveeqprocessing.BlendingContinuous`, :class:`pylops.waveeqprocessing.BlendingGroup`, and
33-
:class:`pylops.waveeqprocessing.BlendingHalf` operators
34-
* Added `kind='datamodel'` to :class:`pylops.optimization.cls_sparsity.IRLS`
35-
* Improved inner working of :class:`pylops.waveeqprocessing.Kirchhoff` operator significantly
61+
* Added :py:class:`pylops.signalprocessing.DCT`, :py:class:`pylops.signalprocessing.NonStationaryConvolve1D`,
62+
:py:class:`pylops.signalprocessing.NonStationaryConvolve2D`, :py:class:`pylops.signalprocessing.NonStationaryFilters1D`, and
63+
:py:class:`pylops.signalprocessing.NonStationaryFilters2D` operators
64+
* Added :py:class:`pylops.waveeqprocessing.BlendingContinuous`, :py:class:`pylops.waveeqprocessing.BlendingGroup`, and
65+
:py:class:`pylops.waveeqprocessing.BlendingHalf` operators
66+
* Added `kind='datamodel'` to :py:class:`pylops.optimization.cls_sparsity.IRLS`
67+
* Improved inner working of :py:class:`pylops.waveeqprocessing.Kirchhoff` operator significantly
3668
reducing the memory usage related to storing traveltime, angle, and amplitude tables.
37-
* Improved handling of `haxes` in :class:`pylops.signalprocessing.Radon2D` and :class:`pylops.signalprocessing.Radon3D` operators
38-
* Added possibility to feed ND-arrays to :class:`pylops.TorchOperator`
39-
* Removed :class:`pylops.LinearOperator` inheritance and added `__call__` method to :class:`pylops.TorchOperator`
40-
* Removed `scipy.sparse.linalg.LinearOperator` and added :class:`abc.ABC` inheritance to :class:`pylops.LinearOperator`
41-
* All operators are now classes of `:class:`pylops.LinearOperator` type
69+
* Improved handling of `haxes` in :py:class:`pylops.signalprocessing.Radon2D` and :py:class:`pylops.signalprocessing.Radon3D` operators
70+
* Added possibility to feed ND-arrays to :py:class:`pylops.TorchOperator`
71+
* Removed :py:class:`pylops.LinearOperator` inheritance and added `__call__` method to :py:class:`pylops.TorchOperator`
72+
* Removed `scipy.sparse.linalg.LinearOperator` and added :py:class:`abc.ABC` inheritance to :py:class:`pylops.LinearOperator`
73+
* All operators are now classes of `:py:class:`pylops.LinearOperator` type
4274

4375

4476
Version 2.0.0
@@ -56,25 +88,25 @@ To aid users in navigating the breaking changes, we provide the following docume
5688
Users do not need to use ``.ravel`` and ``.reshape`` as often anymore. See the migration guide for more information.
5789
* Typing annotations for several submodules (``avo``, ``basicoperators``, ``signalprocessing``, ``utils``, ``optimization``,
5890
``waveeqprocessing``)
59-
* New :class:`pylops.TorchOperator` wraps a Pylops operator into a PyTorch function
60-
* New :class:`pylops.signalprocessing.Patch3D` applies a linear operator repeatedly to patches of the model vector
61-
* Each of :class:`pylops.signalprocessing.Sliding1D`, :class:`pylops.signalprocessing.Sliding2D`,
62-
:class:`pylops.signalprocessing.Sliding3D`, :class:`pylops.signalprocessing.Patch2D` and :class:`pylops.signalprocessing.Patch3D`
91+
* New :py:class:`pylops.TorchOperator` wraps a Pylops operator into a PyTorch function
92+
* New :py:class:`pylops.signalprocessing.Patch3D` applies a linear operator repeatedly to patches of the model vector
93+
* Each of :py:class:`pylops.signalprocessing.Sliding1D`, :py:class:`pylops.signalprocessing.Sliding2D`,
94+
:py:class:`pylops.signalprocessing.Sliding3D`, :py:class:`pylops.signalprocessing.Patch2D` and :py:class:`pylops.signalprocessing.Patch3D`
6395
have an associated ``slidingXd_design`` or ``patchXd_design`` functions associated with them to aid the user in designing the windows
64-
* :class:`pylops.FirstDerivative` and :class:`pylops.SecondDerivative`, and therefore other derivative operators which rely on the
65-
(e.g., :class:`pylops.Gradient`) support higher order stencils
66-
* :class:`pylops.waveeqprocessing.Kirchhoff` substitutes :class:`pylops.waveeqprocessing.Demigration` and incorporates a variety of
96+
* :py:class:`pylops.FirstDerivative` and :py:class:`pylops.SecondDerivative`, and therefore other derivative operators which rely on the
97+
(e.g., :py:class:`pylops.Gradient`) support higher order stencils
98+
* :py:class:`pylops.waveeqprocessing.Kirchhoff` substitutes :py:class:`pylops.waveeqprocessing.Demigration` and incorporates a variety of
6799
new functionalities
68-
* New :class:`pylops.waveeqprocessing.AcousticWave2D` wraps the `Devito <https://www.devitoproject.org/>`_ acoutic wave propagator
100+
* New :py:class:`pylops.waveeqprocessing.AcousticWave2D` wraps the `Devito <https://www.devitoproject.org/>`_ acoutic wave propagator
69101
providing a wave-equation based Born modeling operator with a reverse-time migration adjoint
70-
* Solvers can now be implemented via the :class:`pylops.optimization.basesolver.Solver` class. They can now be used through a
71-
functional interface with lowercase name (e.g., :func:`pylops.optimization.sparsity.splitbregman`) or via class interface with CamelCase name
72-
(e.g., :class:`pylops.optimization.cls_sparsity.SplitBregman`. Moreover, solvers now accept callbacks defined by the
73-
:class:`pylops.optimization.callback.Callbacks` interface (see e.g., :class:`pylops.optimization.callback.MetricsCallback`).
74-
* Metrics such as :func:`pylops.utils.metrics.mae` and :func:`pylops.utils.metrics.mse` and others
75-
* New :func:`pylops.utils.signalprocessing.dip_estimate` estimates local dips in an image (measured in radians) in a stabler way than the old :func:`pylops.utils.signalprocessing.dip_estimate` did for slopes.
76-
* New :func:`pylops.utils.tapers.tapernd` for N-dimensional tapers
77-
* New wavelets :func:`pylops.utils.wavelets.klauder` and :func:`pylops.utils.wavelets.ormsby`
102+
* Solvers can now be implemented via the :py:class:`pylops.optimization.basesolver.Solver` class. They can now be used through a
103+
functional interface with lowercase name (e.g., :py:func:`pylops.optimization.sparsity.splitbregman`) or via class interface with CamelCase name
104+
(e.g., :py:class:`pylops.optimization.cls_sparsity.SplitBregman`. Moreover, solvers now accept callbacks defined by the
105+
:py:class:`pylops.optimization.callback.Callbacks` interface (see e.g., :py:class:`pylops.optimization.callback.MetricsCallback`)
106+
* Metrics such as :py:func:`pylops.utils.metrics.mae` and :py:func:`pylops.utils.metrics.mse` and others
107+
* New :py:func:`pylops.utils.signalprocessing.dip_estimate` estimates local dips in an image (measured in radians) in a stabler way than the old :py:func:`pylops.utils.signalprocessing.dip_estimate` did for slopes.
108+
* New :py:func:`pylops.utils.tapers.tapernd` for N-dimensional tapers
109+
* New wavelets :py:func:`pylops.utils.wavelets.klauder` and :py:func:`pylops.utils.wavelets.ormsby`
78110

79111
**Documentation**
80112

@@ -210,7 +242,7 @@ Version 1.15.0
210242
``full``, ``half``, or ``trapezoidal`` integration.
211243
* Fixed `_hardthreshold_percentile` in
212244
:py:mod:`pylops.optimization.sparsity`
213-
- `Issue #249 <https://github.com/Statoil/pylops/issues/249>`_.
245+
(see https://github.com/PyLops/pylops/issues/249).
214246
* Fixed r2norm in :py:func:`pylops.optimization.solver.cgls`.
215247

216248

@@ -261,7 +293,7 @@ Version 1.13.0
261293
* Fixed bug in data reshaping in check in
262294
:py:class:`pylops.avo.prestack.PrestackInversion`
263295
* Fixed loading error when using old cupy and/or cusignal
264-
(see `Issue #201 <https://github.com/PyLops/pylops/issues/201>`_)
296+
(see https://github.com/PyLops/pylops/issues/201)
265297

266298

267299
Version 1.12.0
@@ -380,7 +412,7 @@ Version 1.8.0
380412
:py:class:`pylops.waveeqprocessing.UpDownComposition3Doperator`, and
381413
:py:class:`pylops.waveeqprocessing.PhaseShift` operators
382414
* Fix bug in :py:class:`pylops.basicoperators.Kronecker`
383-
(see `Issue #125 <https://github.com/PyLops/pylops/issues/125>`_)
415+
(see https://github.com/PyLops/pylops/issues/125)
384416

385417

386418
Version 1.7.0

docs/source/installation.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -474,11 +474,6 @@ or with ``pip`` via
474474
475475
SPGL1
476476
-----
477-
478-
.. warning::
479-
480-
``SPGL1`` is not yet supported with Numpy 2.
481-
482477
`SPGL1 <https://spgl1.readthedocs.io/en/latest/>`_ is used to solve sparsity-promoting
483478
basis pursuit, basis pursuit denoise, and Lasso problems
484479
in :py:func:`pylops.optimization.sparsity.SPGL1` solver.

pylops/utils/tapers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ def cosinetaper(
7575
square : :obj:`bool`, optional
7676
Cosine square taper (``True``) or Cosine taper (``False``)
7777
exponent : :obj:`float`, optional
78+
.. versionadded:: 2.3.0
79+
7880
Exponent to apply to Cosine taper. If provided, takes precedence over ``square``
7981
8082
Returns

pylops/waveeqprocessing/oneway.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,8 @@ def Deghosting(
235235
zrec : :obj:`float`
236236
Depth of receiver array
237237
kind : :obj:`str`, optional
238+
.. versionadded:: 2.3.0
239+
238240
Type of data (``p`` or ``vz``)
239241
pd : :obj:`np.ndarray`, optional
240242
Direct arrival to be subtracted from ``p``

pytests/test_sparsity.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,6 @@ def test_ISTA_FISTA_multiplerhs(par):
362362
)
363363
def test_SPGL1(par):
364364
"""Invert problem with SPGL1"""
365-
if int(np_version[0]) >= 2:
366-
return
367-
368365
np.random.seed(42)
369366
Aop = MatrixMult(np.random.randn(par["ny"], par["nx"]))
370367

0 commit comments

Comments
 (0)