Пример #1
0
def test_global(nullary_mm):
    obj = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: obj

    ua.set_global_backend(be)
    assert nullary_mm() is obj
Пример #2
0
def test_global(cleanup_backends):
    obj = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: obj
    mm = ua.generate_multimethod(lambda: (), lambda a, kw, d: (a, kw),
                                 "ua_tests")

    ua.set_global_backend(be)
    assert mm() is obj
Пример #3
0
def test_pickle_state():
    ua.set_global_backend(ComparableBackend("a"))
    ua.register_backend(ComparableBackend("b"))

    with ua.set_backend(ComparableBackend("c")), ua.skip_backend(
            ComparableBackend("d")):
        state = ua.get_state()

    state_loaded = pickle.loads(pickle.dumps(state))

    assert state._pickle() == state_loaded._pickle()
Пример #4
0
def test_global_try_last(nullary_mm):
    obj = object()
    obj2 = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: obj

    be2 = Backend()
    be2.__ua_function__ = lambda f, a, kw: obj2

    ua.set_global_backend(be, try_last=True)
    ua.register_backend(be2)
    assert nullary_mm() is obj2
Пример #5
0
def test_global_before_registered(cleanup_backends, nullary_mm):
    obj = object()
    obj2 = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: obj

    be2 = Backend()
    be2.__ua_function__ = lambda f, a, kw: obj2

    ua.set_global_backend(be)
    ua.register_backend(be2)
    assert nullary_mm() is obj
Пример #6
0
def ctx_before_global(nullary_mm):
    obj = object()
    obj2 = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: obj

    be2 = Backend()
    be2.__ua_function__ = lambda f, a, kw: obj2

    ua.set_global_backend(be)

    with ua.set_backend(be2):
        assert nullary_mm() is obj2
Пример #7
0
def test_getset_state(cleanup_backends):
    ua.set_global_backend(Backend())
    ua.register_backend(Backend())

    with ua.set_backend(Backend()), ua.skip_backend(Backend()):
        state = ua.get_state()

    pstate = state._pickle()

    assert pstate != ua.get_state()._pickle()

    with ua.set_state(state):
        assert pstate[:2] == ua.get_state()._pickle()[:2]
Пример #8
0
def test_global_only(nullary_mm):
    obj = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: NotImplemented

    be2 = Backend()
    be2.__ua_function__ = lambda f, a, kw: obj

    ua.set_global_backend(be, only=True)
    ua.register_backend(be2)

    with pytest.raises(ua.BackendNotImplementedError):
        nullary_mm()
Пример #9
0
def test_global_before_registered(cleanup_backends):
    obj = object()
    obj2 = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: obj

    be2 = Backend()
    be2.__ua_function__ = lambda f, a, kw: obj2
    mm = ua.generate_multimethod(lambda: (), lambda a, kw, d: (a, kw),
                                 "ua_tests")

    ua.set_global_backend(be)
    ua.register_backend(be2)
    assert mm() is obj
Пример #10
0
def test_clear_backends(nullary_mm):
    obj = object()
    obj2 = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: obj

    be2 = Backend()
    be2.__ua_function__ = lambda f, a, kw: obj2

    ua.set_global_backend(be)
    ua.register_backend(be2)

    ua.clear_backends(Backend.__ua_domain__, registered=True, globals=True)
    with pytest.raises(ua.BackendNotImplementedError):
        nullary_mm()
Пример #11
0
def test_global_only(cleanup_backends):
    obj = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: NotImplemented

    be2 = Backend()
    be2.__ua_function__ = lambda f, a, kw: obj
    mm = ua.generate_multimethod(lambda: (), lambda a, kw, d: (a, kw),
                                 "ua_tests")

    ua.set_global_backend(be, only=True)
    ua.register_backend(be2)

    with pytest.raises(ua.BackendNotImplementedError):
        mm()
Пример #12
0
def test_clear_backends(cleanup_backends):
    obj = object()
    obj2 = object()
    be = Backend()
    be.__ua_function__ = lambda f, a, kw: obj

    be2 = Backend()
    be2.__ua_function__ = lambda f, a, kw: obj2
    mm = ua.generate_multimethod(lambda: (), lambda a, kw, d: (a, kw),
                                 "ua_tests")

    ua.set_global_backend(be)
    ua.register_backend(be2)

    ua.clear_backends(Backend.__ua_domain__, registered=True, globals=True)
    with pytest.raises(ua.BackendNotImplementedError):
        mm()
Пример #13
0
def test_multidomain_backends():
    n_domains = 2
    be = DisableBackend(domain=["ua_tests" + str(i) for i in range(n_domains)])

    mms = [
        ua.generate_multimethod(lambda: (), lambda a, kw, d: (a, kw),
                                "ua_tests" + str(i)) for i in range(n_domains)
    ]

    def assert_no_backends():
        for i in range(len(mms)):
            with pytest.raises(ua.BackendNotImplementedError):
                mms[i]()

    def assert_backend_active(backend):
        assert all(mms[i]() is backend.ret for i in range(len(mms)))

    assert_no_backends()

    with ua.set_backend(be):
        assert_backend_active(be)

    ua.set_global_backend(be)
    assert_backend_active(be)

    with ua.skip_backend(be):
        assert_no_backends()

    assert_backend_active(be)

    for i in range(len(mms)):
        ua.clear_backends(mms[i].domain, globals=True)

        with pytest.raises(ua.BackendNotImplementedError):
            mms[i]()

        for j in range(i + 1, len(mms)):
            assert mms[j]() is be.ret

    assert_no_backends()

    ua.register_backend(be)
    assert_backend_active(be)
Пример #14
0
def test_hierarchical_backends():
    mm = ua.generate_multimethod(lambda: (), lambda a, kw, d: (a, kw),
                                 "ua_tests.foo.bar")
    subdomains = "ua_tests.foo.bar".split(".")
    depth = len(subdomains)

    mms = [
        ua.generate_multimethod(lambda: (), lambda a, kw, d: (a, kw),
                                ".".join(subdomains[:i + 1]))
        for i in range(depth)
    ]

    be = [DisableBackend(".".join(subdomains[:i + 1])) for i in range(depth)]

    ua.set_global_backend(be[1])
    with pytest.raises(ua.BackendNotImplementedError):
        mms[0]()

    for i in range(1, depth):
        assert mms[i]() is be[1].ret

    ua.set_global_backend(be[0])

    for i in range(depth):
        assert mms[i]() is be[min(i, 1)].ret

    ua.set_global_backend(be[2])

    for i in range(depth):
        assert mms[i]() is be[i].ret

    be[2].active = False
    for i in range(depth):
        print(i)
        assert mms[i]() is be[min(i, 1)].ret

    be[1].active = False
    for i in range(depth):
        assert mms[i]() is be[0].ret

    be[0].active = False
    for i in range(depth):
        with pytest.raises(ua.BackendNotImplementedError):
            mms[i]()

    # only=True prevents all further domain checking
    be[0].active = True
    be[1].active = True
    with ua.set_backend(be[2], only=True), pytest.raises(
            ua.BackendNotImplementedError):
        mms[2]()
Пример #15
0
import udiff
import sparse
from math import *
from random import uniform, randrange
import unumpy.numpy_backend as NumpyBackend

import unumpy.torch_backend as TorchBackend
import unumpy.dask_backend as DaskBackend
import unumpy.sparse_backend as SparseBackend

import numpy as onp
from numpy.testing import assert_allclose

import pytest

ua.set_global_backend(NumpyBackend)

LIST_BACKENDS = [
    NumpyBackend,
    # DaskBackend,
    # SparseBackend,
    pytest.param(
        TorchBackend,
        marks=pytest.mark.xfail(reason="PyTorch not fully NumPy compatible."),
    ),
]

FULLY_TESTED_BACKENDS = [NumpyBackend, DaskBackend]

try:
    import unumpy.cupy_backend as CupyBackend