예제 #1
0
    def __init__(self, *indexed, **named):
        """Create a Transformation either from an ordered list of Python expressions or by keywords.

        Although it's possible to mix the ordered list method and the keyword method, doing so could be confusing.

        Expressions loaded as positional arguments are given keyword names "_0", "_1", "_2", etc., and all methods proceed as though they were loaded as keywords.

        :type indexed: strings (as positional arguments)
        :param indexed: executable Python code in strings
        :type named: strings (as keyword arguments)
        :param named: executable Python code in strings
        """

        # indexed inputs come first, in order, and are labeled as _0, _1, _2, etc.
        self.exprs = named
        self.order = sorted(named.keys())
        for i, expr in enumerate(indexed):
            key = "_%d" % i
            self.exprs[key] = expr
            self.order.insert(i, key)

        # construct PFA from each expression
        self.pfas = dict((k, ppfa(v).jsonNode(False, set())) for k, v in self.exprs.items())

        # find all the fields referenced in all of the expressions
        self.fields = sorted(set(sum((Transformation.findFields(x) for x in self.pfas.values()), [])))

        # construct lambda functions for transforming Numpy
        self.lambdas = dict((k, eval("lambda " + ", ".join(self.fields) + ": " + Transformation.toNumpyExpr(ppfa(v)), self.namespace)) for k, v in self.exprs.items())
예제 #2
0
    def __init__(self, *indexed, **named):
        """Create a Transformation either from an ordered list of Python expressions or by keywords.

        Although it's possible to mix the ordered list method and the keyword method, doing so could be confusing.

        Expressions loaded as positional arguments are given keyword names "_0", "_1", "_2", etc., and all methods proceed as though they were loaded as keywords.

        :type indexed: strings (as positional arguments)
        :param indexed: executable Python code in strings
        :type named: strings (as keyword arguments)
        :param named: executable Python code in strings
        """

        # indexed inputs come first, in order, and are labeled as _0, _1, _2, etc.
        self.exprs = named
        self.order = sorted(named.keys())
        for i, expr in enumerate(indexed):
            key = "_%d" % i
            self.exprs[key] = expr
            self.order.insert(i, key)

        # construct PFA from each expression
        self.pfas = dict((k, ppfa(v).jsonNode(False, set())) for k, v in self.exprs.items())

        # find all the fields referenced in all of the expressions
        self.fields = sorted(set(sum((Transformation.findFields(x) for x in self.pfas.values()), [])))

        # construct lambda functions for transforming Numpy
        self.lambdas = dict((k, eval("lambda " + ", ".join(self.fields) + ": " + Transformation.toNumpyExpr(ppfa(v)), self.namespace)) for k, v in self.exprs.items())
예제 #3
0
 def interpret(x):
     if isinstance(x, Ast):
         return x.jsonNode(False, set())
     elif isinstance(x, basestring):
         return ppfa(x).jsonNode(False, set())
     else:
         return pfa(x).jsonNode(False, set())
예제 #4
0
    def interpret(x):
        """Interpret expression from a PFA abstract syntax tree or PrettyPFA string.

        :type x: titus.datatype.Ast, PrettyPFA string
        :param x: input PFA
        :rtype: Pythonized JSON
        :return: the PFA as Pythonized JSON
        """

        if isinstance(x, Ast):
            return x.jsonNode(False, set())
        elif isinstance(x, str):
            return ppfa(x).jsonNode(False, set())
        else:
            return pfa(x).jsonNode(False, set())
예제 #5
0
    def interpret(x):
        """Interpret expression from a PFA abstract syntax tree or PrettyPFA string.

        :type x: titus.datatype.Ast, PrettyPFA string
        :param x: input PFA
        :rtype: Pythonized JSON
        :return: the PFA as Pythonized JSON
        """

        if isinstance(x, Ast):
            return x.jsonNode(False, set())
        elif isinstance(x, basestring):
            return ppfa(x).jsonNode(False, set())
        else:
            return pfa(x).jsonNode(False, set())
예제 #6
0
    def __init__(self, *indexed, **named):
        # indexed inputs come first, in order, and are labeled as _0, _1, _2, etc.
        self.exprs = named
        self.order = sorted(named.keys())
        for i, expr in enumerate(indexed):
            key = "_%d" % i
            self.exprs[key] = expr
            self.order.insert(i, key)

        # construct PFA from each expression
        self.pfas = dict((k, ppfa(v).jsonNode(False, set())) for k, v in self.exprs.items())

        # find all the fields referenced in all of the expressions
        self.fields = sorted(set(sum((Transformation.findFields(x) for x in self.pfas.values()), [])))

        # construct lambda functions for transforming Numpy
        self.lambdas = dict((k, eval("lambda " + ", ".join(self.fields) + ": " + Transformation.toNumpyExpr(ppfa(v)), self.namespace)) for k, v in self.exprs.items())