Source code for tensor.sources.generator

"""
.. module:: generator
   :platform: Any
   :synopsis: A function generator source module

.. moduleauthor:: Colin Alston <colin@imcol.in>
"""

import time, math

from twisted.internet import defer, reactor

from zope.interface import implementer

from tensor.interfaces import ITensorSource
from tensor.objects import Source


@implementer(ITensorSource)
[docs]class Function(Source): """Produces an arbitrary function Functions can contain the functions sin, cos, sinh, cosh, tan, tanh, asin, acos, atan, asinh, acosh, atanh, log(n, [base|e]), abs Or the constants e, pi, and variable x **Configuration arguments:** :param dx: Resolution with time (steps of x) :type dx: float. :param function: Function to produce :type function: string. """ x = 0 def get(self): self.x += self.config.get('dx', 0.1) val = eval(self.config.get('function', 'sin(x)'), { 'sin': math.sin, 'sinh': math.sinh, 'cos': math.cos, 'cosh': math.cosh, 'tan': math.tan, 'tanh': math.tanh, 'asin': math.asin, 'acos': math.acos, 'atan': math.atan, 'asinh': math.asinh, 'acosh': math.acosh, 'atanh': math.atanh, 'log': math.log, 'abs': abs, 'e': math.e, 'pi': math.pi, 'x': self.x }) return self.createEvent('ok', 'Sine wave', val)