コード例 #1
0
def test_print_data(capsys):
    # Test full with min amplitude with case 2
    dat1 = DATA['case2'][()]
    fdesign.print_result(dat1[1], dat1[2])
    out, _ = capsys.readouterr()
    assert "Filter length   : 201" in out
    assert "Best filter" in out
    assert "> Min field     : 1.79577e-11" in out
    assert "> Spacing       : 0.0641" in out
    assert "> Shift         : -1.2847" in out
    assert "> Base min/max  : 4.552335e-04 / 1.682246e+02" in out

    # Test full with max r with case 3
    dat2 = DATA['case4'][()]
    fdesign.print_result(dat2[1], dat2[2])
    out, _ = capsys.readouterr()
    assert "Filter length   : 201" in out
    assert "Best filter" in out
    assert "> Max r         : 21.5443" in out
    assert "> Spacing       : 0.0641" in out
    assert "> Shift         : -1.2847" in out
    assert "> Base min/max  : 4.552335e-04 / 1.682246e+02" in out

    # Test filter only with key_201_2009()
    fdesign.print_result(filters.key_201_2009())
    out, _ = capsys.readouterr()
    assert "Filter length   : 201" in out
    assert "Best filter" in out
    assert "> Spacing       : 0.074" in out
    assert "> Shift         : 1.509903313e-14" in out
    assert "> Base min/max  : 6.112528e-04 / 1.635984e+03" in out
コード例 #2
0
ファイル: EM1D.py プロジェクト: ligang0309/simpegEM1D
    def __init__(self, mesh, **kwargs):
        Problem.BaseProblem.__init__(self, mesh, **kwargs)

        if self.filter_type == 'key_201':
            if self.verbose:
                print(">> Use Key 201 filter for Hankel Tranform")
            fht = filters.key_201_2009()
            self.WT0 = np.empty(201, complex)
            self.WT1 = np.empty(201, complex)
            self.YBASE = np.empty(201, complex)
            self.WT0 = fht.j0
            self.WT1 = fht.j1
            self.YBASE = fht.base
        elif self.filter_type == 'key_101':
            if self.verbose:
                print(">> Use Key 101 filter for Hankel Tranform")
            fht = filters.key_101_2009()
            self.WT0 = np.empty(101, complex)
            self.WT1 = np.empty(101, complex)
            self.YBASE = np.empty(101, complex)
            self.WT0 = fht.j0
            self.WT1 = fht.j1
            self.YBASE = fht.base
        elif self.filter_type == 'anderson_801':
            if self.verbose:
                print(">> Use Anderson 801 filter for Hankel Tranform")
            fht = filters.anderson_801_1982()
            self.WT0 = np.empty(801, complex)
            self.WT1 = np.empty(801, complex)
            self.YBASE = np.empty(801, complex)
            self.WT0 = fht.j0
            self.WT1 = fht.j1
            self.YBASE = fht.base
        else:
            raise NotImplementedError()
コード例 #3
0
ファイル: test_fdesign.py プロジェクト: ruboerner/empymod
 def test_plot_inversion1(self):
     # plot_inversion minimum amplitude
     f = fdesign.j0_1(5)
     filt = filters.key_201_2009()
     n = filt.base.size
     a = filt.base[-1]
     b = filt.base[-2]
     spacing = np.log(a) - np.log(b)
     shift = np.log(a) - spacing * (n // 2)
     cvar = 'amp'
     r = np.logspace(0, 1.5, 100)
     f.rhs = f.rhs(r)
     k = filt.base / r[:, None]
     rhs = np.dot(f.lhs(k), filt.j0) / r
     rel_error = np.abs((rhs - f.rhs) / f.rhs)
     imin = np.where(rel_error > 0.01)[0][0]
     fdesign._plot_inversion(f, rhs, r, k, imin, spacing, shift, cvar)
     return plt.gcf()
コード例 #4
0
ファイル: test_fdesign.py プロジェクト: ruboerner/empymod
 def test_plot_inversion2(self):
     # plot_inversion maximum r
     f = fdesign.empy_hankel('j2', 50, 100, 1, 1)
     filt = filters.key_201_2009()
     n = filt.base.size
     a = filt.base[-1]
     b = filt.base[-2]
     spacing = np.log(a) - np.log(b)
     shift = np.log(a) - spacing * (n // 2)
     cvar = 'r'
     r = np.logspace(1, 4.5, 100)
     f.rhs = f.rhs(r)
     k = filt.base / r[:, None]
     lhs = f.lhs(k)
     rhs0 = np.dot(lhs[0], filt.j0) / r
     rhs1 = np.dot(lhs[1], filt.j1) / r**2
     rhs = rhs0 + rhs1
     rel_error = np.abs((rhs - f.rhs) / f.rhs)
     imin = np.where(rel_error > 0.01)[0][0]
     fdesign._plot_inversion(f, rhs, r, k, imin, spacing, shift, cvar)
     return plt.gcf()
コード例 #5
0
def test_j01():
    # Check with Key201-filter if analytical transform pairs for J0 and J1 are
    # correct
    filt = filters.key_201_2009()
    for j01 in ['1', '2', '3', '4', '5']:
        if j01 == '1':
            r = np.logspace(0, 1.15, 100)
        else:
            r = np.logspace(0, 3, 100)

        k = filt.base / r[:, None]
        tp0 = getattr(fdesign, 'j0_' + j01)(3)
        tp1 = getattr(fdesign, 'j1_' + j01)(3)

        rhs1a = tp0.rhs(r)
        rhs1c = np.dot(tp0.lhs(k), filt.j0) / r

        assert_allclose(rhs1a, rhs1c, rtol=1e-3)

        rhs2a = tp1.rhs(r)
        rhs2c = np.dot(tp1.lhs(k), filt.j1) / r

        assert_allclose(rhs2a, rhs2c, rtol=1e-3)
コード例 #6
0
ファイル: test_utils.py プロジェクト: V107/empymod
def test_check_hankel(capsys):
    # # DLF # #
    # verbose
    ht, htarg = utils.check_hankel('dlf', {}, 4)
    out, _ = capsys.readouterr()
    assert "   Hankel          :  DLF (Fast Hankel Transform)\n     > F" in out
    assert "     > DLF type    :  Standard" in out
    assert ht == 'dlf'
    assert htarg['dlf'].name == filters.key_201_2009().name
    assert htarg['pts_per_dec'] == 0

    # provide filter-string and unknown parameter
    _, htarg = utils.check_hankel('dlf', {'dlf': 'key_201_2009', 'abc': 0}, 1)
    out, _ = capsys.readouterr()
    assert htarg['dlf'].name == filters.key_201_2009().name
    assert htarg['pts_per_dec'] == 0
    assert "WARNING :: Unknown htarg {'abc': 0} for method 'dlf'" in out

    # provide filter-instance
    _, htarg = utils.check_hankel('dlf', {'dlf': filters.kong_61_2007()}, 0)
    assert htarg['dlf'].name == filters.kong_61_2007().name
    assert htarg['pts_per_dec'] == 0

    # provide pts_per_dec
    _, htarg = utils.check_hankel('dlf', {'pts_per_dec': -1}, 3)
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Lagged Convolution" in out
    assert htarg['dlf'].name == filters.key_201_2009().name
    assert htarg['pts_per_dec'] == -1

    # provide filter-string and pts_per_dec
    _, htarg = utils.check_hankel('dlf', {
        'dlf': 'key_201_2009',
        'pts_per_dec': 20
    }, 4)
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Splined, 20.0 pts/dec" in out
    assert htarg['dlf'].name == filters.key_201_2009().name
    assert htarg['pts_per_dec'] == 20

    # Assert it can be called repetitively
    _, _ = capsys.readouterr()
    ht, htarg = utils.check_hankel('dlf', {}, 1)
    _, _ = utils.check_hankel(ht, htarg, 1)
    out, _ = capsys.readouterr()
    assert out == ""

    # # QWE # #
    # verbose
    ht, htarg = utils.check_hankel('qwe', {}, 4)
    out, _ = capsys.readouterr()
    outstr = "   Hankel          :  Quadrature-with-Extrapolation\n     > rtol"
    assert outstr in out
    assert ht == 'qwe'
    assert htarg['rtol'] == 1e-12
    assert htarg['atol'] == 1e-30
    assert htarg['nquad'] == 51
    assert htarg['maxint'] == 100
    assert htarg['pts_per_dec'] == 0
    assert htarg['diff_quad'] == 100
    assert htarg['a'] is None
    assert htarg['b'] is None
    assert htarg['limit'] is None

    # limit
    _, htarg = utils.check_hankel('qwe', {'limit': 30}, 0)
    assert htarg['rtol'] == 1e-12
    assert htarg['atol'] == 1e-30
    assert htarg['nquad'] == 51
    assert htarg['maxint'] == 100
    assert htarg['pts_per_dec'] == 0
    assert htarg['diff_quad'] == 100
    assert htarg['a'] is None
    assert htarg['b'] is None
    assert htarg['limit'] == 30

    # all arguments
    _, htarg = utils.check_hankel(
        'qwe', {
            'rtol': 1e-3,
            'atol': 1e-4,
            'nquad': 31,
            'maxint': 20,
            'pts_per_dec': 30,
            'diff_quad': 200,
            'a': 1e-6,
            'b': 160,
            'limit': 30
        }, 3)
    out, _ = capsys.readouterr()
    assert "     > a     (quad):  1e-06" in out
    assert "     > b     (quad):  160" in out
    assert "     > limit (quad):  30" in out
    assert htarg['rtol'] == 1e-3
    assert htarg['atol'] == 1e-4
    assert htarg['nquad'] == 31
    assert htarg['maxint'] == 20
    assert htarg['pts_per_dec'] == 30
    assert htarg['diff_quad'] == 200
    assert htarg['a'] == 1e-6
    assert htarg['b'] == 160
    assert htarg['limit'] == 30

    # Assert it can be called repetitively
    _, _ = capsys.readouterr()
    ht, htarg = utils.check_hankel('qwe', {}, 1)
    _, _ = utils.check_hankel(ht, htarg, 1)
    out, _ = capsys.readouterr()
    assert out == ""

    # # QUAD # #
    # verbose
    ht, htarg = utils.check_hankel('quad', {}, 4)
    out, _ = capsys.readouterr()
    outstr = "   Hankel          :  Quadrature\n     > rtol"
    assert outstr in out
    assert ht == 'quad'
    assert htarg['rtol'] == 1e-12
    assert htarg['atol'] == 1e-20
    assert htarg['limit'] == 500
    assert htarg['a'] == 1e-6
    assert htarg['b'] == 0.1
    assert htarg['pts_per_dec'] == 40

    # pts_per_dec
    _, htarg = utils.check_hankel('quad', {'pts_per_dec': 100}, 0)
    assert htarg['rtol'] == 1e-12
    assert htarg['atol'] == 1e-20
    assert htarg['limit'] == 500
    assert htarg['a'] == 1e-6
    assert htarg['b'] == 0.1
    assert htarg['pts_per_dec'] == 100
    # all arguments
    _, htarg = utils.check_hankel(
        'quad', {
            'rtol': 1e-3,
            'atol': 1e-4,
            'limit': 100,
            'a': 1e-10,
            'b': 200,
            'pts_per_dec': 50
        }, 0)
    assert htarg['rtol'] == 1e-3
    assert htarg['atol'] == 1e-4
    assert htarg['limit'] == 100
    assert htarg['a'] == 1e-10
    assert htarg['b'] == 200
    assert htarg['pts_per_dec'] == 50

    # Assert it can be called repetitively
    _, _ = capsys.readouterr()
    ht, htarg = utils.check_hankel('quad', {}, 1)
    _, _ = utils.check_hankel(ht, htarg, 1)
    out, _ = capsys.readouterr()
    assert out == ""

    # wrong ht
    with pytest.raises(ValueError):
        utils.check_hankel('doesnotexist', {}, 1)

    # filter missing attributes
    with pytest.raises(AttributeError):
        utils.check_hankel('dlf', {'dlf': 'key_101_CosSin_2012'}, 1)
コード例 #7
0
def test_check_hankel(capsys):
    # # FHT # #
    # verbose
    ht, htarg = utils.check_hankel('fht', None, 4)
    out, _ = capsys.readouterr()
    assert "   Hankel          :  DLF (Fast Hankel Transform)\n     > F" in out
    assert "     > DLF type    :  Standard" in out
    assert ht == 'fht'
    assert htarg[0].name == filters.key_201_2009().name
    assert htarg[1] is 0

    # [filter str]
    _, htarg = utils.check_hankel('fht', 'key_201_2009', 0)
    assert htarg[0].name == filters.key_201_2009().name
    assert htarg[1] is 0
    # [filter inst]
    _, htarg = utils.check_hankel('fht', filters.kong_61_2007(), 0)
    assert htarg[0].name == filters.kong_61_2007().name
    assert htarg[1] is 0
    # ['', pts_per_dec]  :: list
    _, htarg = utils.check_hankel('fht', ['', 20], 0)
    assert htarg[0].name == filters.key_201_2009().name
    assert htarg[1] == 20
    # ['', pts_per_dec]  :: dict
    _, htarg = utils.check_hankel('fht', {'pts_per_dec': -1}, 4)
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Lagged Convolution" in out
    assert htarg[0].name == filters.key_201_2009().name
    assert htarg[1] == -1
    # [filter str, pts_per_dec]
    _, htarg = utils.check_hankel('fht', ['key_201_2009', 20], 4)
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Splined, 20 pts/dec" in out
    assert htarg[0].name == filters.key_201_2009().name
    assert htarg[1] == 20

    # # QWE # #
    # verbose
    ht, htarg = utils.check_hankel('qwe', None, 4)
    out, _ = capsys.readouterr()
    outstr = "   Hankel          :  Quadrature-with-Extrapolation\n     > rtol"
    assert outstr in out
    assert ht == 'hqwe'
    assert_allclose(htarg[:-3], [1e-12, 1e-30, 51, 100, 0, 100])
    assert htarg[-3] is None
    assert htarg[-2] is None
    assert htarg[-1] is None

    # only last argument
    _, htarg = utils.check_hankel('qwe', ['', '', '', '', '', '', '', '', 30],
                                  0)
    assert_allclose(htarg[:-3], [1e-12, 1e-30, 51, 100, 0, 100])
    assert htarg[-3] is None
    assert htarg[-2] is None
    assert htarg[-1] == 30

    # all arguments
    _, htarg = utils.check_hankel('qwe',
                                  [1e-3, 1e-4, 31, 20, 30, 200, 1e-6, 160, 30],
                                  3)
    out, _ = capsys.readouterr()
    assert "     > a     (quad):  1e-06" in out
    assert "     > b     (quad):  160" in out
    assert "     > limit (quad):  30" in out
    assert_allclose(htarg, [1e-3, 1e-4, 31, 20, 30, 200, 1e-6, 160, 30])

    # # QUAD # #
    # verbose
    ht, htarg = utils.check_hankel('quad', None, 4)
    out, _ = capsys.readouterr()
    outstr = "   Hankel          :  Quadrature\n     > rtol"
    assert outstr in out
    assert ht == 'hquad'
    assert_allclose(htarg, [1e-12, 1e-20, 500, 1e-6, 0.1, 40])

    # only last argument
    _, htarg = utils.check_hankel('quad', ['', '', '', '', '', 100], 0)
    assert_allclose(htarg, [1e-12, 1e-20, 500, 1e-6, 0.1, 100])
    # all arguments
    _, htarg = utils.check_hankel('quad', [1e-3, 1e-4, 100, 1e-10, 200, 50], 0)
    assert_allclose(htarg, [1e-3, 1e-4, 100, 1e-10, 200, 50])

    # wrong ht
    with pytest.raises(ValueError):
        utils.check_hankel('doesnotexist', None, 1)