Пример #1
0
def test_get_spline_values():                            # 9. get_spline_values
    # Check one example
    filt = filters.key_81_CosSin_2009()
    out, new_inp = transform.get_spline_values(filt, np.arange(1, 6), -1)
    # Expected values
    oout = np.array([[6.70925256e-05, 8.19469958e-05, 1.00090287e-04,
                      1.22250552e-04, 1.49317162e-04, 1.82376393e-04,
                      2.22755030e-04, 2.72073608e-04, 3.32311455e-04,
                      4.05886127e-04, 4.95750435e-04, 6.05510949e-04,
                      7.39572743e-04, 9.03316189e-04, 1.10331288e-03,
                      1.34758940e-03, 1.64594941e-03, 2.01036715e-03,
                      2.45546798e-03, 2.99911536e-03, 3.66312778e-03,
                      4.47415437e-03, 5.46474449e-03, 6.67465399e-03,
                      8.15244080e-03, 9.95741367e-03, 1.21620125e-02,
                      1.48547156e-02, 1.81435907e-02, 2.21606317e-02,
                      2.70670566e-02, 3.30597776e-02, 4.03793036e-02,
                      4.93193928e-02, 6.02388424e-02, 7.35758882e-02,
                      8.98657928e-02, 1.09762327e-01, 1.34064009e-01,
                      1.63746151e-01, 2.00000000e-01, 2.44280552e-01,
                      2.98364940e-01, 3.64423760e-01, 4.45108186e-01,
                      5.43656366e-01, 6.64023385e-01, 8.11039993e-01,
                      9.90606485e-01, 1.20992949e+00, 1.47781122e+00,
                      1.80500270e+00, 2.20463528e+00, 2.69274761e+00,
                      3.28892935e+00, 4.01710738e+00, 4.90650604e+00,
                      5.99282001e+00, 7.31964689e+00, 8.94023690e+00,
                      1.09196300e+01, 1.33372662e+01, 1.62901737e+01,
                      1.98968631e+01, 2.43020835e+01, 2.96826318e+01,
                      3.62544484e+01, 4.42812832e+01, 5.40852815e+01,
                      6.60599120e+01, 8.06857587e+01, 9.85498082e+01,
                      1.20369008e+02, 1.47019038e+02, 1.79569458e+02,
                      2.19326632e+02, 2.67886153e+02, 3.27196886e+02,
                      3.99639179e+02, 4.88120396e+02, 5.96191597e+02,
                      7.28190061e+02, 8.89413350e+02, 1.08633192e+03,
                      1.32684880e+03, 1.62061679e+03, 1.97942581e+03,
                      2.41767615e+03, 2.95295631e+03, 3.60674899e+03]])
    onew_inp = np.array([5., 4.09365377, 3.35160023, 2.74405818, 2.24664482,
                         1.83939721, 1.50597106, 1.23298482, 1.00948259,
                         0.82649444])
    # Comparison
    assert_allclose(out, oout)
    assert_allclose(new_inp, onew_inp)

    # Ensure output dimension
    hfilt = filters.anderson_801_1982()
    out, _ = transform.get_spline_values(hfilt, np.array([1, 1.1]), -1)
    assert_allclose(out.size, 804)

    # Check a hypothetical short filter, with small pts_per_dec, and ensure
    # at least four points are returned
    filt = filters.DigitalFilter('shortest')
    filt.base = np.array([1., 1.1])
    out, new_inp = transform.get_spline_values(filt, np.array([1.]), 1)
    assert_allclose(out.size, 4)

    # Check standard example
    ffilt = filters.key_81_CosSin_2009()
    inp = np.arange(1, 6)
    out, new_inp = transform.get_spline_values(ffilt, inp, 0)
    assert_allclose(inp, new_inp)
    assert_allclose(out, ffilt.base/inp[:, None])
Пример #2
0
    def __init__(self, **kwargs):
        BaseEM1DSurvey.__init__(self, **kwargs)
        if self.time is None:
            raise Exception("time is required!")

        # Use Sin filter for frequency to time transform
        self.fftfilt = filters.key_81_CosSin_2009()
        self.set_frequency()

        if self.src_type == "VMD":
            if self.offset is None:
                raise Exception("offset is required!")

            if self.offset.size == 1:
                self.offset = self.offset * np.ones(self.n_frequency)
Пример #3
0
    def __init__(self, **kwargs):
        BaseEM1DSurvey.__init__(self, **kwargs)
        if self.time is None:
            raise Exception("time is required!")

        # Use Sin filter for frequency to time transform
        self.fftfilt = filters.key_81_CosSin_2009()
        self.set_frequency()

        if self.src_type == "VMD":
            if self.offset is None:
                raise Exception("offset is required!")

            if self.offset.size == 1:
                self.offset = self.offset * np.ones(self.n_frequency)
Пример #4
0
def test_sincos():
    # Check with Key81-filter if analytical transform pairs for sine and cosine
    # are correct
    filt = filters.key_81_CosSin_2009()
    for sc in ['1', '2', '3']:
        if sc == '1':
            r = np.logspace(0, 0.7, 100)
        else:
            r = np.logspace(0, 1, 100)

        k = filt.base / r[:, None]
        tps = getattr(fdesign, 'sin_' + sc)()
        tpc = getattr(fdesign, 'cos_' + sc)()

        rhs1a = tps.rhs(r)
        rhs1c = np.dot(tps.lhs(k), filt.sin) / r

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

        rhs2a = tpc.rhs(r)
        rhs2c = np.dot(tpc.lhs(k), filt.cos) / r

        assert_allclose(rhs2a, rhs2c, rtol=1e-3)

    # Check inverse
    for sc in ['1', '2', '3']:
        if sc == '1':
            r = np.logspace(0, 0.7, 100)
        else:
            r = np.logspace(0, 1, 100)

        k = filt.base / r[:, None]
        tps = getattr(fdesign, 'sin_' + sc)()
        tpc = getattr(fdesign, 'cos_' + sc)()
        tps_i = getattr(fdesign, 'sin_' + sc)(inverse=True)
        tpc_i = getattr(fdesign, 'cos_' + sc)(inverse=True)

        rhs1a = tps.rhs(r)
        rhs1c = tps_i.lhs(r)

        assert_allclose(rhs1a, rhs1c)

        rhs2a = tpc.rhs(r)
        rhs2c = tpc_i.lhs(r)

        assert_allclose(rhs2a, rhs2c)
Пример #5
0
def test_check_time(capsys):
    time = np.array([3])

    # # DLF # #
    # verbose
    _, f, ft, ftarg = utils.check_time(time, 0, 'dlf', {}, 4)
    out, _ = capsys.readouterr()
    assert "   time        [s] :  3" in out
    assert "   Fourier         :  DLF (Sine-Filter)" in out
    assert "> DLF type    :  Lagged Convolution" in out
    assert ft == 'dlf'
    assert ftarg['dlf'].name == filters.key_201_CosSin_2012().name
    assert ftarg['pts_per_dec'] == -1
    f1 = np.array([
        4.87534752e-08, 5.60237934e-08, 6.43782911e-08, 7.39786458e-08,
        8.50106448e-08, 9.76877807e-08, 1.12255383e-07, 1.28995366e-07,
        1.48231684e-07
    ])
    f2 = np.array([
        2.88109455e+04, 3.31073518e+04, 3.80444558e+04, 4.37178011e+04,
        5.02371788e+04, 5.77287529e+04, 6.63375012e+04, 7.62300213e+04,
        8.75977547e+04
    ])
    assert_allclose(f[:9], f1)
    assert_allclose(f[-9:], f2)
    assert_allclose(f.size, 201 + 3)
    assert ftarg['kind'] == 'sin'

    # filter-string and unknown parameter
    _, f, _, ftarg = utils.check_time(time, -1, 'dlf', {
        'dlf': 'key_201_CosSin_2012',
        'kind': 'cos',
        'notused': 1
    }, 4)
    out, _ = capsys.readouterr()
    outstr = "   time        [s] :  3\n"
    outstr += "   Fourier         :  DLF (Cosine-Filter)\n     > Filter"
    assert outstr in out
    assert "WARNING :: Unknown ftarg {'notused': 1} for method 'dlf'" in out
    assert ft == 'dlf'
    assert ftarg['dlf'].name == filters.key_201_CosSin_2012().name
    assert ftarg['pts_per_dec'] == -1
    assert_allclose(f[:9], f1)
    assert_allclose(f[-9:], f2)
    assert_allclose(f.size, 201 + 3)
    assert ftarg['kind'] == 'cos'

    # filter instance
    _, _, _, ftarg = utils.check_time(time, 1, 'dlf', {
        'dlf': filters.key_201_CosSin_2012(),
        'kind': 'sin'
    }, 0)
    assert ftarg['dlf'].name == filters.key_201_CosSin_2012().name
    assert ftarg['pts_per_dec'] == -1
    assert ftarg['kind'] == 'sin'

    # pts_per_dec
    out, _ = capsys.readouterr()  # clear buffer
    _, _, _, ftarg = utils.check_time(time, 0, 'dlf', {'pts_per_dec': 30}, 4)
    assert ftarg['dlf'].name == filters.key_201_CosSin_2012().name
    assert ftarg['pts_per_dec'] == 30
    assert ftarg['kind'] == 'sin'
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Splined, 30.0 pts/dec" in out

    # filter-string and pts_per_dec
    _, _, _, ftarg = utils.check_time(time, 0, 'dlf', {
        'dlf': 'key_81_CosSin_2009',
        'pts_per_dec': -1,
        'kind': 'cos'
    }, 4)
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Lagged Convolution" in out
    assert ftarg['dlf'].name == filters.key_81_CosSin_2009().name
    assert ftarg['pts_per_dec'] == -1
    assert ftarg['kind'] == 'cos'

    # pts_per_dec
    _, freq, _, ftarg = utils.check_time(time, 0, 'dlf', {
        'pts_per_dec': 0,
        'kind': 'sin'
    }, 4)
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Standard" in out
    assert ftarg['pts_per_dec'] == 0
    f_base = filters.key_201_CosSin_2012().base
    assert_allclose(np.ravel(f_base / (2 * np.pi * time[:, None])), freq)

    # filter-string and pts_per_dec
    _, _, _, ftarg = utils.check_time(time, 0, 'dlf', {
        'dlf': 'key_81_CosSin_2009',
        'pts_per_dec': 50,
        'kind': 'cos'
    }, 0)
    assert ftarg['dlf'].name == filters.key_81_CosSin_2009().name
    assert ftarg['pts_per_dec'] == 50
    assert ftarg['kind'] == 'cos'

    # just kind
    _, f, _, ftarg = utils.check_time(time, 0, 'dlf', {'kind': 'sin'}, 0)
    assert ftarg['pts_per_dec'] == -1
    assert_allclose(f[:9], f1)
    assert_allclose(f[-9:], f2)
    assert_allclose(f.size, 204)

    # Assert it can be called repetitively
    _, _ = capsys.readouterr()
    _, _, _, ftarg = utils.check_time(time, 0, 'dlf', {}, 1)
    _, _, _, _ = utils.check_time(time, 0, 'dlf', ftarg, 1)
    out, _ = capsys.readouterr()
    assert out == ""

    # # QWE # #
    # verbose
    _, f, ft, ftarg = utils.check_time(time, 0, 'qwe', {}, 4)
    out, _ = capsys.readouterr()
    outstr = "   Fourier         :  Quadrature-with-Extrapolation\n     > rtol"
    assert out[24:87] == outstr
    assert ft == 'qwe'
    assert ftarg['rtol'] == 1e-8
    assert ftarg['atol'] == 1e-20
    assert ftarg['nquad'] == 21
    assert ftarg['maxint'] == 200
    assert ftarg['pts_per_dec'] == 20
    assert ftarg['diff_quad'] == 100
    f1 = np.array([
        3.16227766e-03, 3.54813389e-03, 3.98107171e-03, 4.46683592e-03,
        5.01187234e-03, 5.62341325e-03, 6.30957344e-03, 7.07945784e-03,
        7.94328235e-03
    ])
    f2 = np.array([
        1.00000000e+02, 1.12201845e+02, 1.25892541e+02, 1.41253754e+02,
        1.58489319e+02, 1.77827941e+02, 1.99526231e+02, 2.23872114e+02,
        2.51188643e+02
    ])
    assert_allclose(f[:9], f1)
    assert_allclose(f[-9:], f2)
    assert_allclose(f.size, 99)
    assert ftarg['a'] is None
    assert ftarg['b'] is None
    assert ftarg['limit'] is None
    assert ftarg['sincos'] is np.sin

    # only limit
    _, _, _, ftarg = utils.check_time(time, 1, 'qwe', {'limit': 30}, 0)
    assert ftarg['rtol'] == 1e-8
    assert ftarg['atol'] == 1e-20
    assert ftarg['nquad'] == 21
    assert ftarg['maxint'] == 200
    assert ftarg['pts_per_dec'] == 20
    assert ftarg['diff_quad'] == 100
    assert ftarg['a'] is None
    assert ftarg['b'] is None
    assert ftarg['limit'] == 30
    assert ftarg['sincos'] is np.sin

    # all arguments
    _, _, _, ftarg = utils.check_time(
        time, -1, 'qwe', {
            'rtol': 1e-3,
            'atol': 1e-4,
            'nquad': 31,
            'maxint': 20,
            'pts_per_dec': 30,
            'diff_quad': 200,
            'a': 0.01,
            'b': 0.2,
            'limit': 100
        }, 3)
    out, _ = capsys.readouterr()
    assert "     > a     (quad):  0.01" in out
    assert "     > b     (quad):  0.2" in out
    assert "     > limit (quad):  100" in out
    assert ftarg['rtol'] == 1e-3
    assert ftarg['atol'] == 1e-4
    assert ftarg['nquad'] == 31
    assert ftarg['maxint'] == 20
    assert ftarg['pts_per_dec'] == 30
    assert ftarg['diff_quad'] == 200
    assert ftarg['a'] == 0.01
    assert ftarg['b'] == 0.2
    assert ftarg['limit'] == 100
    assert ftarg['sincos'] is np.cos

    # Assert it can be called repetitively
    _, _ = capsys.readouterr()
    _, _, _, ftarg = utils.check_time(time, 0, 'qwe', {}, 1)
    _, _, _, _ = utils.check_time(time, 0, 'qwe', ftarg, 1)
    out, _ = capsys.readouterr()
    assert out == ""

    # # FFTLog # #
    # verbose
    _, f, ft, ftarg = utils.check_time(time, 0, 'fftlog', {}, 4)
    out, _ = capsys.readouterr()
    outstr = "   Fourier         :  FFTLog\n     > pts_per_dec"
    assert outstr in out
    assert ft == 'fftlog'
    assert ftarg['pts_per_dec'] == 10
    assert_allclose(ftarg['add_dec'], np.array([-2., 1.]))
    assert ftarg['q'] == 0
    tres = np.array([
        0.3571562, 0.44963302, 0.56605443, 0.71262031, 0.89713582, 1.12942708,
        1.42186445, 1.79002129, 2.25350329, 2.83699255, 3.57156202, 4.49633019,
        5.66054433, 7.1262031, 8.97135818, 11.29427079, 14.2186445,
        17.90021288, 22.53503287, 28.36992554, 35.71562019, 44.96330186,
        56.60544331, 71.26203102, 89.71358175, 112.94270785, 142.18644499,
        179.00212881, 225.35032873, 283.69925539
    ])
    assert ftarg['mu'] == 0.5
    assert_allclose(ftarg['tcalc'], tres)
    assert_allclose(ftarg['dlnr'], 0.23025850929940461)
    assert_allclose(ftarg['kr'], 1.0610526667295022)
    assert_allclose(ftarg['rk'], 0.016449035064149849)

    fres = np.array([
        0.00059525, 0.00074937, 0.00094341, 0.00118768, 0.0014952, 0.00188234,
        0.00236973, 0.00298331, 0.00375577, 0.00472823, 0.00595249, 0.00749374,
        0.00943407, 0.01187678, 0.01495199, 0.01882343, 0.0236973, 0.02983313,
        0.03755769, 0.04728233, 0.05952493, 0.07493744, 0.09434065, 0.11876785,
        0.14951986, 0.18823435, 0.23697301, 0.29833134, 0.3755769, 0.47282331
    ])
    assert_allclose(f, fres, rtol=1e-5)

    # Several parameters
    _, _, _, ftarg = utils.check_time(time, -1, 'fftlog', {
        'pts_per_dec': 10,
        'add_dec': [-3, 4],
        'q': 2
    }, 0)
    assert ftarg['pts_per_dec'] == 10
    assert_allclose(ftarg['add_dec'], np.array([-3., 4.]))
    assert ftarg['q'] == 1  # q > 1 reset to 1...
    assert ftarg['mu'] == -0.5
    assert_allclose(ftarg['dlnr'], 0.23025850929940461)
    assert_allclose(ftarg['kr'], 0.94312869748639161)
    assert_allclose(ftarg['rk'], 1.8505737940600746)

    # Assert it can be called repetitively
    _, _ = capsys.readouterr()
    _, _, _, ftarg = utils.check_time(time, 0, 'fftlog', {}, 1)
    _, _, _, _ = utils.check_time(time, 0, 'fftlog', ftarg, 1)
    out, _ = capsys.readouterr()
    assert out == ""

    # # FFT # #
    # verbose
    _, f, ft, ftarg = utils.check_time(time, 0, 'fft', {}, 4)
    out, _ = capsys.readouterr()
    assert "Fourier         :  Fast Fourier Transform FFT\n     > dfreq" in out
    assert "     > pts_per_dec :  (linear)" in out
    assert ft == 'fft'
    assert ftarg['dfreq'] == 0.002
    assert ftarg['nfreq'] == 2048
    assert ftarg['ntot'] == 2048
    assert ftarg['pts_per_dec'] is None
    fres = np.array(
        [0.002, 0.004, 0.006, 0.008, 0.01, 4.088, 4.09, 4.092, 4.094, 4.096])
    assert_allclose(f[:5], fres[:5])
    assert_allclose(f[-5:], fres[-5:])

    # Several parameters
    _, _, _, ftarg = utils.check_time(time, 0, 'fft', {
        'dfreq': 1e-3,
        'nfreq': 2**15 + 1,
        'ntot': 3
    }, 0)
    assert ftarg['dfreq'] == 0.001
    assert ftarg['nfreq'] == 2**15 + 1
    assert ftarg['ntot'] == 2**16

    # Several parameters; pts_per_dec
    _, f, _, ftarg = utils.check_time(time, 0, 'fft', {'pts_per_dec': 5}, 3)
    out, _ = capsys.readouterr()
    assert "     > pts_per_dec :  5" in out
    assert ftarg['dfreq'] == 0.002
    assert ftarg['nfreq'] == 2048
    assert ftarg['ntot'] == 2048
    assert ftarg['pts_per_dec'] == 5
    outf = np.array([
        2.00000000e-03, 3.22098066e-03, 5.18735822e-03, 8.35419026e-03,
        1.34543426e-02, 2.16680888e-02, 3.48962474e-02, 5.62000691e-02,
        9.05096680e-02, 1.45764945e-01, 2.34753035e-01, 3.78067493e-01,
        6.08874043e-01, 9.80585759e-01, 1.57922389e+00, 2.54332480e+00,
        4.09600000e+00
    ])

    assert_allclose(f, outf)

    # Assert it can be called repetitively
    _, _ = capsys.readouterr()
    _, _, _, ftarg = utils.check_time(time, 0, 'fft', {}, 1)
    _, _, _, _ = utils.check_time(time, 0, 'fft', ftarg, 1)
    out, _ = capsys.readouterr()
    assert out == ""

    # # Various # #

    # minimum time
    _ = utils.check_time(0, 0, 'dlf', {
        'dlf': 'key_201_CosSin_2012',
        'kind': 'cos'
    }, 1)
    out, _ = capsys.readouterr()
    assert out[:21] == "* WARNING :: Times < "

    # Signal != -1, 0, 1
    with pytest.raises(ValueError):
        utils.check_time(time, -2, 'dlf', {}, 0)

    # ft != cos, sin, dlf, qwe, fftlog,
    with pytest.raises(ValueError):
        utils.check_time(time, 0, 'bla', {}, 0)

    # filter missing attributes
    with pytest.raises(AttributeError):
        utils.check_time(time, 0, 'dlf', {'dlf': 'key_201_2012'}, 1)

    # filter with wrong kind
    with pytest.raises(ValueError):
        utils.check_time(time, 0, 'dlf', {'kind': 'wrongkind'}, 1)
Пример #6
0
def test_check_time(capsys):
    time = np.array([3])

    # # FFHT # #
    # verbose
    _, f, ft, ftarg = utils.check_time(time, 0, 'ffht', None, 4)
    out, _ = capsys.readouterr()
    assert "   time        [s] :  3" in out
    assert "   Fourier         :  DLF (Sine-Filter)" in out
    assert "> DLF type    :  Lagged Convolution" in out
    assert ft == 'ffht'
    assert ftarg[0].name == filters.key_201_CosSin_2012().name
    assert ftarg[1] is -1
    f1 = np.array([
        4.87534752e-08, 5.60237934e-08, 6.43782911e-08, 7.39786458e-08,
        8.50106448e-08, 9.76877807e-08, 1.12255383e-07, 1.28995366e-07,
        1.48231684e-07
    ])
    f2 = np.array([
        2.88109455e+04, 3.31073518e+04, 3.80444558e+04, 4.37178011e+04,
        5.02371788e+04, 5.77287529e+04, 6.63375012e+04, 7.62300213e+04,
        8.75977547e+04
    ])
    assert_allclose(f[:9], f1)
    assert_allclose(f[-9:], f2)
    assert_allclose(f.size, 201 + 3)
    assert ftarg[2] == 'sin'

    # [filter str]
    _, f, _, ftarg = utils.check_time(time, -1, 'cos', 'key_201_CosSin_2012',
                                      4)
    out, _ = capsys.readouterr()
    outstr = "   time        [s] :  3\n"
    outstr += "   Fourier         :  DLF (Cosine-Filter)\n     > Filter"
    assert out[:79] == outstr
    assert ft == 'ffht'
    assert ftarg[0].name == filters.key_201_CosSin_2012().name
    assert ftarg[1] is -1
    assert_allclose(f[:9], f1)
    assert_allclose(f[-9:], f2)
    assert_allclose(f.size, 201 + 3)
    assert ftarg[2] == 'cos'

    # [filter inst]
    _, _, _, ftarg = utils.check_time(time, 1, 'sin',
                                      filters.key_201_CosSin_2012(), 0)
    assert ftarg[0].name == filters.key_201_CosSin_2012().name
    assert ftarg[1] is -1
    assert ftarg[2] == 'sin'

    # ['', pts_per_dec]
    out, _ = capsys.readouterr()  # clear buffer
    _, _, _, ftarg = utils.check_time(time, 0, 'ffht', ['', 30], 4)
    assert ftarg[0].name == filters.key_201_CosSin_2012().name
    assert ftarg[1] == 30
    assert ftarg[2] == 'sin'
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Splined, 30 pts/dec" in out

    # [filter str, pts_per_dec]
    _, _, _, ftarg = utils.check_time(time, 0, 'cos',
                                      ['key_81_CosSin_2009', -1], 4)
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Lagged Convolution" in out
    assert ftarg[0].name == filters.key_81_CosSin_2009().name
    assert ftarg[1] == -1
    assert ftarg[2] == 'cos'

    # ['', 0]
    _, freq, _, ftarg = utils.check_time(time, 0, 'sin', {'pts_per_dec': 0}, 4)
    out, _ = capsys.readouterr()
    assert "     > DLF type    :  Standard" in out
    assert ftarg[1] == 0
    f_base = filters.key_201_CosSin_2012().base
    assert_allclose(np.ravel(f_base / (2 * np.pi * time[:, None])), freq)

    # [filter str, pts_per_dec] :: dict, deprecated
    _, _, _, ftarg = utils.check_time(time, 0, 'cos', {
        'fftfilt': 'key_81_CosSin_2009',
        'pts_per_dec': 50
    }, 0)
    assert ftarg[0].name == filters.key_81_CosSin_2009().name
    assert ftarg[1] == 50
    assert ftarg[2] == 'cos'

    # ['', 0]  :: dict, deprecated
    _, f, _, ftarg = utils.check_time(time, 0, 'sin', {'pts_per_dec': None}, 0)
    assert ftarg[1] == -1
    assert_allclose(f[:9], f1)
    assert_allclose(f[-9:], f2)
    assert_allclose(f.size, 204)

    # # QWE # #
    # verbose
    _, f, ft, ftarg = utils.check_time(time, 0, 'qwe', None, 4)
    out, _ = capsys.readouterr()
    outstr = "   Fourier         :  Quadrature-with-Extrapolation\n     > rtol"
    assert out[24:87] == outstr
    assert ft == 'fqwe'
    assert_allclose(ftarg[:-4], [1e-8, 1e-20, 21, 200, 20, 100])
    f1 = np.array([
        3.16227766e-03, 3.54813389e-03, 3.98107171e-03, 4.46683592e-03,
        5.01187234e-03, 5.62341325e-03, 6.30957344e-03, 7.07945784e-03,
        7.94328235e-03
    ])
    f2 = np.array([
        1.00000000e+02, 1.12201845e+02, 1.25892541e+02, 1.41253754e+02,
        1.58489319e+02, 1.77827941e+02, 1.99526231e+02, 2.23872114e+02,
        2.51188643e+02
    ])
    assert_allclose(f[:9], f1)
    assert_allclose(f[-9:], f2)
    assert_allclose(f.size, 99)
    assert ftarg[-4] is None
    assert ftarg[-3] is None
    assert ftarg[-2] is None
    assert ftarg[-1] is np.sin

    # only last argument
    _, _, _, ftarg = utils.check_time(time, 1, 'fqwe',
                                      ['', '', '', '', '', '', '', '', 30], 0)
    assert_allclose(ftarg[:-4], [1e-8, 1e-20, 21, 200, 20, 100])
    assert ftarg[-4] is None
    assert ftarg[-3] is None
    assert ftarg[-2] == 30
    assert ftarg[-1] is np.sin

    # all arguments
    _, _, _, ftarg = utils.check_time(
        time, -1, 'qwe', [1e-3, 1e-4, 31, 20, 30, 200, 0.01, .2, 100], 3)
    out, _ = capsys.readouterr()
    assert "     > a     (quad):  0.01" in out
    assert "     > b     (quad):  0.2" in out
    assert "     > limit (quad):  100" in out
    assert_allclose(ftarg[:-1], [1e-3, 1e-4, 31, 20, 30, 200, 0.01, .2, 100])
    assert ftarg[-1] is np.cos

    # # FFTLog # #
    # verbose
    _, f, ft, ftarg = utils.check_time(time, 0, 'fftlog', None, 4)
    out, _ = capsys.readouterr()
    outstr = "   Fourier         :  FFTLog\n     > pts_per_dec"
    assert outstr in out
    assert ft == 'fftlog'
    assert ftarg[0] == 10
    assert_allclose(ftarg[1], np.array([-2., 1.]))
    assert ftarg[2] == 0
    tres = np.array([
        0.3571562, 0.44963302, 0.56605443, 0.71262031, 0.89713582, 1.12942708,
        1.42186445, 1.79002129, 2.25350329, 2.83699255, 3.57156202, 4.49633019,
        5.66054433, 7.1262031, 8.97135818, 11.29427079, 14.2186445,
        17.90021288, 22.53503287, 28.36992554, 35.71562019, 44.96330186,
        56.60544331, 71.26203102, 89.71358175, 112.94270785, 142.18644499,
        179.00212881, 225.35032873, 283.69925539
    ])
    assert ftarg[3] == 0.5
    assert_allclose(ftarg[4], tres)
    assert_allclose(
        ftarg[5:],
        [0.23025850929940461, 1.0610526667295022, 0.016449035064149849])

    fres = np.array([
        0.00059525, 0.00074937, 0.00094341, 0.00118768, 0.0014952, 0.00188234,
        0.00236973, 0.00298331, 0.00375577, 0.00472823, 0.00595249, 0.00749374,
        0.00943407, 0.01187678, 0.01495199, 0.01882343, 0.0236973, 0.02983313,
        0.03755769, 0.04728233, 0.05952493, 0.07493744, 0.09434065, 0.11876785,
        0.14951986, 0.18823435, 0.23697301, 0.29833134, 0.3755769, 0.47282331
    ])
    assert_allclose(f, fres, rtol=1e-5)

    # Several parameters
    _, _, _, ftarg = utils.check_time(time, -1, 'fftlog', [10, [-3, 4], 2], 0)
    assert ftarg[0] == 10
    assert_allclose(ftarg[1], np.array([-3., 4.]))
    assert ftarg[2] == 1  # q > 1 reset to 1...
    assert ftarg[3] == -0.5
    assert_allclose(
        ftarg[5:],
        [0.23025850929940461, 0.94312869748639161, 1.8505737940600746])

    # # FFT # #
    # verbose
    _, f, ft, ftarg = utils.check_time(time, 0, 'fft', None, 4)
    out, _ = capsys.readouterr()
    assert "Fourier         :  Fast Fourier Transform FFT\n     > dfreq" in out
    assert "     > pts_per_dec :  (linear)" in out
    assert ft == 'fft'
    assert ftarg[0] == 0.002
    assert ftarg[1] == 2048
    assert ftarg[2] == 2048
    assert ftarg[3] is None
    fres = np.array(
        [0.002, 0.004, 0.006, 0.008, 0.01, 4.088, 4.09, 4.092, 4.094, 4.096])
    assert_allclose(f[:5], fres[:5])
    assert_allclose(f[-5:], fres[-5:])

    # Several parameters
    _, _, _, ftarg = utils.check_time(time, 0, 'fft', [1e-3, 2**15 + 1, 3], 0)
    assert ftarg[0] == 0.001
    assert ftarg[1] == 2**15 + 1
    assert ftarg[2] == 2**16

    # Several parameters; pts_per_dec
    _, f, _, ftarg = utils.check_time(time, 0, 'fft', ['', '', '', 5], 3)
    out, _ = capsys.readouterr()
    assert "     > pts_per_dec :  5" in out
    assert ftarg[0] == 0.002
    assert ftarg[1] == 2048
    assert ftarg[2] == 2048
    assert ftarg[3] == 5
    outf = np.array([
        2.00000000e-03, 3.22098066e-03, 5.18735822e-03, 8.35419026e-03,
        1.34543426e-02, 2.16680888e-02, 3.48962474e-02, 5.62000691e-02,
        9.05096680e-02, 1.45764945e-01, 2.34753035e-01, 3.78067493e-01,
        6.08874043e-01, 9.80585759e-01, 1.57922389e+00, 2.54332480e+00,
        4.09600000e+00
    ])

    assert_allclose(f, outf)

    # # Various # #

    # minimum time
    _ = utils.check_time(0, 0, 'cos', 'key_201_CosSin_2012', 1)
    out, _ = capsys.readouterr()
    assert out[:21] == "* WARNING :: Times < "

    # Signal != -1, 0, 1
    with pytest.raises(ValueError):
        utils.check_time(time, -2, 'ffht', None, 0)

    # ft != cos, sin, ffht, qwe, hqwe, fftlog,
    with pytest.raises(ValueError):
        utils.check_time(time, 0, 'fht', None, 0)