def _test_property(self, fn):
    for constructor in _iter_constructors():
        num_nested_tensor = 3
        nested_tensor_lists = [utils.gen_nested_list(i, i, 3)
                               for i in range(1, num_nested_tensor)]
        first_tensors = [utils.get_first_tensor(
            ntl) for ntl in nested_tensor_lists]
        nested_tensors = [constructor(ntl) for ntl in nested_tensor_lists]
        for nested_tensor, first_tensor in zip(nested_tensors, first_tensors):
            self.assertEqual(fn(nested_tensor), fn(first_tensor))
Beispiel #2
0
def _test_property(self, fn):
    for constructor in _iter_constructors():
        # TODO: Used to be 3. Currently only supporting nested dim 1.
        num_nested_tensor = 1
        nested_tensor_lists = [utils.gen_nested_list(i, i, 3)
                               for i in range(1, num_nested_tensor)]
        first_tensors = [utils.get_first_tensor(
            ntl) for ntl in nested_tensor_lists]
        nested_tensors = [constructor(ntl) for ntl in nested_tensor_lists]
        for nested_tensor, first_tensor in zip(nested_tensors, first_tensors):
            self.assertEqual(fn(nested_tensor), fn(first_tensor))
Beispiel #3
0
    def _test_unary(self):
        data = utils.gen_nested_list(1, nested_dim, 3)
        data = utils.nested_map(lambda x: x.to(device), data)

        if func__ in ['log', 'log10', 'log2', 'rsqrt', 'sqrt']:
            data = utils.nested_map(lambda x: x.abs(), data)
        if func__ in ['acos', 'asin', 'erfinv', 'log1p']:
            data = utils.nested_map(lambda x: x.clamp(min=0, max=1), data)
        if func__ in ['mvlgamma']:
            data = utils.nested_map(lambda x: x.clamp(min=1), data)

        func_ = getattr(torch, func__)
        method_ = getattr(nestedtensor.NestedTensor, func__)
        method_inplace_ = getattr(nestedtensor.NestedTensor, func__ + "_")
        if func__ in ['clamp']:

            def func(x, out=None):
                return func_(x, min=-1, max=1, out=out)

            def method(x):
                return method_(x, min=-1, max=1)

            def method_inplace(x):
                return method_inplace_(x, min=-1, max=1)
        elif func__ in ['clamp_min']:

            def func(x, out=None):
                return func_(x, min=-1, out=out)

            def method(x):
                return method_(x, min=-1)

            def method_inplace(x):
                return method_inplace_(x, min=-1)
        elif func__ in ['clamp_max']:

            def func(x, out=None):
                return func_(x, 1, out=out)

            def method(x):
                return method_(x, 1)

            def method_inplace(x):
                return method_inplace_(x, 1)
        elif func__ in ['mvlgamma']:

            def func(x):
                return func_(x, p=2)

            def method(x):
                return method_(x, p=2)

            def method_inplace(x):
                return method_inplace_(x, p=2)
        elif func__ in ['renorm']:

            def func(x, out=None):
                return func_(x, 2, 0, 1.0, out=out)

            def method(x):
                return method_(x, 2, 0, 1.0)

            def method_inplace(x):
                return method_inplace_(x, 2, 0, 1.0)
        elif func__ in ['fmod']:

            def func(x, out=None):
                return func_(x, 0.3, out=out)

            def method(x):
                return method_(x, 0.3)

            def method_inplace(x):
                return method_inplace_(x, 0.3)
        else:
            func = func_
            method = method_
            method_inplace = method_inplace_

        def _close(t1, t2):
            self.assertAlmostEqual(t1, t2, ignore_contiguity=True)

        a1 = ntnt(data, device=device)
        a2 = ntnt(utils.nested_map(func, data), device=device)
        _close(func(a1), a2)
        _close(method(a1), a2)

        a1 = ntnt_nograd(data, device=device)
        a2 = ntnt_nograd(utils.nested_map(func, data), device=device)
        a3 = ntnt_nograd(data, device=device)

        self.assertEqual(a1.nested_dim(), a2.nested_dim())
        self.assertEqual(a2.nested_dim(), a3.nested_dim())

        if func__ not in ['mvlgamma']:
            func(a1, out=a3)
            # TODO: Abstract this
            _close(func(a1), a3)
        _close(method_inplace(a1), a2)
        _close(a1, a2)