Releases: PyLops/pylops
Releases · PyLops/pylops
v2.3.1
v2.3.0
- Added
pylops.JaxOperator
,pylops.signalprocessing.DWTND
, andpylops.signalprocessing.DTCWT
operators. - Added
updatesrc
method topylops.waveeqprocessing.AcousticWave2D
. - Added
verb
topylops.signalprocessing.Sliding1D.sliding1d_design
,pylops.signalprocessing.Sliding2D.sliding2d_design
,pylops.signalprocessing.Sliding3D.sliding3d_design
,pylops.signalprocessing.Patch2D.patch2d_design
, andpylops.signalprocessing.Patch3D.patch3d_design
. - Added
kwargs_fft
topylops.signalprocessing.FFTND
. - Added
cosinetaper
topylops.utils.tapers.cosinetaper
. - Added
kind
topylops.waveeqprocessing.Deghosting
. - Modified all methods in
pylops.utils.backend
to enable jax integration. - Modified implementations of
pylops.signalprocessing.Sliding1D
,pylops.signalprocessing.Sliding2D
,
pylops.signalprocessing.Sliding3D
,pylops.signalprocessing.Patch2D
, and
pylops.signalprocessing.Patch3D
to being directly implemented instead of relying on other PyLops operators. Added alsosavetaper
parameter and an option to apply the operatorOp
simultaneously to all windows. - Modified
pylops.waveeqprocessing.AcousticWave2D._born_oneshot
and
pylops.waveeqprocessing.AcousticWave2D._born_allshots
to avoid recreating the devito solver for each shot (and enabling internal caching...) - Modified
dtype
ofpylops.signalprocessing.Shift
to be that of the input vector. - Modified
pylops.waveeqprocessing.BlendingContinuous
to usematvec/rmatvec
instead of@/.H @
for compatibility with pylops solvers. - Removed
cusignal
as optional dependency andcupy
's equivalent methods (since the library
is now unmantained and merged intocupy
). - Fixed ImportError of optional dependencies when installed but not correctly functioning (see Issue #548)
- Fixed bug in :py:func:
pylops.utils.deps.to_cupy_conditional
(see Issue #579) - Fixed bug in the definition of
nttot
in :py:class:pylops.waveeqprocessing.BlendingContinuous
- Fixed bug in :py:func:
pylops.utils.signalprocessing.dip_estimate
(see Issue #572)
v2.2.0
- Added
pylops.signalprocessing.NonStationaryConvolve3D
operator - Added nd-array capabilities to
pylops.basicoperators.Identity
andpylops.basicoperators.Zero
- Added second implementation in
pylops.waveeqprocessing.BlendingContinuous
which is more
performant when dealing with small number of receivers - Added
forceflat
property to operators with ambiguousrmatvec
(pylops.basicoperators.Block
,
pylops.basicoperators.Bilinear
,pylops.basicoperators.BlockDiag
,pylops.basicoperators.HStack
,
pylops.basicoperators.MatrixMult
,pylops.basicoperators.VStack
, andpylops.basicoperators.Zero
) - Improved
dynamic
mode ofpylops.waveeqprocessing.Kirchhoff
operator - Modified
pylops.signalprocessing.Convolve1D
to allow both filters that are both shorter and longer of the
input vector - Modified all solvers to use
matvec/rmatvec
instead of@/.H @
to improve performance
v2.1.0
- Added
pylops.signalprocessing.DCT
,pylops.signalprocessing.NonStationaryConvolve1D
,
pylops.signalprocessing.NonStationaryConvolve2D
,pylops.signalprocessing.NonStationaryFilters1D
, and
pylops.signalprocessing.NonStationaryFilters2D
operators - Added
pylops.waveeqprocessing.BlendingContinuous
,pylops.waveeqprocessing.BlendingGroup
, and
pylops.waveeqprocessing.BlendingHalf
operators - Added
kind='datamodel'
topylops.optimization.cls_sparsity.IRLS
- Improved inner working of
pylops.waveeqprocessing.Kirchhoff
operator significantly
reducing the memory usage related to storing traveltime, angle, and amplitude tables. - Improved handling of
haxes
inpylops.signalprocessing.Radon2D
andpylops.signalprocessing.Radon3D
operators - Added possibility to feed ND-arrays to
pylops.TorchOperator
- Removed
pylops.LinearOperator
inheritance and added__call__
method topylops.TorchOperator
- Removed
scipy.sparse.linalg.LinearOperator
and addedabc.ABC
inheritance topylops.LinearOperator
- All operators are now classes of
pylops.LinearOperator
type
v2.0.0
PyLops has undergone significant changes in this release, including new LinearOperator
s, more features, new examples and bugfixes.
To aid users in navigating the breaking changes, we provide the following document MIGRATION_V1_V2.md.
New Features
- Multiplication of linear operators by N-dimensional arrays is now supported via the new
dims
/dimsd
properties.
Users do not need to use.ravel
and.reshape
as often anymore. See the migration guide for more information. - Typing annotations for several submodules (
avo
,basicoperators
,signalprocessing
,utils
,optimization
,waveeqprocessing
) - New pylops.TorchOperator wraps a Pylops operator into a PyTorch function
- New pylops.signalprocessing.Patch3D applies a linear operator repeatedly to patches of the model vector
- Each of Sliding1D, Sliding2D, Sliding3D, Patch2D and Patch3D have an associated
slidingXd_design
orpatchXd_design
functions associated with them to aid the user in designing the windows - FirstDerivative and SecondDerivative, and therefore other derivative operators which rely on the (e.g., Gradient) support higher order stencils
- pylops.waveeqprocessing.Kirchhoff substitutes pylops.waveeqprocessing.Demigration and incorporates a variety of new functionalities
- New pylops.waveeqprocessing.AcousticWave2D wraps the Devito acoutic wave propagator providing a wave-equation based Born modeling operator with a reverse-time migration adjoint
- Solvers can now be implemented via the pylops.optimization.basesolver.Solver class. They can now be used through a functional interface with lowercase name (e.g., splitbregman) or via class interface with CamelCase name (e.g., SplitBregman). Moreover, solvers now accept callbacks defined by the Callbacks interface (see e.g., MetricsCallback).
- Metrics such as mean absolute error (mae), mean squared error (mse) and others
- New pylops.utils.signalprocessing.dip_estimate estimates local dips in an image (measured in radians) in a stabler way than pylops.utils.signalprocessing.dip_estimate did for slopes.
- New pylops.utils.tapers.tapernd for N dimensional tapers
- New wavelets Klauder and Ormsby
Documentation
- Installation has been revamped
- Revamped guide on how to implement a new
LinearOperator
from scratch - New guide on how to implement a new solver from scratch
- New tutorials:
- New gallery examples:
v1.18.3
- Fixed
pylops.optimization.basic.lsqr
,pylops.optimization.sparsity.ISTA
, and
pylops.optimization.sparsity.FISTA
to work with cupy arrays. This change was required
by how recent cupy versions handle scalars, which are not converted directly into float types,
rather kept as cupy arrays. - Fixed bug in
pylops.waveeqprocessing.Deghosting
introduced in
commit 7e596d4
v1.18.2
- Added
NMO
example to gallery - Extended
pylops.basicoperators.Laplacian
to N-dimensional arrays - Added
forward
kind topylops.basicoperators.SecondDerivative
and
pylops.basicoperators.Laplacian
- Added
chirp-sliding
kind topylops.waveeqprocessing.seismicinterpolation.SeismicInterpolation
- Fixed bug due to the new internal structure of
LinearOperator
submodule introduced inscipy1.8.0
v1.18.0
- Added
NMO
example to gallery - Extended
pylops.basicoperators.Laplacian
to N-dimensional arrays - Added
forward
kind topylops.basicoperators.SecondDerivative
and
pylops.basicoperators.Laplacian
- Added
chirp-sliding
kind topylops.waveeqprocessing.seismicinterpolation.SeismicInterpolation
- Fixed bug due to the new internal structure of
LinearOperator
submodule introduced inscipy1.8.0
v1.17.0
- Added
pylops.utils.describe.describe
method - Added
fftengine
topylops.waveeqprocessing.Marchenko
- Added
ifftshift_before
andfftshift_after
optional input parameters in
pylops.signalprocessing.FFT
- Added
norm
optional input parameter topylops.signalprocessing.FFT2D
and
pylops.signalprocessing.FFTND
- Added
scipy
backend topylops.signalprocessing.FFT
and
pylops.signalprocessing.FFT2D
andpylops.signalprocessing.FFTND
- Added
eps
optional input parameter in
pylops.utils.signalprocessing.slope_estimate
- Added pre-commit hooks
- Improved pre-commit hooks
- Vectorized
pylops.utils.signalprocessing.slope_estimate
- Handlexd
nfft<nt
case inpylops.signalprocessing.FFT
and
pylops.signalprocessing.FFT2D
andpylops.signalprocessing.FFTND
- Introduced automatic casting of dtype in `pylops.MatrixMult
- Improved documentation and definition of optinal parameters
ofpylops.Spread
- Major clean up of documentation and mathematical formulas
- Major refractoring of the inner structure of
pylops.signalprocessing.FFT
and
pylops.signalprocessing.FFT2D
andpylops.signalprocessing.FFTND
- Reduced warnings in test suite
- Reduced computational time of
test_wavedecomposition
in the test suite - Fixed bug in
pylops.signalprocessing.Sliding1D
,
pylops.signalprocessing.Sliding2D
and
pylops.signalprocessing.Sliding3D
where thedtype
of the Restriction
operator is inffered fromOp
- Fixed bug in
pylops.signalprocessing.Radon2D
and
pylops.signalprocessing.Radon3D
when using centered spatial axes - Fixed scaling in
pylops.signalprocessing.FFT
withreal=True
to pass the
dot-test
v1.16.0
- Added
pylops.utils.estimators
module for trace estimation - Added
x0
inpylops.optimization.sparsity.ISTA
and
pylops.optimization.sparsity.FISTA
to handle non-zero initial guess - Modified
pylops.optimization.sparsity.ISTA
and
pylops.optimization.sparsity.FISTA
to handle multiple right hand sides - Modified creation of
haxis
inpylops.signalprocessing.Radon2D
and
pylops.signalprocessing.Radon3D
to allow for uncentered spatial axes - Fixed
_rmatvec
for explicit inpylops.LinearOperator._ColumnLinearOperator