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')
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)
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())
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())