def test_Identity(par): """Dot-test, forward and adjoint for Identity operator """ Iop = Identity(par['ny'], par['nx'], dtype=par['dtype']) assert dottest(Iop, par['ny'], par['nx'], complexflag=0 if par['imag'] == 0 else 3) x = np.ones(par['nx']) + par['imag'] * np.ones(par['nx']) y = Iop*x x1 = Iop.H*y assert_array_almost_equal(x[:min(par['ny'], par['nx'])], y[:min(par['ny'], par['nx'])], decimal=4) assert_array_almost_equal(x[:min(par['ny'], par['nx'])], x1[:min(par['ny'], par['nx'])], decimal=4)
def test_Affine(par): """Affine set projection and proximal/dual proximal of related indicator """ Op = Identity(par['nx']) b = np.random.normal(0., 1., par['nx']) aff = AffineSet(Op, b, 10) # prox tau = 2. x = np.ones(par['nx']) assert_array_almost_equal(aff.prox(x, tau), b) # prox / dualprox assert moreau(aff, x, tau)
def test_Identity_inplace(par): """Dot-test, forward and adjoint for Identity operator""" np.random.seed(10) Iop = Identity(par["ny"], par["nx"], dtype=par["dtype"], inplace=True) assert dottest(Iop, par["ny"], par["nx"], complexflag=0 if par["imag"] == 0 else 3) x = np.ones(par["nx"]) + par["imag"] * np.ones(par["nx"]) y = Iop * x x1 = Iop.H * y assert_array_almost_equal(x[:min(par["ny"], par["nx"])], y[:min(par["ny"], par["nx"])], decimal=4) assert_array_almost_equal(x[:min(par["ny"], par["nx"])], x1[:min(par["ny"], par["nx"])], decimal=4)
def test_Identity_noinplace(par): """Dot-test, forward and adjoint for Identity operator (not in place) """ np.random.seed(10) Iop = Identity(par['ny'], par['nx'], dtype=par['dtype'], inplace=False) assert dottest(Iop, par['ny'], par['nx'], complexflag=0 if par['imag'] == 0 else 3) x = np.ones(par['nx']) + par['imag'] * np.ones(par['nx']) y = Iop*x x1 = Iop.H*y assert_array_almost_equal(x[:min(par['ny'], par['nx'])], y[:min(par['ny'], par['nx'])], decimal=4) assert_array_almost_equal(x[:min(par['ny'], par['nx'])], x1[:min(par['ny'], par['nx'])], decimal=4) # change value in x and check it doesn't change in y x[0] = 10 assert x[0] != y[0]
def create_data2D(): """Create 2d dataset""" t0_plus = np.array([0.02, 0.08]) t0_minus = t0_plus + 0.04 vrms = np.array([1400.0, 1800.0]) amp = np.array([1.0, -0.6]) p2d_minus = hyperbolic2d(x, t, t0_minus, vrms, amp, wav)[1].T kx = np.fft.ifftshift(np.fft.fftfreq(parmod["nx"], parmod["dx"])) freq = np.fft.rfftfreq(parmod["nt"], parmod["dt"]) Pop = -PhaseShift(vel_sep, 2 * zrec, parmod["nt"], freq, kx) # Decomposition operator Dupop = Identity(parmod["nt"] * parmod["nx"]) + Pop p2d = Dupop * p2d_minus.ravel() p2d = p2d.reshape(parmod["nt"], parmod["nx"]) return p2d, p2d_minus
def test_Kroneker_Derivative(par): """Use Kronecker operator to apply the Derivative operator over one axis and compare with FirstDerivative(... dir=axis) """ Dop = FirstDerivative(par['ny'], sampling=1, edge=True, dtype='float32') D2op = FirstDerivative(par['ny'] * par['nx'], dims=(par['ny'], par['nx']), dir=0, sampling=1, edge=True, dtype='float32') Kop = Kronecker(Dop, Identity(par['nx'], dtype=par['dtype']), dtype=par['dtype']) x = np.zeros((par['ny'], par['nx'])) + \ par['imag']*np.zeros((par['ny'], par['nx'])) x[par['ny'] // 2, par['nx'] // 2] = 1 y = D2op * x.flatten() yk = Kop * x.flatten() assert_array_equal(y, yk)