Source code for yggdrasil.communication.transforms.FunctionTransform

from yggdrasil.communication.transforms.TransformBase import TransformBase


[docs]class FunctionTransform(TransformBase): r"""Class for transforming messages based on a provided Python function. Args: function (func): The handle for a callable Python object (e.g. function) that should be used to transform messages or a string of the form "<function file>:<function name>" identifying a function where "<function file>" is the module or Python file containing the function and "<function name>" is the name of the function. The function should take the message as input and return the transformed message. """ _transformtype = 'function' _schema_required = ['function'] _schema_properties = {'function': {'type': 'function'}} _schema_subtype_description = "Transform messages using a function."
[docs] def evaluate_transform(self, x, no_copy=False): r"""Call transform on the provided message. Args: x (object): Message object to transform. no_copy (bool, optional): If True, the transformation occurs in place. Otherwise a copy is created and transformed. Defaults to False. Returns: object: The transformed message. """ return self.function(x)
[docs] @classmethod def get_testing_options(cls, **kwargs): r"""Get testing options for the transform class. Returns: list: Multiple dictionaries of keywords and messages before/after pairs that will result from the transform created by the provided keywords. """ def ftran(x): if isinstance(x, list): return [ftran(ix) for ix in x] return x**3 return [{'kwargs': {'function': ftran}, 'in/out': [(1, 1), (2, 8)], 'in/out_t': [ ({'type': 'array', 'items': [ {'type': 'scalar', 'subtype': 'int', 'title': x, 'precision': 8} for x in 'abc']}, {'type': 'array', 'items': [ {'type': 'scalar', 'subtype': 'int', 'title': x, 'precision': 8} for x in 'abc']})]}]