class_docstr: Functions that operate element-by-element on whole arrays.
  
  This is a class for LAX-backed implementations of numpy ufuncs.
code: def outer(self, A: ArrayLike, B: ArrayLike, /, **kwargs) -> Array:
      if self.nin != 2:
          raise ValueError("outer only supported for binary ufuncs")
      if self.nout != 1:
          raise ValueError(
              "outer only supported for functions returning a single value"
          )
      check_arraylike(f"{self.__name__}.outer", A, B)
      _ravel = lambda A: jax.lax.reshape(A, (np.size(A),))
      result = jax.vmap(
          jax.vmap(partial(self._call, **kwargs), (None, 0)), (0, None)
      )(_ravel(A), _ravel(B))
      return result.reshape(*np.shape(A), *np.shape(B))
  
imports: from __future__ import annotations
  from functools import partial
  import math
  import operator
  from typing import Any, Callable
  import jax
  from jax._src.typing import Array, ArrayLike, DTypeLike
  from jax._src.lax import lax
  from jax._src.numpy import reductions
  from jax._src.numpy.lax_numpy import _eliminate_deprecated_list_indexing, append, take
  from jax._src.numpy.reductions import _moveaxis
  from jax._src.numpy.util import _wraps, check_arraylike, _broadcast_to, _where
  from jax._src.numpy.vectorize import vectorize
  from jax._src.util import canonicalize_axis, set_module
  import numpy
label_desc: Use image node_id 14 for calling the ufunc obj's underlying member method code with example usage: obj.outer() and returns: result