Changelog#

Version 2.2.0#

Released on: 11/11/2023

  • Added pylops.signalprocessing.NonStationaryConvolve3D operator

  • Added nd-array capabilities to pylops.basicoperators.Identity and pylops.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 ambiguous rmatvec (pylops.basicoperators.Block, pylops.basicoperators.Bilinear, pylops.basicoperators.BlockDiag, pylops.basicoperators.HStack, pylops.basicoperators.MatrixMult, pylops.basicoperators.VStack, and pylops.basicoperators.Zero)

  • Improved dynamic mode of pylops.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

Version 2.1.0#

Released on: 17/03/2023

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

Documentation

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, 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.

  • 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 arrays

  • Added forward kind to pylops.SecondDerivative and pylops.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

Version 1.16.0#

Released on: 11/12/2021

  • Added pylops.utils.estimators submodule for trace estimation

  • Added x0 in pylops.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 in pylops.signalprocessing.Radon2D and pylops.signalprocessing.Radon3D to allow for uncentered spatial axes

  • Fixed _rmatvec for explicit in pylops.LinearOperator._ColumnLinearOperator

Version 1.15.0#

Released on: 23/10/2021

Version 1.14.0#

Released on: 09/07/2021

  • Added pylops.optimization.solver.lsqr solver

  • Added utility routine pylops.utils.scalability_test for scalability tests when using multiprocessing

  • Added pylops.avo.avo.ps AVO modelling option and restructured pylops.avo.prestack.PrestackLinearModelling to allow passing any function handle that can perform AVO modelling apart from those directly available

  • Added R-linear operators (when setting the property clinear=False of a linear operator). pylops.basicoperators.Real, pylops.basicoperators.Imag, and pylops.basicoperators.Conj

  • Added possibility to run operators pylops.basicoperators.HStack, pylops.basicoperators.VStack, pylops.basicoperators.Block pylops.basicoperators.BlockDiag, and pylops.signalprocessing.Sliding3D using multiprocessing

  • Added dtype to vector X when using scipy.sparse.linalg.lobpcg in eigs method of pylops.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 and pylops.optimization.solver.cgls to be L2 norms of residuals

  • Fixed 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

Version 1.12.0#

Released on: 22/11/2020

Version 1.11.1#

Released on: 24/10/2020

Version 1.11.0#

Released on: 24/10/2020

  • Added pylops.signalprocessing.ChirpRadon2D and pylops.signalprocessing.ChirpRadon3D operators.

  • Fixed bug in the inferred dimensions for regularization data creation in pylops.optimization.leastsquares.NormalEquationsInversion, pylops.optimization.leastsquares.RegularizedInversion, and pylops.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

Version 1.9.1#

Released on: 25/05/2020

  • Changed internal behaviour of pylops.sparsity.OMP when niter_inner=0. Automatically reverts to Matching Pursuit algorithm.

  • Changed handling of dtype in pylops.signalprocessing.FFT and pylops.signalprocessing.FFT2D to ensure that the type of the input vector is retained when applying forward and adjoint.

  • Added dtype parameter to the FFT calls in the definition of the pylops.waveeqprocessing.MDD operation. This ensure that the type of the real part of G input is enforced to the output vectors of the forward and adjoint operations.

Version 1.9.0#

Released on: 13/04/2020

Version 1.8.0#

Released on: 12/01/2020

Version 1.7.0#

Released on: 10/11/2019

Version 1.6.0#

Released on: 10/08/2019

Version 1.5.0#

Released on: 30/06/2019

Version 1.4.0#

Released on: 01/05/2019

Version 1.3.0#

Released on: 24/02/2019

Version 1.2.0#

Released on: 13/01/2019

  • Added pylops.LinearOperator.eigs and pylops.LinearOperator.cond methods to estimate estimate eigenvalues and conditioning number using scipy wrapping of ARPACK

  • Modified default dtype for all operators to be float64 (or complex128) to be consistent with default dtypes used by numpy (and scipy) for real and complex floating point numbers.

  • Added pylops.Flip operator

  • Added pylops.Symmetrize operator

  • Added pylops.Block operator

  • Added pylops.Regression operator performing polynomial regression and modified pylops.LinearRegression to be a simple wrapper of pylops.Regression when order=1

  • Modified pylops.MatrixMult operator to work with both numpy ndarrays and scipy sparse matrices

  • Added pylops.avo.prestack.PrestackInversion routine

  • Added possibility to have a data weight via Weight input parameter to pylops.optimization.leastsquares.NormalEquationsInversion and pylops.optimization.leastsquares.RegularizedInversion solvers

  • Added pylops.optimization.sparsity.IRLS solver

Version 1.1.0#

Released on: 13/12/2018

Version 1.0.1#

Released on: 09/12/2018

  • Changed module from lops to pylops 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.