Changelog#
Version 2.4.0#
Released on: 11/12/2024
Added
pylops.signalprocessing.FourierRadon2d
andpylops.signalprocessing.FourierRadon3d
operatorsAdded
pylops.PyTensorOperator
operatorAdded
pylops.ToCupy
operatorAdded
pylops.utils.seismicevents.parabolic3d
methodFix bug in
pylops.Restriction
when passing iava as cupy array
Version 2.3.1#
Released on: 17/08/2024
Fixed bug in
pylops.utils.backend
(see PyLops/pylops#606)
Version 2.3.0#
Released on: 16/08/2024
Added
pylops.JaxOperator
,pylops.signalprocessing.DWTND
, andpylops.signalprocessing.DTCWT
operators.Added updatesrc method to
pylops.waveeqprocessing.AcousticWave2D
Added verb to
pylops.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 to
pylops.signalprocessing.FFTND
Added cosinetaper to
pylops.utils.tapers.cosinetaper
Added kind to
pylops.waveeqprocessing.Deghosting
.Modified all methods in
pylops.utils.backend
to enable jax integrationModified implementations of
pylops.signalprocessing.Sliding1D
,pylops.signalprocessing.Sliding2D
,pylops.signalprocessing.Sliding3D
,pylops.signalprocessing.Patch2D
, andpylops.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 windowsModified
pylops.waveeqprocessing.AcousticWave2D._born_oneshot
andpylops.waveeqprocessing.AcousticWave2D._born_allshots
to avoid recreating the devito solver for each shot (and enabling internal caching…)Modified dtype of
pylops.signalprocessing.Shift
to be that of the input vector.Modified
pylops.waveeqprocessing.BlendingContinuous
to use matvec/rmatvec instead of @/.H @ for compatibility with pylops solversRemoved cusignal as optional dependency and cupy’s equivalent methods (since the library is now unmantained and merged into cupy)
Fixed ImportError of optional dependencies when installed but not correctly functioning (see PyLops/pylops#548)
Fixed bug in
pylops.utils.deps.to_cupy_conditional
(see PyLops/pylops#579)Fixed bug in the definition of nttot in
pylops.waveeqprocessing.BlendingContinuous
Fixed bug in
pylops.utils.signalprocessing.dip_estimate
(see PyLops/pylops#572)
Version 2.2.0#
Released on: 11/11/2023
Added
pylops.signalprocessing.NonStationaryConvolve3D
operatorAdded 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 receiversAdded forceflat property to operators with ambiguous rmatvec (
pylops.basicoperators.Block
,pylops.basicoperators.Bilinear
,pylops.basicoperators.BlockDiag
,pylops.basicoperators.HStack
,pylops.basicoperators.MatrixMult
,pylops.basicoperators.VStack
, andpylops.basicoperators.Zero
)Improved dynamic mode of
pylops.waveeqprocessing.Kirchhoff
operatorModified
pylops.signalprocessing.Convolve1D
to allow both filters that are both shorter and longer of the input vectorModified all solvers to use matvec/rmatvec instead of @/.H @ to improve performance
Version 2.1.0#
Released on: 17/03/2023
Added
pylops.signalprocessing.DCT
,pylops.signalprocessing.NonStationaryConvolve1D
,pylops.signalprocessing.NonStationaryConvolve2D
,pylops.signalprocessing.NonStationaryFilters1D
, andpylops.signalprocessing.NonStationaryFilters2D
operatorsAdded
pylops.waveeqprocessing.BlendingContinuous
,pylops.waveeqprocessing.BlendingGroup
, andpylops.waveeqprocessing.BlendingHalf
operatorsAdded kind=’datamodel’ to
pylops.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 in
pylops.signalprocessing.Radon2D
andpylops.signalprocessing.Radon3D
operatorsAdded possibility to feed ND-arrays to
pylops.TorchOperator
Removed
pylops.LinearOperator
inheritance and added __call__ method topylops.TorchOperator
Removed scipy.sparse.linalg.LinearOperator and added
abc.ABC
inheritance topylops.LinearOperator
All operators are now classes of :py:class:`pylops.LinearOperator type
Version 2.0.0#
Released on: 12/08/2022
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 functionNew
pylops.signalprocessing.Patch3D
applies a linear operator repeatedly to patches of the model vectorEach of
pylops.signalprocessing.Sliding1D
,pylops.signalprocessing.Sliding2D
,pylops.signalprocessing.Sliding3D
,pylops.signalprocessing.Patch2D
andpylops.signalprocessing.Patch3D
have an associatedslidingXd_design
orpatchXd_design
functions associated with them to aid the user in designing the windowspylops.FirstDerivative
andpylops.SecondDerivative
, and therefore other derivative operators which rely on the (e.g.,pylops.Gradient
) support higher order stencilspylops.waveeqprocessing.Kirchhoff
substitutespylops.waveeqprocessing.Demigration
and incorporates a variety of new functionalitiesNew
pylops.waveeqprocessing.AcousticWave2D
wraps the Devito acoutic wave propagator providing a wave-equation based Born modeling operator with a reverse-time migration adjointSolvers 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.,pylops.optimization.sparsity.splitbregman
) or via class interface with CamelCase name (e.g.,pylops.optimization.cls_sparsity.SplitBregman
. Moreover, solvers now accept callbacks defined by thepylops.optimization.callback.Callbacks
interface (see e.g.,pylops.optimization.callback.MetricsCallback
)Metrics such as
pylops.utils.metrics.mae
andpylops.utils.metrics.mse
and othersNew
pylops.utils.signalprocessing.dip_estimate
estimates local dips in an image (measured in radians) in a stabler way than the oldpylops.utils.signalprocessing.dip_estimate
did for slopes.New
pylops.utils.tapers.tapernd
for N-dimensional tapersNew wavelets
pylops.utils.wavelets.klauder
andpylops.utils.wavelets.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:
Version 1.18.3#
Released on: 30/07/2022
Refractored
pylops.utils.dottest
, and added two new optional input parameters (atol and rtol)Added optional parameter densesolver to
pylops.LinearOperator.div
Fixed
pylops.optimization.basic.lsqr
,pylops.optimization.sparsity.ISTA
, andpylops.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.Fix bug in
pylops.waveeqprocessing.Deghosting
introduced in commit 7e596d4.
Version 1.18.2#
Released on: 29/04/2022
Refractored
pylops.utils.dottest
, and added two new optional input parameters (atol and rtol)Added optional parameter densesolver to
pylops.LinearOperator.div
Version 1.18.1#
Released on: 29/04/2022
!DELETED! due to a mistake in the release process
Version 1.18.0#
Released on: 19/02/2022
Added NMO example to gallery
Extended
pylops.Laplacian
to N-dimensional arraysAdded forward kind to
pylops.SecondDerivative
andpylops.Laplacian
Added chirp-sliding kind to
pylops.waveeqprocessing.seismicinterpolation.SeismicInterpolation
Fixed bug due to the new internal structure of LinearOperator submodule introduced in scipy1.8.0
Version 1.17.0#
Released on: 29/01/2022
Added
pylops.utils.describe.describe
methodAdded
fftengine
topylops.waveeqprocessing.Marchenko
Added
ifftshift_before
andfftshift_after
optional input parameters inpylops.signalprocessing.FFT
Added
norm
optional input parameter topylops.signalprocessing.FFT2D
andpylops.signalprocessing.FFTND
Added
scipy
backend topylops.signalprocessing.FFT
andpylops.signalprocessing.FFT2D
andpylops.signalprocessing.FFTND
Added
eps
optional input parameter inpylops.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
andpylops.signalprocessing.FFT2D
andpylops.signalprocessing.FFTND
Introduced automatic casting of dtype in
pylops.MatrixMult
Improved documentation and definition of optinal parameters of
pylops.Spread
Major clean up of documentation and mathematical formulas
Major refractoring of the inner structure of
pylops.signalprocessing.FFT
andpylops.signalprocessing.FFT2D
andpylops.signalprocessing.FFTND
Reduced warnings in test suite
Reduced computational time of
test_wavedecomposition
in the test suiteFixed bug in
pylops.signalprocessing.Sliding1D
,pylops.signalprocessing.Sliding2D
andpylops.signalprocessing.Sliding3D
where thedtype
of the Restriction operator is inffered fromOp
Fixed bug in
pylops.signalprocessing.Radon2D
andpylops.signalprocessing.Radon3D
when using centered spatial axesFixed scaling in
pylops.signalprocessing.FFT
withreal=True
to pass the dot-test
Version 1.16.0#
Released on: 11/12/2021
Added
pylops.utils.estimators
submodule for trace estimationAdded x0 in
pylops.optimization.sparsity.ISTA
andpylops.optimization.sparsity.FISTA
to handle non-zero initial guessModified
pylops.optimization.sparsity.ISTA
andpylops.optimization.sparsity.FISTA
to handle multiple right hand sidesModified creation of haxis in
pylops.signalprocessing.Radon2D
andpylops.signalprocessing.Radon3D
to allow for uncentered spatial axesFixed _rmatvec for explicit in
pylops.LinearOperator._ColumnLinearOperator
Version 1.15.0#
Released on: 23/10/2021
Added
pylops.signalprocessing.Shift
operator.Added option to choose derivative kind in
pylops.avo.poststack.PoststackInversion
andpylops.avo.prestack.PrestackInversion
.Improved efficiency of adjoint of
pylops.signalprocessing.Fredholm1
by applying complex conjugation to the vectors.Added vsvp to
pylops.avo.prestack.PrestackInversion
allowing to use user defined VS/VP ratio.Added kind to
pylops.basicoperators.CausalIntegration
allowingfull
,half
, ortrapezoidal
integration.Fixed _hardthreshold_percentile in
pylops.optimization.sparsity
(see PyLops/pylops#249).Fixed r2norm in
pylops.optimization.solver.cgls
.
Version 1.14.0#
Released on: 09/07/2021
Added
pylops.optimization.solver.lsqr
solverAdded utility routine
pylops.utils.scalability_test
for scalability tests when usingmultiprocessing
Added
pylops.avo.avo.ps
AVO modelling option and restructuredpylops.avo.prestack.PrestackLinearModelling
to allow passing any function handle that can perform AVO modelling apart from those directly availableAdded R-linear operators (when setting the property clinear=False of a linear operator).
pylops.basicoperators.Real
,pylops.basicoperators.Imag
, andpylops.basicoperators.Conj
Added possibility to run operators
pylops.basicoperators.HStack
,pylops.basicoperators.VStack
,pylops.basicoperators.Block
pylops.basicoperators.BlockDiag
, andpylops.signalprocessing.Sliding3D
usingmultiprocessing
Added dtype to vector X when using
scipy.sparse.linalg.lobpcg
in eigs method ofpylops.LinearOperator
Use kind=forward fot FirstDerivative in
pylops.avo.poststack.PoststackInversion
inversion when dealing with L1 regularized inversion as it makes the inverse problem more stable (no ringing in solution)Changed cost in
pylops.optimization.solver.cg
andpylops.optimization.solver.cgls
to be L2 norms of residualsFixed
pylops.utils.dottest.dottest
for imaginary vectors and to ensure u and v vectors are of same dtype of the operator
Version 1.13.0#
Released on: 26/03/2021
Added
pylops.signalprocessing.Sliding1D
andpylops.signalprocessing.Patch2D
operatorsAdded
pylops.basicoperators.MemoizeOperator
operatorAdded decay and analysis option in
pylops.optimization.sparsity.ISTA
andpylops.optimization.sparsity.FISTA
solversAdded toreal and toimag methods to
pylops.LinearOperator
Make nr and nc optional in
pylops.utils.dottest.dottest
Fixed complex check in
pylops.basicoperators.MatrixMult
when working with complex-valued cupy arraysFixed bug in data reshaping in check in
pylops.avo.prestack.PrestackInversion
Fixed loading error when using old cupy and/or cusignal (see PyLops/pylops#201)
Version 1.12.0#
Released on: 22/11/2020
Modified all operators and solvers to work with cupy arrays
Added
eigs
andsolver
submodules topylops.optimization
Added
deps
andbackend
submodules topylops.utils
Fixed bug in
pylops.signalprocessing.Convolve2D
. andpylops.signalprocessing.ConvolveND
. when dealing with filters that have less dimensions than the input vector.
Version 1.11.1#
Released on: 24/10/2020
Fixed import of
pyfttw
when not available inpylops.signalprocessing.ChirpRadon3D
Version 1.11.0#
Released on: 24/10/2020
Added
pylops.signalprocessing.ChirpRadon2D
andpylops.signalprocessing.ChirpRadon3D
operators.Fixed bug in the inferred dimensions for regularization data creation in
pylops.optimization.leastsquares.NormalEquationsInversion
,pylops.optimization.leastsquares.RegularizedInversion
, andpylops.optimization.sparsity.SplitBregman
.Changed dtype of
pylops.HStack
to allow automatic inference from dtypes of input operator.Modified dtype of
pylops.waveeqprocessing.Marchenko
operator to ensure that outputs of forward and adjoint are real arrays.Reverted to previous complex-friendly implementation of
pylops.optimization.sparsity._softthreshold
to avoid division by 0.
Version 1.10.0#
Released on: 13/08/2020
Added
tosparse
method topylops.LinearOperator
.Added
kind=linear
inpylops.signalprocessing.Seislet
operator.Added
kind
topylops.FirstDerivative
. operator to perform forward and backward (as well as centered) derivatives.Added
kind
topylops.optimization.sparsity.IRLS
solver to choose between data or model sparsity.Added possibility to use
scipy.sparse.linalg.lobpcg
inpylops.LinearOperator.eigs
andpylops.LinearOperator.cond
Added possibility to use
scipy.signal.oaconvolve
inpylops.signalprocessing.Convolve1D
.Added
NRegs
topylops.optimization.leastsquares.NormalEquationsInversion
to allow providing regularization terms directly in the form ofH^T H
.
Version 1.9.1#
Released on: 25/05/2020
Changed internal behaviour of
pylops.sparsity.OMP
whenniter_inner=0
. Automatically reverts to Matching Pursuit algorithm.Changed handling of
dtype
inpylops.signalprocessing.FFT
andpylops.signalprocessing.FFT2D
to ensure that the type of the input vector is retained when applying forward and adjoint.Added
dtype
parameter to theFFT
calls in the definition of thepylops.waveeqprocessing.MDD
operation. This ensure that the type of the real part ofG
input is enforced to the output vectors of the forward and adjoint operations.
Version 1.9.0#
Released on: 13/04/2020
Added
pylops.waveeqprocessing.Deghosting
andpylops.signalprocessing.Seislet
operatorsAdded hard and half thresholds in
pylops.optimization.sparsity.ISTA
andpylops.optimization.sparsity.FISTA
solversAdded
prescaled
input parameter topylops.waveeqprocessing.MDC
andpylops.waveeqprocessing.Marchenko
Added sinc interpolation to
pylops.signalprocessing.Interp
(kind == 'sinc'
)Modified
pylops.waveeqprocessing.marchenko.directwave
to to model analytical responses from both sources of volume injection (derivative=False
) and source of volume injection rate (derivative=True
)Added
pylops.LinearOperator.asoperator
method topylops.LinearOperator
Added
pylops.utils.signalprocessing.slope_estimate
functionFix bug in
pylops.signalprocessing.Radon2D
andpylops.signalprocessing.Radon3D
whenonthefly=True
returning the same result as whenonthefly=False
Version 1.8.0#
Released on: 12/01/2020
Added
pylops.LinearOperator.todense
method topylops.LinearOperator
Added
pylops.signalprocessing.Bilinear
,pylops.signalprocessing.DWT
, andpylops.signalprocessing.DWT2
operatorsAdded
pylops.waveeqprocessing.PressureToVelocity
,pylops.waveeqprocessing.UpDownComposition3Doperator
, andpylops.waveeqprocessing.PhaseShift
operatorsFix bug in
pylops.basicoperators.Kronecker
(see PyLops/pylops#125)
Version 1.7.0#
Released on: 10/11/2019
Added
pylops.Gradient
,pylops.Sum
,pylops.FirstDirectionalDerivative
, andpylops.SecondDirectionalDerivative
operatorsAdded
pylops.LinearOperator._ColumnLinearOperator
private operatorAdded possibility to directly mix Linear operators and numpy/scipy 2d arrays in
pylops.VStack
andpylops.HStack
andpylops.BlockDiag
operatorsAdded
pylops.optimization.sparsity.OMP
solver
Version 1.6.0#
Released on: 10/08/2019
Added
pylops.signalprocessing.ConvolveND
operatorAdded
pylops.utils.signalprocessing.nonstationary_convmtx
to create matrix for non-stationary convolutionAdded possibility to perform seismic modelling (and inversion) with non-stationary wavelet in
pylops.avo.poststack.PoststackLinearModelling
Create private methods for
pylops.Block
,pylops.avo.poststack.PoststackLinearModelling
,pylops.waveeqprocessing.MDC
to allow calling different operators (e.g., from pylops-distributed or pylops-gpu) within the method
Version 1.5.0#
Released on: 30/06/2019
Added
conj
method topylops.LinearOperator
Added
pylops.Kronecker
,pylops.Roll
, andpylops.Transpose
operatorsAdded
pylops.signalprocessing.Fredholm1
operatorAdded
pylops.optimization.sparsity.SPGL1
andpylops.optimization.sparsity.SplitBregman
solversSped up
pylops.signalprocessing.Convolve1D
usingscipy.signal.fftconvolve
for multi-dimensional signalsChanges in implementation of
pylops.waveeqprocessing.MDC
andpylops.waveeqprocessing.Marchenko
to take advantage of primitives operatorsAdded
epsRL1
option topylops.avo.poststack.PoststackInversion
andpylops.avo.prestack.PrestackInversion
to include TV-regularization terms by means ofpylops.optimization.sparsity.SplitBregman
solver
Version 1.4.0#
Released on: 01/05/2019
Added
numba
engine topylops.Spread
andpylops.signalprocessing.Radon2D
operatorsAdded
pylops.signalprocessing.Radon3D
operatorAdded
pylops.signalprocessing.Sliding2D
andpylops.signalprocessing.Sliding3D
operatorsAdded
pylops.signalprocessing.FFTND
operatorAdded
pylops.signalprocessing.Radon3D
operatorAdded
niter
option topylops.LinearOperator.eigs
methodAdded
show
option topylops.optimization.sparsity.ISTA
andpylops.optimization.sparsity.FISTA
solversAdded
pylops.waveeqprocessing.seismicinterpolation
,pylops.waveeqprocessing.waveeqdecomposition
andpylops.waveeqprocessing.lsm
submodulesAdded tests for
engine
in various operatorsAdded documentation regarding usage of
pylops
Docker container
Version 1.3.0#
Released on: 24/02/2019
Added
fftw
engine topylops.signalprocessing.FFT
operatorAdded
pylops.optimization.sparsity.ISTA
andpylops.optimization.sparsity.FISTA
sparse solversAdded possibility to broadcast (handle multi-dimensional arrays) to
pylops.Diagonal
andpylops.Restriction
operatorsAdded
pylops.signalprocessing.Interp
operatorAdded
pylops.Spread
operatorAdded
pylops.signalprocessing.Radon2D
operator
Version 1.2.0#
Released on: 13/01/2019
Added
pylops.LinearOperator.eigs
andpylops.LinearOperator.cond
methods to estimate estimate eigenvalues and conditioning number using scipy wrapping of ARPACKModified default
dtype
for all operators to befloat64
(orcomplex128
) to be consistent with default dtypes used by numpy (and scipy) for real and complex floating point numbers.Added
pylops.Flip
operatorAdded
pylops.Symmetrize
operatorAdded
pylops.Block
operatorAdded
pylops.Regression
operator performing polynomial regression and modifiedpylops.LinearRegression
to be a simple wrapper ofpylops.Regression
whenorder=1
Modified
pylops.MatrixMult
operator to work with both numpy ndarrays and scipy sparse matricesAdded
pylops.avo.prestack.PrestackInversion
routineAdded possibility to have a data weight via
Weight
input parameter topylops.optimization.leastsquares.NormalEquationsInversion
andpylops.optimization.leastsquares.RegularizedInversion
solversAdded
pylops.optimization.sparsity.IRLS
solver
Version 1.1.0#
Released on: 13/12/2018
Added
pylops.CausalIntegration
operator
Version 1.0.1#
Released on: 09/12/2018
Changed module from
lops
topylops
for consistency with library name (and pip install).Removed quickplots from utilities and
matplotlib
from requirements of PyLops.
Version 1.0.0#
Released on: 04/12/2018
First official release.