#!/usr/bin/env python
# Author : Pierre Schnizer
"""
The geometric function is described using a chebyshev series with 6 terms.
It will print the results to stdout.

I have to find the paper describing this application.
"""
import Numeric

from  pygsl import chebyshev



def run():
    # The geometric function
    func = lambda x,y  : 1 / (1 + x)
    mysys = chebyshev.gsl_function(func, None)
    # The series
    series = chebyshev.cheb_series(6)

    series.init(mysys, 0, 2)
    # and its coefficients

    # Make a new series object. 
    series1 = chebyshev.cheb_series(6)
    #series1.init(mysys, 0, 2)
    series1.set_a(series.get_a())
    series1.set_b(series.get_b())
    series1.set_coefficients(series.get_coefficients()*2)

    # Two items of the gsl_cheb_struct the documentation does not mention.
    series1.set_order_sp(series.get_order_sp())
    series1.set_f(series.get_f())


    x = Numeric.arange(100) / 50.
    y = map(lambda x, s=series: s.eval_n(6, x), x)
    y1 = map(lambda x, s=series1: s.eval_n(6, x), x)
    #print "#     x      \t      y      \t      z"
    #for i in Numeric.arange(x.shape[0]):
    #    print "% 10.7f\t % 10.7f\t % 10.7f" % (x[i],  y[i], y1[i])
if __name__ == '__main__':
    run()
