import scipy.special as sp
import numpy as np

# Reference:
# [1] <NAME>, Stegun IA (1972) Handbook of Mathematical Functions with Formulas, Graphs,
#     and Mathematical Tables. U.S. Department of Commerce, NIST

# generate tables 9.* starting at page 390 of [1]
def gentable(X):

    # header
    l = '%5s  %18s  %13s  %13s  %13s  %13s  %13s\n' % ('x','J0(x)','J1(x)','J2(x)','Y0(x)','Y1(x)','Y2(x)')

    # table
    for i, x in enumerate(X):
        l += '%5.2f  %18.15f  %13.10f  %13.10f  %13.10f  %13.10f  %13.10f\n' % (x, sp.j0(x), sp.j1(x), sp.jv(2,x), sp.y0(x), sp.y1(x), sp.yn(2,x))
        if (i+1) % 5 == 0:
            l += '\n'
    return l

# generate data for comparison
def gendata(X):
    l = '%5s%23s%23s%23s%23s%23s%23s\n' % ('x', 'J0', 'J1', 'J2', 'Y0', 'Y1', 'Y2')
    for i, x in enumerate(X):
        l += '%5.2f%23.15e%23.15e%23.15e%23.15e%23.15e%23.15e\n' % (x, sp.j0(x), sp.j1(x), sp.jv(2,x), sp.y0(x), sp.y1(x), sp.yn(2,x))
    return l

# write file
def savefile(l, fn):
    f = open(fn,'w')
    f.write(l)
    f.close()
    print 'file <%s> written' % fn

# generate tables 9.* starting at page 390 of [1]
l = gentable(np.linspace(0,5.0,51))
savefile(l, '/tmp/as-9-bessel-integer-tables9.txt')

# data for comparison---small
X = np.linspace(0,15,21)
l = gendata(X)
savefile(l, '/tmp/as-9-bessel-integer-sml.cmp')

# data for comparison---big
X = np.linspace(0,15,151)
l = gendata(X)
savefile(l, '/tmp/as-9-bessel-integer-big.cmp')

import scipy.special as sp
import numpy as np

# Reference:
# [1] <NAME>, Stegun IA (1972) Handbook of Mathematical Functions with Formulas, Graphs,
#     and Mathematical Tables. U.S. Department of Commerce, NIST

# generate tables 9.* starting at page 390 of [1]
def gentable(X):

    # header
    l = '%5s  %18s  %13s  %13s  %13s  %13s  %13s\n' % ('x','J0(x)','J1(x)','J2(x)','Y0(x)','Y1(x)','Y2(x)')

    # table
    for i, x in enumerate(X):
        l += '%5.2f  %18.15f  %13.10f  %13.10f  %13.10f  %13.10f  %13.10f\n' % (x, sp.j0(x), sp.j1(x), sp.jv(2,x), sp.y0(x), sp.y1(x), sp.yn(2,x))
        if (i+1) % 5 == 0:
            l += '\n'
    return l

# generate data for comparison
def gendata(X):
    l = '%5s%23s%23s%23s%23s%23s%23s\n' % ('x', 'J0', 'J1', 'J2', 'Y0', 'Y1', 'Y2')
    for i, x in enumerate(X):
        l += '%5.2f%23.15e%23.15e%23.15e%23.15e%23.15e%23.15e\n' % (x, sp.j0(x), sp.j1(x), sp.jv(2,x), sp.y0(x), sp.y1(x), sp.yn(2,x))
    return l

# write file
def savefile(l, fn):
    f = open(fn,'w')
    f.write(l)
    f.close()
    print 'file <%s> written' % fn

# generate tables 9.* starting at page 390 of [1]
l = gentable(np.linspace(0,5.0,51))
savefile(l, '/tmp/as-9-bessel-integer-tables9.txt')

# data for comparison---small
X = np.linspace(0,15,21)
l = gendata(X)
savefile(l, '/tmp/as-9-bessel-integer-sml.cmp')

# data for comparison---big
X = np.linspace(0,15,151)
l = gendata(X)
savefile(l, '/tmp/as-9-bessel-integer-big.cmp')

# Reference: # [1] <NAME>, Stegun IA (1972) Handbook of Mathematical Functions with Formulas, Graphs, #     and Mathematical Tables. U.S. Department of Commerce, NIST # generate tables 9.* starting at page 390 of [1] # header # table # generate data for comparison # write file # generate tables 9.* starting at page 390 of [1] # data for comparison---small # data for comparison---big