示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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]
示例#5
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
示例#6
0
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)