Changelog#
Version 2.4.0#
Released on: 11/12/2024
Added
pylops.signalprocessing.FourierRadon2dandpylops.signalprocessing.FourierRadon3doperatorsAdded
pylops.PyTensorOperatoroperatorAdded
pylops.ToCupyoperatorAdded
pylops.utils.seismicevents.parabolic3dmethodFix bug in
pylops.Restrictionwhen 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.DTCWToperators.Added updatesrc method to
pylops.waveeqprocessing.AcousticWave2DAdded 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_designAdded kwargs_fft to
pylops.signalprocessing.FFTNDAdded cosinetaper to
pylops.utils.tapers.cosinetaperAdded kind to
pylops.waveeqprocessing.Deghosting.Modified all methods in
pylops.utils.backendto enable jax integrationModified implementations of
pylops.signalprocessing.Sliding1D,pylops.signalprocessing.Sliding2D,pylops.signalprocessing.Sliding3D,pylops.signalprocessing.Patch2D, andpylops.signalprocessing.Patch3Dto 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_oneshotandpylops.waveeqprocessing.AcousticWave2D._born_allshotsto avoid recreating the devito solver for each shot (and enabling internal caching…)Modified dtype of
pylops.signalprocessing.Shiftto be that of the input vector.Modified
pylops.waveeqprocessing.BlendingContinuousto 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.BlendingContinuousFixed bug in
pylops.utils.signalprocessing.dip_estimate(see PyLops/pylops#572)
Version 2.2.0#
Released on: 11/11/2023
Added
pylops.signalprocessing.NonStationaryConvolve3DoperatorAdded nd-array capabilities to
pylops.basicoperators.Identityandpylops.basicoperators.ZeroAdded second implementation in
pylops.waveeqprocessing.BlendingContinuouswhich 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.KirchhoffoperatorModified
pylops.signalprocessing.Convolve1Dto 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.NonStationaryFilters2DoperatorsAdded
pylops.waveeqprocessing.BlendingContinuous,pylops.waveeqprocessing.BlendingGroup, andpylops.waveeqprocessing.BlendingHalfoperatorsAdded kind=’datamodel’ to
pylops.optimization.cls_sparsity.IRLSImproved inner working of
pylops.waveeqprocessing.Kirchhoffoperator significantly reducing the memory usage related to storing traveltime, angle, and amplitude tables.Improved handling of haxes in
pylops.signalprocessing.Radon2Dandpylops.signalprocessing.Radon3DoperatorsAdded possibility to feed ND-arrays to
pylops.TorchOperatorRemoved
pylops.LinearOperatorinheritance and added __call__ method topylops.TorchOperatorRemoved scipy.sparse.linalg.LinearOperator and added
abc.ABCinheritance topylops.LinearOperatorAll 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/dimsdproperties. Users do not need to use.raveland.reshapeas often anymore. See the migration guide for more information.Typing annotations for several submodules (
avo,basicoperators,signalprocessing,utils,optimization,waveeqprocessing)New
pylops.TorchOperatorwraps a Pylops operator into a PyTorch functionNew
pylops.signalprocessing.Patch3Dapplies a linear operator repeatedly to patches of the model vectorEach of
pylops.signalprocessing.Sliding1D,pylops.signalprocessing.Sliding2D,pylops.signalprocessing.Sliding3D,pylops.signalprocessing.Patch2Dandpylops.signalprocessing.Patch3Dhave an associatedslidingXd_designorpatchXd_designfunctions associated with them to aid the user in designing the windowspylops.FirstDerivativeandpylops.SecondDerivative, and therefore other derivative operators which rely on the (e.g.,pylops.Gradient) support higher order stencilspylops.waveeqprocessing.Kirchhoffsubstitutespylops.waveeqprocessing.Demigrationand incorporates a variety of new functionalitiesNew
pylops.waveeqprocessing.AcousticWave2Dwraps 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.Solverclass. 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.Callbacksinterface (see e.g.,pylops.optimization.callback.MetricsCallback)Metrics such as
pylops.utils.metrics.maeandpylops.utils.metrics.mseand othersNew
pylops.utils.signalprocessing.dip_estimateestimates local dips in an image (measured in radians) in a stabler way than the oldpylops.utils.signalprocessing.dip_estimatedid for slopes.New
pylops.utils.tapers.taperndfor N-dimensional tapersNew wavelets
pylops.utils.wavelets.klauderandpylops.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.divFixed
pylops.optimization.basic.lsqr,pylops.optimization.sparsity.ISTA, andpylops.optimization.sparsity.FISTAto 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.Deghostingintroduced 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.Laplacianto N-dimensional arraysAdded forward kind to
pylops.SecondDerivativeandpylops.LaplacianAdded chirp-sliding kind to
pylops.waveeqprocessing.seismicinterpolation.SeismicInterpolationFixed 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.describemethodAdded
fftenginetopylops.waveeqprocessing.MarchenkoAdded
ifftshift_beforeandfftshift_afteroptional input parameters inpylops.signalprocessing.FFTAdded
normoptional input parameter topylops.signalprocessing.FFT2Dandpylops.signalprocessing.FFTNDAdded
scipybackend topylops.signalprocessing.FFTandpylops.signalprocessing.FFT2Dandpylops.signalprocessing.FFTNDAdded
epsoptional input parameter inpylops.utils.signalprocessing.slope_estimateAdded pre-commit hooks
Improved pre-commit hooks
Vectorized
pylops.utils.signalprocessing.slope_estimateHandlexd
nfft<ntcase inpylops.signalprocessing.FFTandpylops.signalprocessing.FFT2Dandpylops.signalprocessing.FFTNDIntroduced automatic casting of dtype in
pylops.MatrixMultImproved documentation and definition of optinal parameters of
pylops.SpreadMajor clean up of documentation and mathematical formulas
Major refractoring of the inner structure of
pylops.signalprocessing.FFTandpylops.signalprocessing.FFT2Dandpylops.signalprocessing.FFTNDReduced warnings in test suite
Reduced computational time of
test_wavedecompositionin the test suiteFixed bug in
pylops.signalprocessing.Sliding1D,pylops.signalprocessing.Sliding2Dandpylops.signalprocessing.Sliding3Dwhere thedtypeof the Restriction operator is inffered fromOpFixed bug in
pylops.signalprocessing.Radon2Dandpylops.signalprocessing.Radon3Dwhen using centered spatial axesFixed scaling in
pylops.signalprocessing.FFTwithreal=Trueto pass the dot-test
Version 1.16.0#
Released on: 11/12/2021
Added
pylops.utils.estimatorssubmodule for trace estimationAdded x0 in
pylops.optimization.sparsity.ISTAandpylops.optimization.sparsity.FISTAto handle non-zero initial guessModified
pylops.optimization.sparsity.ISTAandpylops.optimization.sparsity.FISTAto handle multiple right hand sidesModified creation of haxis in
pylops.signalprocessing.Radon2Dandpylops.signalprocessing.Radon3Dto allow for uncentered spatial axesFixed _rmatvec for explicit in
pylops.LinearOperator._ColumnLinearOperator
Version 1.15.0#
Released on: 23/10/2021
Added
pylops.signalprocessing.Shiftoperator.Added option to choose derivative kind in
pylops.avo.poststack.PoststackInversionandpylops.avo.prestack.PrestackInversion.Improved efficiency of adjoint of
pylops.signalprocessing.Fredholm1by applying complex conjugation to the vectors.Added vsvp to
pylops.avo.prestack.PrestackInversionallowing to use user defined VS/VP ratio.Added kind to
pylops.basicoperators.CausalIntegrationallowingfull,half, ortrapezoidalintegration.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.lsqrsolverAdded utility routine
pylops.utils.scalability_testfor scalability tests when usingmultiprocessingAdded
pylops.avo.avo.psAVO modelling option and restructuredpylops.avo.prestack.PrestackLinearModellingto 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.ConjAdded possibility to run operators
pylops.basicoperators.HStack,pylops.basicoperators.VStack,pylops.basicoperators.Blockpylops.basicoperators.BlockDiag, andpylops.signalprocessing.Sliding3DusingmultiprocessingAdded dtype to vector X when using
scipy.sparse.linalg.lobpcgin eigs method ofpylops.LinearOperatorUse kind=forward fot FirstDerivative in
pylops.avo.poststack.PoststackInversioninversion when dealing with L1 regularized inversion as it makes the inverse problem more stable (no ringing in solution)Changed cost in
pylops.optimization.solver.cgandpylops.optimization.solver.cglsto be L2 norms of residualsFixed
pylops.utils.dottest.dottestfor 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.Sliding1Dandpylops.signalprocessing.Patch2DoperatorsAdded
pylops.basicoperators.MemoizeOperatoroperatorAdded decay and analysis option in
pylops.optimization.sparsity.ISTAandpylops.optimization.sparsity.FISTAsolversAdded toreal and toimag methods to
pylops.LinearOperatorMake nr and nc optional in
pylops.utils.dottest.dottestFixed complex check in
pylops.basicoperators.MatrixMultwhen working with complex-valued cupy arraysFixed bug in data reshaping in check in
pylops.avo.prestack.PrestackInversionFixed 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
eigsandsolversubmodules topylops.optimizationAdded
depsandbackendsubmodules topylops.utilsFixed 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
pyfttwwhen not available inpylops.signalprocessing.ChirpRadon3D
Version 1.11.0#
Released on: 24/10/2020
Added
pylops.signalprocessing.ChirpRadon2Dandpylops.signalprocessing.ChirpRadon3Doperators.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.HStackto allow automatic inference from dtypes of input operator.Modified dtype of
pylops.waveeqprocessing.Marchenkooperator to ensure that outputs of forward and adjoint are real arrays.Reverted to previous complex-friendly implementation of
pylops.optimization.sparsity._softthresholdto avoid division by 0.
Version 1.10.0#
Released on: 13/08/2020
Added
tosparsemethod topylops.LinearOperator.Added
kind=linearinpylops.signalprocessing.Seisletoperator.Added
kindtopylops.FirstDerivative. operator to perform forward and backward (as well as centered) derivatives.Added
kindtopylops.optimization.sparsity.IRLSsolver to choose between data or model sparsity.Added possibility to use
scipy.sparse.linalg.lobpcginpylops.LinearOperator.eigsandpylops.LinearOperator.condAdded possibility to use
scipy.signal.oaconvolveinpylops.signalprocessing.Convolve1D.Added
NRegstopylops.optimization.leastsquares.NormalEquationsInversionto 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.OMPwhenniter_inner=0. Automatically reverts to Matching Pursuit algorithm.Changed handling of
dtypeinpylops.signalprocessing.FFTandpylops.signalprocessing.FFT2Dto ensure that the type of the input vector is retained when applying forward and adjoint.Added
dtypeparameter to theFFTcalls in the definition of thepylops.waveeqprocessing.MDDoperation. This ensure that the type of the real part ofGinput is enforced to the output vectors of the forward and adjoint operations.
Version 1.9.0#
Released on: 13/04/2020
Added
pylops.waveeqprocessing.Deghostingandpylops.signalprocessing.SeisletoperatorsAdded hard and half thresholds in
pylops.optimization.sparsity.ISTAandpylops.optimization.sparsity.FISTAsolversAdded
prescaledinput parameter topylops.waveeqprocessing.MDCandpylops.waveeqprocessing.MarchenkoAdded sinc interpolation to
pylops.signalprocessing.Interp(kind == 'sinc')Modified
pylops.waveeqprocessing.marchenko.directwaveto to model analytical responses from both sources of volume injection (derivative=False) and source of volume injection rate (derivative=True)Added
pylops.LinearOperator.asoperatormethod topylops.LinearOperatorAdded
pylops.utils.signalprocessing.slope_estimatefunctionFix bug in
pylops.signalprocessing.Radon2Dandpylops.signalprocessing.Radon3Dwhenonthefly=Truereturning the same result as whenonthefly=False
Version 1.8.0#
Released on: 12/01/2020
Added
pylops.LinearOperator.todensemethod topylops.LinearOperatorAdded
pylops.signalprocessing.Bilinear,pylops.signalprocessing.DWT, andpylops.signalprocessing.DWT2operatorsAdded
pylops.waveeqprocessing.PressureToVelocity,pylops.waveeqprocessing.UpDownComposition3Doperator, andpylops.waveeqprocessing.PhaseShiftoperatorsFix 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.SecondDirectionalDerivativeoperatorsAdded
pylops.LinearOperator._ColumnLinearOperatorprivate operatorAdded possibility to directly mix Linear operators and numpy/scipy 2d arrays in
pylops.VStackandpylops.HStackandpylops.BlockDiagoperatorsAdded
pylops.optimization.sparsity.OMPsolver
Version 1.6.0#
Released on: 10/08/2019
Added
pylops.signalprocessing.ConvolveNDoperatorAdded
pylops.utils.signalprocessing.nonstationary_convmtxto create matrix for non-stationary convolutionAdded possibility to perform seismic modelling (and inversion) with non-stationary wavelet in
pylops.avo.poststack.PoststackLinearModellingCreate private methods for
pylops.Block,pylops.avo.poststack.PoststackLinearModelling,pylops.waveeqprocessing.MDCto 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
conjmethod topylops.LinearOperatorAdded
pylops.Kronecker,pylops.Roll, andpylops.TransposeoperatorsAdded
pylops.signalprocessing.Fredholm1operatorAdded
pylops.optimization.sparsity.SPGL1andpylops.optimization.sparsity.SplitBregmansolversSped up
pylops.signalprocessing.Convolve1Dusingscipy.signal.fftconvolvefor multi-dimensional signalsChanges in implementation of
pylops.waveeqprocessing.MDCandpylops.waveeqprocessing.Marchenkoto take advantage of primitives operatorsAdded
epsRL1option topylops.avo.poststack.PoststackInversionandpylops.avo.prestack.PrestackInversionto include TV-regularization terms by means ofpylops.optimization.sparsity.SplitBregmansolver
Version 1.4.0#
Released on: 01/05/2019
Added
numbaengine topylops.Spreadandpylops.signalprocessing.Radon2DoperatorsAdded
pylops.signalprocessing.Radon3DoperatorAdded
pylops.signalprocessing.Sliding2Dandpylops.signalprocessing.Sliding3DoperatorsAdded
pylops.signalprocessing.FFTNDoperatorAdded
pylops.signalprocessing.Radon3DoperatorAdded
niteroption topylops.LinearOperator.eigsmethodAdded
showoption topylops.optimization.sparsity.ISTAandpylops.optimization.sparsity.FISTAsolversAdded
pylops.waveeqprocessing.seismicinterpolation,pylops.waveeqprocessing.waveeqdecompositionandpylops.waveeqprocessing.lsmsubmodulesAdded tests for
enginein various operatorsAdded documentation regarding usage of
pylopsDocker container
Version 1.3.0#
Released on: 24/02/2019
Added
fftwengine topylops.signalprocessing.FFToperatorAdded
pylops.optimization.sparsity.ISTAandpylops.optimization.sparsity.FISTAsparse solversAdded possibility to broadcast (handle multi-dimensional arrays) to
pylops.Diagonalandpylops.RestrictionoperatorsAdded
pylops.signalprocessing.InterpoperatorAdded
pylops.SpreadoperatorAdded
pylops.signalprocessing.Radon2Doperator
Version 1.2.0#
Released on: 13/01/2019
Added
pylops.LinearOperator.eigsandpylops.LinearOperator.condmethods to estimate estimate eigenvalues and conditioning number using scipy wrapping of ARPACKModified default
dtypefor 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.FlipoperatorAdded
pylops.SymmetrizeoperatorAdded
pylops.BlockoperatorAdded
pylops.Regressionoperator performing polynomial regression and modifiedpylops.LinearRegressionto be a simple wrapper ofpylops.Regressionwhenorder=1Modified
pylops.MatrixMultoperator to work with both numpy ndarrays and scipy sparse matricesAdded
pylops.avo.prestack.PrestackInversionroutineAdded possibility to have a data weight via
Weightinput parameter topylops.optimization.leastsquares.NormalEquationsInversionandpylops.optimization.leastsquares.RegularizedInversionsolversAdded
pylops.optimization.sparsity.IRLSsolver
Version 1.1.0#
Released on: 13/12/2018
Added
pylops.CausalIntegrationoperator
Version 1.0.1#
Released on: 09/12/2018
Changed module from
lopstopylopsfor consistency with library name (and pip install).Removed quickplots from utilities and
matplotlibfrom requirements of PyLops.
Version 1.0.0#
Released on: 04/12/2018
First official release.