Exemplo n.º 1
0
def _efficiency():
    print('\nPerform some efficiency tests (this might take some time...):')
    formula = 'sin(x) + x**3 + 2*x'
    formula_wprm = formula + ' + A*B'

    def s0(x):
        return sin(x) + x**3 + 2 * x

    s1 = StringFunction_v1(formula)
    s2 = StringFunction_v2(formula)  # compiled
    s3 = StringFunction_v3(formula_wprm, set_parameters='A=0; B=0')
    s4 = StringFunction_v4(formula)
    s5 = StringFunction_v5(formula, independent_variables=('x', ), A=0, B=0)
    s6 = StringFunction(formula, independent_variables=('x', ), A=0, B=0)
    s7 = s6.__call__
    x = 0.9
    # verification first:
    values = [s(x) for s in (s0, s1, s2, s3, s4, s5, s6, s7)]
    print('values of %s for x=%s: %s' % (formula, x, values))

    n = 400000
    from scitools.misc import timer
    from scitools.EfficiencyTable import EfficiencyTable as ET
    e = ET('Efficiency check of StringFunction implementations; '
           'formula=%s, n=%d' % (formula, n))
    import inspect
    for s in s0, s1, s2, s3, s4, s5, s6, s7:
        if inspect.isfunction(s) or inspect.ismethod(s):
            name = s.__name__
        else:
            name = s.__class__.__name__
        t = timer(s, args=(x, ), repetitions=100000, comment=name)
        e.add(name, t)
    print(e)
    print('End of efficiency tests\n')
Exemplo n.º 2
0
 def __str__(self):
     # remove the independent variables from self._prms such that
     # this dict contains parameters (to be subsituted by values) only:
     try:
         for v in self._var:
             del self._prms[v]
     except:
         pass
     return StringFunction.__str__(self)
Exemplo n.º 3
0
def _demo():
    f = StringFunction('a+b*sin(x)', a=1, b=4)
    print(f(2))
    f.set_parameters(a=-1, b=pi)
    print(f(1))
    print('internals:', str(f), repr(f), f._lambda, f._prms)
    f = StringFunction('amp*sin(a*t)*exp(-6.211*x)',
                       independent_variables=('x','t'))
    f.set_parameters(amp=0.1, a=1)
    print(f(0,pi/2.0,a=2))
    print('internals:', str(f), repr(f), f._lambda, f._prms)
    print(f.C_code())
    print(f.Cpp_code())
    print(f.F77_code())
Exemplo n.º 4
0
def _demo():
    from math import pi
    f = StringFunction('a+b*sin(x)', a=1, b=4)
    print(f(2))
    f.set_parameters(a=-1, b=pi)
    print(f(1))
    print('internals:', str(f), repr(f), f._lambda, f._prms)
    f = StringFunction('amp*sin(a*t)*exp(-6.211*x)',
                       independent_variables=('x', 't'))
    f.set_parameters(amp=0.1, a=1)
    print(f(0, pi / 2.0, a=2))
    print('internals:', str(f), repr(f), f._lambda, f._prms)
    print(f.C_code())
    print(f.Cpp_code())
    print(f.F77_code())