def test_PoststackLinearModelling1d(par): """Dot-test, comparison of dense vs lop implementation and inversion for PoststackLinearModelling in 1d with stationary wavelet """ # Dense PPop_dense = PoststackLinearModelling(wav, nt0=nt0, explicit=True) assert dottest(PPop_dense, nt0, nt0, tol=1e-4) # Linear operator PPop = PoststackLinearModelling(wav, nt0=nt0, explicit=False) assert dottest(PPop, nt0, nt0, tol=1e-4) # Compare data d = PPop * m.flatten() d_dense = PPop_dense * m.T.flatten() assert_array_almost_equal(d, d_dense, decimal=4) # Inversion for explicit in [True, False]: if par['epsR'] is None: dict_inv = {} else: dict_inv = dict(damp=0 if par['epsI'] is None else par['epsI'], iter_lim=80) minv = PoststackInversion(d, wav, m0=mback, explicit=explicit, epsR=par['epsR'], epsI=par['epsI'], simultaneous=par['simultaneous'], **dict_inv)[0] assert np.linalg.norm(m - minv) / np.linalg.norm(minv) < 1e-2
def test_PoststackLinearModelling2d(par): """Dot-test and inversion for PoststackLinearModelling in 2d """ PPop = PoststackLinearModelling(wav, nt0=nz, ndims=nx, explicit=par['explicit']) assert dottest(PPop, nz * nx, nz * nx, tol=1e-4) # Data d = (PPop * m2d.flatten()).reshape(nz, nx) # Inversion if par['explicit'] and not par['simultaneous'] and par['epsR'] is None: dict_inv = {} elif par['explicit'] and not par['simultaneous'] and par[ 'epsR'] is not None: dict_inv = dict(damp=0 if par['epsI'] is None else par['epsI'], iter_lim=80) else: dict_inv = dict(damp=0 if par['epsI'] is None else par['epsI'], iter_lim=80) minv2d = PoststackInversion(d, wav, m0=mback2d, explicit=par['explicit'], epsR=par['epsR'], epsI=par['epsI'], simultaneous=par['simultaneous'], **dict_inv)[0] assert np.linalg.norm(m2d - minv2d) / np.linalg.norm(minv2d) < 2e-1
def test_PoststackLinearModelling1d(par): """Dot-test and inversion for PoststackLinearModelling in 1d """ PPop = PoststackLinearModelling(wav, nt0=nt0, explicit=par['explicit']) print(PPop) print(nt0) assert dottest(PPop, nt0, nt0, tol=1e-4) # Data d = PPop * m print(d.shape) # Inversion if par['epsR'] is None: dict_inv = {} else: dict_inv = dict(damp=0 if par['epsI'] is None else par['epsI'], iter_lim=80) minv = PoststackInversion(d, wav, m0=mback, explicit=par['explicit'], epsR=par['epsR'], epsI=par['epsI'], simultaneous=par['simultaneous'], **dict_inv)[0] assert np.linalg.norm(m - minv) / np.linalg.norm(minv) < 1e-2
def test_PoststackLinearModelling2d(par): """Dot-test and inversion for PoststackLinearModelling in 2d""" # Dense PPop_dense = PoststackLinearModelling(wav, nt0=nz, spatdims=nx, explicit=True) assert dottest(PPop_dense, nz * nx, nz * nx, tol=1e-4) # Linear operator PPop = PoststackLinearModelling(wav, nt0=nz, spatdims=nx, explicit=False) assert dottest(PPop, nz * nx, nz * nx, tol=1e-4) # Compare data d = (PPop * m2d.ravel()).reshape(nz, nx) d_dense = (PPop_dense * m2d.ravel()).reshape(nz, nx) assert_array_almost_equal(d, d_dense, decimal=4) # Inversion for explicit in [True, False]: if explicit and not par["simultaneous"] and par["epsR"] is None: dict_inv = {} elif explicit and not par["simultaneous"] and par["epsR"] is not None: dict_inv = dict(damp=0 if par["epsI"] is None else par["epsI"], iter_lim=10) else: dict_inv = dict(damp=0 if par["epsI"] is None else par["epsI"], iter_lim=10) minv2d = PoststackInversion(d, wav, m0=mback2d, explicit=explicit, epsI=par["epsI"], epsR=par["epsR"], epsRL1=par["epsRL1"], simultaneous=par["simultaneous"], **dict_inv)[0] assert np.linalg.norm(m2d - minv2d) / np.linalg.norm(m2d) < 1e-1