(<func>, '?<value_1>', ...) ), ...] example :[(('value', ('Add', ('value', '?x'), ('value', '?y'))), (int_float_add, '?xv', '?yv'))]) Full Example: def int_float_add(x, y): z = float(x) + float(y) if z.is_integer(): z = int(z) return str(z) add_rule = Operator(('Add', '?x', '?y'), [(('value', '?x'), '?xv'), (('value', '?y'), '?yv'), (lambda x, y: x <= y, '?x', '?y') ], [(('value', ('Add', ('value', '?x'), ('value', '?y'))), (int_float_add, '?xv', '?yv'))]) Note: You should explicitly register your operators so you can refer to them in your training.json, otherwise the name will be the same as the local variable example: Operator.register("Add") vvvvvvvvvvvvvvvvvvvv WRITE YOUR OPERATORS BELOW vvvvvvvvvvvvvvvvvvvvvvv ''' # ^^^^^^^^^^^^^^ DEFINE ALL YOUR OPERATORS ABOVE THIS LINE ^^^^^^^^^^^^^^^^ for name, op in locals().copy().items(): if (isinstance(op, Operator)): Operator.register(name, op)
def int3_float_add_then_tens(x, y, w): z = float(x) + float(y) + float(w) z = z // 10 if z.is_integer(): z = int(z) return str(z) add_rule = Operator(('Add', '?x', '?y'), [(('value', '?x'), '?xv'), (('value', '?y'), '?yv'), # (lambda x, y: x <= y, '?x', '?y') ], [(('value', ('Add', ('value', '?x'), ('value', '?y'))), (int_float_add, '?xv', '?yv'))]) Operator.register("add", add_rule) add_then_ones = Operator(('Add_Then_Ones', '?x', '?y'), [(('value', '?x'), '?xv'), (('value', '?y'), '?yv'), # (lambda x, y: x <= y, '?x', '?y') ], [(('value', ('Add_Then_Ones', ('value', '?x'), ('value', '?y'))), (int2_float_add_then_ones, '?xv', '?yv'))]) add_then_tens = Operator(('Add_Then_Tens', '?x', '?y'), [(('value', '?x'), '?xv'), (('value', '?y'), '?yv'), # (lambda x, y: x <= y, '?x', '?y') ], [(('value', ('Add_Then_Tens', ('value', '?x'), ('value', '?y'))),