def test_union_types():
    f = Dispatcher('f')
    f.register((int, float))(inc)

    assert f(1) == 2
    assert f(1.0) == 2.0
Beispiel #2
0

class IntPowerInt(IntegerExpression, PowerBase, FunctionOfInts):
    pass


class RealPowerInt(RealNumberExpression, PowerBase, FunctionOfInts):
    pass


class RealPowerReal(RealNumberExpression, PowerBase, FunctionOfReals):
    pass


Power = Dispatcher('Power')
Power.register(IntegerExpression, IntegerExpression)(IntPowerInt)
Power.register(RealNumberExpression, IntegerExpression)(RealPowerInt)
Power.register(RealNumberExpression, RealNumberExpression)(RealPowerReal)


class QuotientBase(NumberExpression, BinaryFunction):
    def __str__(self):
        return '(%s / %s)' % (self.lhs, self.rhs)


class QuotientReal(RealNumberExpression, QuotientBase, FunctionOfReals):
    pass


class QuotientInt(RealNumberExpression, QuotientBase, FunctionOfInts):
    pass
def test_vararg_not_last_element_of_signature():
    f = Dispatcher('f')
    assert raises(TypeError, lambda: f.register([float], str)(lambda: None))
def test_vararg_has_multiple_elements():
    f = Dispatcher('f')
    assert raises(TypeError, lambda: f.register([float, str])(lambda: None))
Beispiel #5
0
from collections import Iterable
from six import string_types

tupify = Dispatcher('tupify')


@tupify.register(Iterable)
def tupify_iterable(obj):
    return tuple(obj)


flatten = Dispatcher('flatten')


@flatten.register(object, Iterable)
def flatten_iterable(depth, arg):
    if depth > 0:
        return sum(tuple(tupify(flatten(depth - 1, x)) for x in arg), tuple())
    else:
        return arg


def tup_of_obj(x):
    return (x, )


tupify.register((object, string_types))(tup_of_obj)
flatten.register(object, (object, string_types))(lambda x, y: tup_of_obj(y))
# Currying for flatten
flatten.register(object)(lambda x: (lambda y: flatten(x, y)))