diff --git a/examples/ss_vae_delayed.py b/examples/ss_vae_delayed.py
index 6548979..4671887 100644
--- a/examples/ss_vae_delayed.py
+++ b/examples/ss_vae_delayed.py
@@ -23,9 +23,9 @@ class SalientEncoder(nn.Module):
     pass  # TODO
 
 
-decoder = funsor.function((), (), ())(Decoder())
-nuisance_encoder = funsor.function((), ('loc_scale',))(NuisanceEncoder())
-salient_encoder = funsor.function((), (), ())(SalientEncoder())
+decoder = funsor.torch.function((), (), ())(Decoder())
+nuisance_encoder = funsor.torch.function((), ('loc_scale',))(NuisanceEncoder())
+salient_encoder = funsor.torch.function((), (), ())(SalientEncoder())
 
 
 def model(image=None):
diff --git a/funsor/__init__.py b/funsor/__init__.py
index a65ec82..be891ff 100644
--- a/funsor/__init__.py
+++ b/funsor/__init__.py
@@ -3,14 +3,13 @@ from __future__ import absolute_import, division, print_function
 from funsor.domains import Domain, bint, find_domain, reals
 from funsor.interpreter import reinterpret
 from funsor.terms import Funsor, Number, Variable, of_shape, to_funsor
-from funsor.torch import Function, Tensor, arange, function, torch_einsum
+from funsor.torch import Tensor, arange, torch_einsum
 
 from . import (adjoint, delta, distributions, domains, einsum, gaussian, handlers, interpreter, joint,
                minipyro, ops, sum_product, terms, torch)
 
 __all__ = [
     'Domain',
-    'Function',
     'Funsor',
     'Number',
     'Tensor',
@@ -24,7 +23,6 @@ __all__ = [
     'domains',
     'einsum',
     'find_domain',
-    'function',
     'gaussian',
     'handlers',
     'interpreter',
diff --git a/funsor/torch.py b/funsor/torch.py
index 7e71503..7e8439b 100644
--- a/funsor/torch.py
+++ b/funsor/torch.py
@@ -93,8 +93,9 @@ class Tensor(Funsor):
     def __init__(self, data, inputs=None, dtype="real"):
         assert isinstance(data, torch.Tensor)
         assert isinstance(inputs, tuple)
-        assert all(isinstance(d.dtype, integer_types) for k, d in inputs)
         assert len(inputs) <= data.dim()
+        for (k, d), size in zip(inputs, data.shape):
+            assert d.dtype == size
         inputs = OrderedDict(inputs)
         output = Domain(data.shape[len(inputs):], dtype)
         super(Tensor, self).__init__(inputs, output)
@@ -375,18 +376,23 @@ def materialize(x):
     return x.eager_subs(subs)
 
 
+class LazyTuple(tuple):
+    def __call__(self, *args, **kwargs):
+        return LazyTuple(x(*args, **kwargs) for x in self)
+
+
 class Function(Funsor):
     r"""
     Funsor wrapped by a PyTorch function.
 
-    Functions are support broadcasting and can be eagerly evaluated on funsors
-    with free variables of int type (i.e. batch dimensions).
+    Functions are assumed to support broadcasting and can be eagerly evaluated
+    on funsors with free variables of int type (i.e. batch dimensions).
 
-    :class:`Function`s are often created via the :func:`function` decorator.
+    :class:`Function`s are usually created via the :func:`function` decorator.
 
     :param callable fn: A PyTorch function to wrap.
     :param funsor.domains.Domain output: An output domain.
-    :param Funsor \*args: Funsor arguments.
+    :param Funsor args: Funsor arguments.
     """
     def __init__(self, fn, output, args):
         assert callable(fn)
@@ -400,12 +406,12 @@ class Function(Funsor):
         self.args = args
 
     def __repr__(self):
-        return 'Function({})'.format(', '.join(
-            [type(self).__name__, repr(self.output)] + list(map(repr, self.args))))
+        return '{}({}, {}, {})'.format(type(self).__name__, self.fn.__name__,
+                                       repr(self.output), repr(self.args))
 
     def __str__(self):
-        return 'Function({})'.format(', '.join(
-            [type(self).__name__, str(self.output)] + list(map(str, self.args))))
+        return '{}({}, {}, {})'.format(type(self).__name__, self.fn.__name__,
+                                       str(self.output), str(self.args))
 
     def eager_subs(self, subs):
         if not any(k in self.inputs for k, v in subs):
@@ -425,11 +431,54 @@ def eager_function(fn, output, args):
     return result
 
 
+def _select(fn, i, *args):
+    result = fn(*args)
+    assert isinstance(result, tuple)
+    return result[i]
+
+
+def _nested_function(fn, args, output):
+    if isinstance(output, Domain):
+        return Function(fn, output, args)
+    elif isinstance(output, tuple):
+        result = []
+        for i, output_i in enumerate(output):
+            fn_i = functools.partial(_select, fn, i)
+            fn_i.__name__ = "{}_{}".format(fn_i, i)
+            result.append(_nested_function(fn_i, args, output_i))
+        return LazyTuple(result)
+    raise TypeError("Invalid output: {}".format(output))
+
+
+class _Memoized(object):
+    def __init__(self, fn):
+        self.fn = fn
+        self._cache = None
+
+    def __call__(self, *args):
+        if self._cache is not None:
+            old_args, old_result = self._cache
+            if all(x is y for x, y in zip(args, old_args)):
+                return old_result
+        result = self.fn(*args)
+        self._cache = args, result
+        return result
+
+    @property
+    def __name__(self):
+        return self.fn.__name__
+
+
 def _function(inputs, output, fn):
     names = getargspec(fn)[0]
     args = tuple(Variable(name, domain) for (name, domain) in zip(names, inputs))
     assert len(args) == len(inputs)
-    return Function(fn, output, args)
+    if not isinstance(output, Domain):
+        assert isinstance(output, tuple)
+        # Memoize multiple-output functions so that invocations can be shared among
+        # all outputs. This is not foolproof, but does work in simple situations.
+        fn = _Memoized(fn)
+    return _nested_function(fn, args, output)
 
 
 def function(*signature):
@@ -438,21 +487,29 @@ def function(*signature):
 
     Example::
 
-        @funsor.function(reals(3,4), reals(4,5), reals(3,5))
+        @funsor.torch.function(reals(3,4), reals(4,5), reals(3,5))
         def matmul(x, y):
             return torch.matmul(x, y)
 
-        @funsor.function(reals(10), reals(10, 10), reals())
+        @funsor.torch.function(reals(10), reals(10, 10), reals())
         def mvn_log_prob(loc, scale_tril, x):
             d = torch.distributions.MultivariateNormal(loc, scale_tril)
             return d.log_prob(x)
 
+    To support functions that output nested tuples of tensors, specify a nested
+    tuple of output types, for example:
+
+        @funsor.torch.function(reals(8), (reals(), bint(8)))
+        def max_and_argmax(x):
+            return torch.max(x, dim=-1)
+
     :param \*signature: A sequence if input domains followed by a final output
         domain.
     """
     assert signature
-    assert all(isinstance(d, Domain) for d in signature)
     inputs, output = signature[:-1], signature[-1]
+    assert all(isinstance(d, Domain) for d in inputs)
+    assert isinstance(output, (Domain, tuple))
     return functools.partial(_function, inputs, output)
 
 
@@ -479,7 +536,9 @@ def torch_einsum(equation, *operands):
     return Function(fn, output, operands)
 
 
+################################################################################
 # Register Ops
+################################################################################
 
 @ops.abs.register(torch.Tensor)
 def _abs(x):
@@ -585,13 +644,13 @@ REDUCE_OP_TO_TORCH = {
 
 
 __all__ = [
-    'REDUCE_OP_TO_TORCH',
     'Function',
+    'REDUCE_OP_TO_TORCH',
     'Tensor',
     'align_tensor',
     'align_tensors',
     'arange',
-    'torch_einsum',
     'function',
     'materialize',
+    'torch_einsum',
 ]

diff --git a/test/test_distributions.py b/test/test_distributions.py
index 8f9de6a..d72ec1a 100644
--- a/test/test_distributions.py
+++ b/test/test_distributions.py
@@ -59,7 +59,7 @@ def test_delta_density(batch_shape, event_shape):
     batch_dims = ('i', 'j', 'k')[:len(batch_shape)]
     inputs = OrderedDict((k, bint(v)) for k, v in zip(batch_dims, batch_shape))
 
-    @funsor.function(reals(*event_shape), reals(), reals(*event_shape), reals())
+    @funsor.torch.function(reals(*event_shape), reals(), reals(*event_shape), reals())
     def delta(v, log_density, value):
         eq = (v == value)
         for _ in range(len(event_shape)):
@@ -198,7 +198,7 @@ def test_mvn_density(batch_shape):
     batch_dims = ('i', 'j', 'k')[:len(batch_shape)]
     inputs = OrderedDict((k, bint(v)) for k, v in zip(batch_dims, batch_shape))
 
-    @funsor.function(reals(3), reals(3, 3), reals(3), reals())
+    @funsor.torch.function(reals(3), reals(3, 3), reals(3), reals())
     def mvn(loc, scale_tril, value):
         return torch.distributions.MultivariateNormal(loc, scale_tril=scale_tril).log_prob(value)
 
diff --git a/test/test_torch.py b/test/test_torch.py
index 684c6a9..2bb6cb6 100644
--- a/test/test_torch.py
+++ b/test/test_torch.py
@@ -384,7 +384,7 @@ def test_all_equal(shape):
 
 def test_function_matmul():
 
-    @funsor.function(reals(3, 4), reals(4, 5), reals(3, 5))
+    @funsor.torch.function(reals(3, 4), reals(4, 5), reals(3, 5))
     def matmul(x, y):
         return torch.matmul(x, y)
 
@@ -399,15 +399,15 @@ def test_function_matmul():
 
 def test_function_lazy_matmul():
 
-    @funsor.function(reals(3, 4), reals(4, 5), reals(3, 5))
+    @funsor.torch.function(reals(3, 4), reals(4, 5), reals(3, 5))
     def matmul(x, y):
         return torch.matmul(x, y)
 
-    x_lazy = funsor.Variable('x', reals(3, 4))
+    x_lazy = Variable('x', reals(3, 4))
     y = Tensor(torch.randn(4, 5))
     actual_lazy = matmul(x_lazy, y)
     check_funsor(actual_lazy, {'x': reals(3, 4)}, reals(3, 5))
-    assert isinstance(actual_lazy, funsor.Function)
+    assert isinstance(actual_lazy, funsor.torch.Function)
 
     x = Tensor(torch.randn(3, 4))
     actual = actual_lazy(x=x)
@@ -415,6 +415,45 @@ def test_function_lazy_matmul():
     check_funsor(actual, {}, reals(3, 5), expected_data)
 
 
+def test_function_nested_eager():
+
+    @funsor.torch.function(reals(8), (reals(), bint(8)))
+    def max_and_argmax(x):
+        return torch.max(x, dim=-1)
+
+    inputs = OrderedDict([('i', bint(2)), ('j', bint(3))])
+    x = Tensor(torch.randn(2, 3, 8), inputs)
+    m, a = x.data.max(dim=-1)
+    expected_max = Tensor(m, inputs, 'real')
+    expected_argmax = Tensor(a, inputs, 8)
+
+    actual_max, actual_argmax = max_and_argmax(x)
+    assert_close(actual_max, expected_max)
+    assert_close(actual_argmax, expected_argmax)
+
+
+def test_function_nested_lazy():
+
+    @funsor.torch.function(reals(8), (reals(), bint(8)))
+    def max_and_argmax(x):
+        return torch.max(x, dim=-1)
+
+    x_lazy = Variable('x', reals(8))
+    lazy_max, lazy_argmax = max_and_argmax(x_lazy)
+    assert isinstance(lazy_max, funsor.torch.Function)
+    assert isinstance(lazy_argmax, funsor.torch.Function)
+    check_funsor(lazy_max, {'x': reals(8)}, reals())
+    check_funsor(lazy_argmax, {'x': reals(8)}, bint(8))
+
+    inputs = OrderedDict([('i', bint(2)), ('j', bint(3))])
+    y = Tensor(torch.randn(2, 3, 8), inputs)
+    actual_max = lazy_max(x=y)
+    actual_argmax = lazy_argmax(x=y)
+    expected_max, expected_argmax = max_and_argmax(y)
+    assert_close(actual_max, expected_max)
+    assert_close(actual_argmax, expected_argmax)
+
+
 def test_align():
     x = Tensor(torch.randn(2, 3, 4), OrderedDict([
         ('i', bint(2)),

Support torch.nn.Module with multiple outputs
test/test_torch.py::test_function_nested_eager test/test_torch.py::test_function_nested_lazy
test/test_distributions.py::test_categorical_defaults test/test_distributions.py::test_categorical_density[()-4] test/test_distributions.py::test_categorical_density[(5,)-4] test/test_distributions.py::test_categorical_density[(2, test/test_distributions.py::test_delta_defaults test/test_distributions.py::test_delta_density[()-()] test/test_distributions.py::test_delta_density[()-(4,)] test/test_distributions.py::test_delta_density[()-(3, test/test_distributions.py::test_delta_density[(5,)-()] test/test_distributions.py::test_delta_density[(5,)-(4,)] test/test_distributions.py::test_delta_density[(5,)-(3, test/test_distributions.py::test_delta_density[(2, test/test_distributions.py::test_delta_delta test/test_distributions.py::test_normal_defaults test/test_distributions.py::test_normal_density[()] test/test_distributions.py::test_normal_density[(5,)] test/test_distributions.py::test_normal_density[(2, test/test_distributions.py::test_normal_gaussian_1[()] test/test_distributions.py::test_normal_gaussian_1[(5,)] test/test_distributions.py::test_normal_gaussian_1[(2, test/test_distributions.py::test_normal_gaussian_2[()] test/test_distributions.py::test_normal_gaussian_2[(5,)] test/test_distributions.py::test_normal_gaussian_2[(2, test/test_distributions.py::test_normal_gaussian_3[()] test/test_distributions.py::test_normal_gaussian_3[(5,)] test/test_distributions.py::test_normal_gaussian_3[(2, test/test_distributions.py::test_mvn_defaults test/test_distributions.py::test_mvn_density[()] test/test_distributions.py::test_mvn_density[(5,)] test/test_distributions.py::test_mvn_density[(2, test/test_distributions.py::test_mvn_gaussian[()] test/test_distributions.py::test_mvn_gaussian[(5,)] test/test_distributions.py::test_mvn_gaussian[(2, test/test_torch.py::test_to_funsor[dtype0-shape0] test/test_torch.py::test_to_funsor[dtype0-shape1] test/test_torch.py::test_to_funsor[dtype0-shape2] test/test_torch.py::test_to_funsor[dtype1-shape0] test/test_torch.py::test_to_funsor[dtype1-shape1] test/test_torch.py::test_to_funsor[dtype1-shape2] test/test_torch.py::test_to_funsor[dtype2-shape0] test/test_torch.py::test_to_funsor[dtype2-shape1] test/test_torch.py::test_to_funsor[dtype2-shape2] test/test_torch.py::test_cons_hash test/test_torch.py::test_indexing test/test_torch.py::test_advanced_indexing_shape test/test_torch.py::test_advanced_indexing_tensor[output_shape0] test/test_torch.py::test_advanced_indexing_tensor[output_shape1] test/test_torch.py::test_advanced_indexing_tensor[output_shape2] test/test_torch.py::test_advanced_indexing_lazy[output_shape0] test/test_torch.py::test_advanced_indexing_lazy[output_shape1] test/test_torch.py::test_advanced_indexing_lazy[output_shape2] test/test_torch.py::test_unary[~-dims0] test/test_torch.py::test_unary[~-dims1] test/test_torch.py::test_unary[~-dims2] test/test_torch.py::test_unary[--dims0] test/test_torch.py::test_unary[--dims1] test/test_torch.py::test_unary[--dims2] test/test_torch.py::test_unary[abs-dims0] test/test_torch.py::test_unary[abs-dims1] test/test_torch.py::test_unary[abs-dims2] test/test_torch.py::test_unary[sqrt-dims0] test/test_torch.py::test_unary[sqrt-dims1] test/test_torch.py::test_unary[sqrt-dims2] test/test_torch.py::test_unary[exp-dims0] test/test_torch.py::test_unary[exp-dims1] test/test_torch.py::test_unary[exp-dims2] test/test_torch.py::test_unary[log-dims0] test/test_torch.py::test_unary[log-dims1] test/test_torch.py::test_unary[log-dims2] test/test_torch.py::test_unary[log1p-dims0] test/test_torch.py::test_unary[log1p-dims1] test/test_torch.py::test_unary[log1p-dims2] test/test_torch.py::test_binary_funsor_funsor[+-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[+-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[+-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[+-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[+-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[+-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[+-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[+-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[+-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[+-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[+-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[+-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[+-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[+-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[+-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[+-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[--dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[--dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[--dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[--dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[--dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[--dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[--dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[--dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[--dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[--dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[--dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[--dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[--dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[--dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[--dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[--dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[*-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[*-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[*-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[*-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[*-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[*-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[*-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[*-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[*-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[*-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[*-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[*-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[*-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[*-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[*-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[*-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[/-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[/-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[/-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[/-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[/-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[/-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[/-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[/-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[/-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[/-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[/-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[/-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[/-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[/-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[/-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[/-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[**-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[**-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[**-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[**-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[**-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[**-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[**-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[**-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[**-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[**-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[**-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[**-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[**-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[**-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[**-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[**-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[==-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[==-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[==-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[==-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[==-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[==-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[==-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[==-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[==-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[==-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[==-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[==-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[==-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[==-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[==-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[==-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[!=-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[!=-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[!=-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[!=-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[!=-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[!=-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[!=-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[!=-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[!=-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[!=-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[!=-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[!=-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[!=-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[!=-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[!=-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[!=-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[<-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[<-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[<-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[<-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[<-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[<-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[<-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[<-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[<-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[<-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[<-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[<-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[<-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[<-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[<-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[<-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[<=-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[<=-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[<=-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[<=-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[<=-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[<=-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[<=-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[<=-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[<=-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[<=-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[<=-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[<=-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[<=-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[<=-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[<=-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[<=-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[>-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[>-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[>-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[>-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[>-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[>-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[>-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[>-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[>-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[>-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[>-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[>-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[>-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[>-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[>-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[>-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[>=-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[>=-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[>=-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[>=-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[>=-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[>=-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[>=-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[>=-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[>=-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[>=-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[>=-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[>=-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[>=-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[>=-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[>=-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[>=-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[min-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[min-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[min-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[min-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[min-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[min-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[min-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[min-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[min-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[min-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[min-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[min-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[min-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[min-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[min-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[min-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[max-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[max-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[max-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[max-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[max-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[max-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[max-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[max-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[max-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[max-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[max-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[max-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[max-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[max-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[max-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[max-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[&-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[&-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[&-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[&-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[&-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[&-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[&-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[&-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[&-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[&-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[&-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[&-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[&-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[&-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[&-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[&-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[|-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[|-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[|-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[|-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[|-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[|-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[|-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[|-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[|-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[|-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[|-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[|-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[|-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[|-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[|-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[|-dims13-dims23] test/test_torch.py::test_binary_funsor_funsor[^-dims10-dims20] test/test_torch.py::test_binary_funsor_funsor[^-dims10-dims21] test/test_torch.py::test_binary_funsor_funsor[^-dims10-dims22] test/test_torch.py::test_binary_funsor_funsor[^-dims10-dims23] test/test_torch.py::test_binary_funsor_funsor[^-dims11-dims20] test/test_torch.py::test_binary_funsor_funsor[^-dims11-dims21] test/test_torch.py::test_binary_funsor_funsor[^-dims11-dims22] test/test_torch.py::test_binary_funsor_funsor[^-dims11-dims23] test/test_torch.py::test_binary_funsor_funsor[^-dims12-dims20] test/test_torch.py::test_binary_funsor_funsor[^-dims12-dims21] test/test_torch.py::test_binary_funsor_funsor[^-dims12-dims22] test/test_torch.py::test_binary_funsor_funsor[^-dims12-dims23] test/test_torch.py::test_binary_funsor_funsor[^-dims13-dims20] test/test_torch.py::test_binary_funsor_funsor[^-dims13-dims21] test/test_torch.py::test_binary_funsor_funsor[^-dims13-dims22] test/test_torch.py::test_binary_funsor_funsor[^-dims13-dims23] test/test_torch.py::test_binary_funsor_scalar[+-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[+-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[+-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[+-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[--dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[--dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[--dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[--dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[*-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[*-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[*-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[*-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[/-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[/-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[/-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[/-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[**-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[**-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[**-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[**-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[==-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[==-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[==-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[==-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[!=-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[!=-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[!=-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[!=-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[<-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[<-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[<-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[<-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[<=-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[<=-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[<=-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[<=-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[>-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[>-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[>-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[>-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[>=-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[>=-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[>=-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[>=-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[min-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[min-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[min-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[min-dims3-0.5] test/test_torch.py::test_binary_funsor_scalar[max-dims0-0.5] test/test_torch.py::test_binary_funsor_scalar[max-dims1-0.5] test/test_torch.py::test_binary_funsor_scalar[max-dims2-0.5] test/test_torch.py::test_binary_funsor_scalar[max-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[+-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[+-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[+-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[+-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[--dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[--dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[--dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[--dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[*-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[*-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[*-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[*-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[/-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[/-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[/-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[/-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[**-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[**-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[**-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[**-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[==-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[==-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[==-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[==-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[!=-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[!=-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[!=-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[!=-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[<-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[<-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[<-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[<-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[<=-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[<=-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[<=-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[<=-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[>-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[>-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[>-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[>-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[>=-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[>=-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[>=-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[>=-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[min-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[min-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[min-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[min-dims3-0.5] test/test_torch.py::test_binary_scalar_funsor[max-dims0-0.5] test/test_torch.py::test_binary_scalar_funsor[max-dims1-0.5] test/test_torch.py::test_binary_scalar_funsor[max-dims2-0.5] test/test_torch.py::test_binary_scalar_funsor[max-dims3-0.5] test/test_torch.py::test_reduce_all[<dispatched test/test_torch.py::test_reduce_subset[add-dims0-reduced_vars0] test/test_torch.py::test_reduce_subset[add-dims1-reduced_vars1] test/test_torch.py::test_reduce_subset[add-dims2-reduced_vars2] test/test_torch.py::test_reduce_subset[add-dims3-reduced_vars3] test/test_torch.py::test_reduce_subset[add-dims4-reduced_vars4] test/test_torch.py::test_reduce_subset[add-dims5-reduced_vars5] test/test_torch.py::test_reduce_subset[add-dims6-reduced_vars6] test/test_torch.py::test_reduce_subset[add-dims7-reduced_vars7] test/test_torch.py::test_reduce_subset[add-dims8-reduced_vars8] test/test_torch.py::test_reduce_subset[add-dims9-reduced_vars9] test/test_torch.py::test_reduce_subset[add-dims10-reduced_vars10] test/test_torch.py::test_reduce_subset[add-dims11-reduced_vars11] test/test_torch.py::test_reduce_subset[add-dims12-reduced_vars12] test/test_torch.py::test_reduce_subset[add-dims13-reduced_vars13] test/test_torch.py::test_reduce_subset[mul-dims0-reduced_vars0] test/test_torch.py::test_reduce_subset[mul-dims1-reduced_vars1] test/test_torch.py::test_reduce_subset[mul-dims2-reduced_vars2] test/test_torch.py::test_reduce_subset[mul-dims3-reduced_vars3] test/test_torch.py::test_reduce_subset[mul-dims4-reduced_vars4] test/test_torch.py::test_reduce_subset[mul-dims5-reduced_vars5] test/test_torch.py::test_reduce_subset[mul-dims6-reduced_vars6] test/test_torch.py::test_reduce_subset[mul-dims7-reduced_vars7] test/test_torch.py::test_reduce_subset[mul-dims8-reduced_vars8] test/test_torch.py::test_reduce_subset[mul-dims9-reduced_vars9] test/test_torch.py::test_reduce_subset[mul-dims10-reduced_vars10] test/test_torch.py::test_reduce_subset[mul-dims11-reduced_vars11] test/test_torch.py::test_reduce_subset[mul-dims12-reduced_vars12] test/test_torch.py::test_reduce_subset[mul-dims13-reduced_vars13] test/test_torch.py::test_reduce_subset[and_-dims0-reduced_vars0] test/test_torch.py::test_reduce_subset[and_-dims1-reduced_vars1] test/test_torch.py::test_reduce_subset[and_-dims2-reduced_vars2] test/test_torch.py::test_reduce_subset[and_-dims3-reduced_vars3] test/test_torch.py::test_reduce_subset[and_-dims4-reduced_vars4] test/test_torch.py::test_reduce_subset[and_-dims5-reduced_vars5] test/test_torch.py::test_reduce_subset[and_-dims6-reduced_vars6] test/test_torch.py::test_reduce_subset[and_-dims7-reduced_vars7] test/test_torch.py::test_reduce_subset[and_-dims8-reduced_vars8] test/test_torch.py::test_reduce_subset[and_-dims9-reduced_vars9] test/test_torch.py::test_reduce_subset[and_-dims10-reduced_vars10] test/test_torch.py::test_reduce_subset[and_-dims11-reduced_vars11] test/test_torch.py::test_reduce_subset[and_-dims12-reduced_vars12] test/test_torch.py::test_reduce_subset[and_-dims13-reduced_vars13] test/test_torch.py::test_reduce_subset[or_-dims0-reduced_vars0] test/test_torch.py::test_reduce_subset[or_-dims1-reduced_vars1] test/test_torch.py::test_reduce_subset[or_-dims2-reduced_vars2] test/test_torch.py::test_reduce_subset[or_-dims3-reduced_vars3] test/test_torch.py::test_reduce_subset[or_-dims4-reduced_vars4] test/test_torch.py::test_reduce_subset[or_-dims5-reduced_vars5] test/test_torch.py::test_reduce_subset[or_-dims6-reduced_vars6] test/test_torch.py::test_reduce_subset[or_-dims7-reduced_vars7] test/test_torch.py::test_reduce_subset[or_-dims8-reduced_vars8] test/test_torch.py::test_reduce_subset[or_-dims9-reduced_vars9] test/test_torch.py::test_reduce_subset[or_-dims10-reduced_vars10] test/test_torch.py::test_reduce_subset[or_-dims11-reduced_vars11] test/test_torch.py::test_reduce_subset[or_-dims12-reduced_vars12] test/test_torch.py::test_reduce_subset[or_-dims13-reduced_vars13] test/test_torch.py::test_reduce_subset[logaddexp-dims0-reduced_vars0] test/test_torch.py::test_reduce_subset[logaddexp-dims1-reduced_vars1] test/test_torch.py::test_reduce_subset[logaddexp-dims2-reduced_vars2] test/test_torch.py::test_reduce_subset[logaddexp-dims3-reduced_vars3] test/test_torch.py::test_reduce_subset[logaddexp-dims4-reduced_vars4] test/test_torch.py::test_reduce_subset[logaddexp-dims5-reduced_vars5] test/test_torch.py::test_reduce_subset[logaddexp-dims6-reduced_vars6] test/test_torch.py::test_reduce_subset[logaddexp-dims7-reduced_vars7] test/test_torch.py::test_reduce_subset[logaddexp-dims8-reduced_vars8] test/test_torch.py::test_reduce_subset[logaddexp-dims9-reduced_vars9] test/test_torch.py::test_reduce_subset[logaddexp-dims10-reduced_vars10] test/test_torch.py::test_reduce_subset[logaddexp-dims11-reduced_vars11] test/test_torch.py::test_reduce_subset[logaddexp-dims12-reduced_vars12] test/test_torch.py::test_reduce_subset[logaddexp-dims13-reduced_vars13] test/test_torch.py::test_reduce_subset[min-dims0-reduced_vars0] test/test_torch.py::test_reduce_subset[min-dims1-reduced_vars1] test/test_torch.py::test_reduce_subset[min-dims2-reduced_vars2] test/test_torch.py::test_reduce_subset[min-dims3-reduced_vars3] test/test_torch.py::test_reduce_subset[min-dims4-reduced_vars4] test/test_torch.py::test_reduce_subset[min-dims5-reduced_vars5] test/test_torch.py::test_reduce_subset[min-dims6-reduced_vars6] test/test_torch.py::test_reduce_subset[min-dims7-reduced_vars7] test/test_torch.py::test_reduce_subset[min-dims8-reduced_vars8] test/test_torch.py::test_reduce_subset[min-dims9-reduced_vars9] test/test_torch.py::test_reduce_subset[min-dims10-reduced_vars10] test/test_torch.py::test_reduce_subset[min-dims11-reduced_vars11] test/test_torch.py::test_reduce_subset[min-dims12-reduced_vars12] test/test_torch.py::test_reduce_subset[min-dims13-reduced_vars13] test/test_torch.py::test_reduce_subset[max-dims0-reduced_vars0] test/test_torch.py::test_reduce_subset[max-dims1-reduced_vars1] test/test_torch.py::test_reduce_subset[max-dims2-reduced_vars2] test/test_torch.py::test_reduce_subset[max-dims3-reduced_vars3] test/test_torch.py::test_reduce_subset[max-dims4-reduced_vars4] test/test_torch.py::test_reduce_subset[max-dims5-reduced_vars5] test/test_torch.py::test_reduce_subset[max-dims6-reduced_vars6] test/test_torch.py::test_reduce_subset[max-dims7-reduced_vars7] test/test_torch.py::test_reduce_subset[max-dims8-reduced_vars8] test/test_torch.py::test_reduce_subset[max-dims9-reduced_vars9] test/test_torch.py::test_reduce_subset[max-dims10-reduced_vars10] test/test_torch.py::test_reduce_subset[max-dims11-reduced_vars11] test/test_torch.py::test_reduce_subset[max-dims12-reduced_vars12] test/test_torch.py::test_reduce_subset[max-dims13-reduced_vars13] test/test_torch.py::test_reduce_event[<dispatched test/test_torch.py::test_all_equal[shape0] test/test_torch.py::test_all_equal[shape1] test/test_torch.py::test_all_equal[shape2] test/test_torch.py::test_function_matmul test/test_torch.py::test_function_lazy_matmul test/test_torch.py::test_align test/test_torch.py::test_einsum[a->a] test/test_torch.py::test_einsum[a,a->a] test/test_torch.py::test_einsum[a,b->] test/test_torch.py::test_einsum[a,b->a] test/test_torch.py::test_einsum[a,b->b] test/test_torch.py::test_einsum[a,b->ab] test/test_torch.py::test_einsum[a,b->ba] test/test_torch.py::test_einsum[ab,ba->] test/test_torch.py::test_einsum[ab,ba->a] test/test_torch.py::test_einsum[ab,ba->b] test/test_torch.py::test_einsum[ab,ba->ab] test/test_torch.py::test_einsum[ab,ba->ba] test/test_torch.py::test_einsum[ab,bc->ac]