Example #1
0
def fft(fx,gamma=0,delta=0,scale=1):
    from numpy import sqrt, roll, arange, exp, sign
    from numpy.fft import fft as ft
    from scipy import pi
    from spyctral.common.indexing import integer_range

    try: 
        from pymbolic.algorithm import fft
    except:
        from numpy.fft import fft

    from connection import int_connection

    N = fx.size
    if fx.dtype==object:
        import pymbolic.algorithm as pyalg
        modes = pyalg.sym_fft(fx)*float(sqrt(2*pi)/N)
    else:
        modes = fft(fx)*sqrt(2*pi)/N

    ks = integer_range(N)

    modes = roll(modes,N/2)

    flags = ks!=0
    flags2 = ((ks%2)==1)
    modes[flags] *= exp(-1j*ks[flags]*pi/N)
    modes[flags2] *= -1

    return int_connection(modes,0,0,gamma,delta)
Example #2
0
def test_fft_with_floats():
    numpy = pytest.importorskip("numpy")
    import numpy.linalg as la

    from pymbolic.algorithm import fft, ifft

    for n in [2**i for i in range(4, 10)] + [17, 12, 948]:
        a = numpy.random.rand(n) + 1j * numpy.random.rand(n)
        f_a = fft(a)
        a2 = ifft(f_a)
        assert la.norm(a - a2) < 1e-10

        f_a_numpy = numpy.fft.fft(a)
        assert la.norm(f_a - f_a_numpy) < 1e-10
Example #3
0
def test_fft_with_floats():
    numpy = pytest.importorskip("numpy")
    import numpy.linalg as la

    from pymbolic.algorithm import fft, ifft

    for n in [2**i for i in range(4, 10)]+[17, 12, 948]:
        a = numpy.random.rand(n) + 1j*numpy.random.rand(n)
        f_a = fft(a)
        a2 = ifft(f_a)
        assert la.norm(a-a2) < 1e-10

        f_a_numpy = numpy.fft.fft(a)
        assert la.norm(f_a-f_a_numpy) < 1e-10
Example #4
0
def test_fft():
    import py.test
    numpy = py.test.importorskip("numpy")

    from pymbolic import var
    from pymbolic.algorithm import fft, sym_fft

    vars = numpy.array([var(chr(97 + i)) for i in range(16)], dtype=object)
    print vars

    print fft(vars)
    traced_fft = sym_fft(vars)

    from pymbolic.mapper.stringifier import PREC_NONE
    from pymbolic.mapper.c_code import CCodeMapper
    ccm = CCodeMapper()

    code = [ccm(tfi, PREC_NONE) for tfi in traced_fft]

    for cse_name, cse_str in enumerate(ccm.cse_name_list):
        print "%s = %s" % (cse_name, cse_str)

    for i, line in enumerate(code):
        print "result[%d] = %s" % (i, line)
Example #5
0
def fft_online(fx,overhead):
    from numpy.fft import fft as ft
    from numpy import roll
    from connection import int_connection_online as int_connection

    try:
        from pymbolic.algorithm import fft
    except:
        from numpy.fft import fft

    if fx.dtype==object:
        modes = fft(fx)
    else:
        modes = ft(fx)
    N = fx.size

    modes = roll(modes,N/2)

    modes *= overhead[0]

    return int_connection(modes,overhead[1])
Example #6
0
def test_fft():
    numpy = pytest.importorskip("numpy")

    from pymbolic import var
    from pymbolic.algorithm import fft, sym_fft

    vars = numpy.array([var(chr(97+i)) for i in range(16)], dtype=object)
    print(vars)

    print(fft(vars))
    traced_fft = sym_fft(vars)

    from pymbolic.mapper.stringifier import PREC_NONE
    from pymbolic.mapper.c_code import CCodeMapper
    ccm = CCodeMapper()

    code = [ccm(tfi, PREC_NONE) for tfi in traced_fft]

    for cse_name, cse_str in enumerate(ccm.cse_name_list):
        print("%s = %s" % (cse_name, cse_str))

    for i, line in enumerate(code):
        print("result[%d] = %s" % (i, line))