@infer_dtype(np.hypot)
def hypot(x1, x2, out=None, where=None, **kwargs):
    '\n    Given the "legs" of a right triangle, return its hypotenuse.\n\n    Equivalent to ``sqrt(x1**2 + x2**2)``, element-wise.  If `x1` or\n    `x2` is scalar_like (i.e., unambiguously cast-able to a scalar type),\n    it is broadcast for use with each element of the other argument.\n    (See Examples)\n\n    Parameters\n    ----------\n    x1, x2 : array_like\n        Leg of the triangle(s).\n    out : Tensor, None, or tuple of Tensor and None, optional\n        A location into which the result is stored. If provided, it must have\n        a shape that the inputs broadcast to. If not provided or `None`,\n        a freshly-allocated array is returned. A tuple (possible only as a\n        keyword argument) must have length equal to the number of outputs.\n    where : array_like, optional\n        Values of True indicate to calculate the ufunc at that position, values\n        of False indicate to leave the value in the output alone.\n    **kwargs\n\n    Returns\n    -------\n    z : Tensor\n        The hypotenuse of the triangle(s).\n\n    Examples\n    --------\n    >>> import mars.tensor as mt\n\n    >>> mt.hypot(3*mt.ones((3, 3)), 4*mt.ones((3, 3))).execute()\n    array([[ 5.,  5.,  5.],\n           [ 5.,  5.,  5.],\n           [ 5.,  5.,  5.]])\n\n    Example showing broadcast of scalar_like argument:\n\n    >>> mt.hypot(3*mt.ones((3, 3)), [4]).execute()\n    array([[ 5.,  5.,  5.],\n           [ 5.,  5.,  5.],\n           [ 5.,  5.,  5.]])\n    '
    op = TensorHypot(**kwargs)
    return op(x1, x2, out=out, where=where)
Given the "legs" of a right triangle, return its hypotenuse.

Equivalent to ``sqrt(x1**2 + x2**2)``, element-wise.  If `x1` or
`x2` is scalar_like (i.e., unambiguously cast-able to a scalar type),
it is broadcast for use with each element of the other argument.
(See Examples)

Parameters
----------
x1, x2 : array_like
    Leg of the triangle(s).
out : Tensor, None, or tuple of Tensor and None, optional
    A location into which the result is stored. If provided, it must have
    a shape that the inputs broadcast to. If not provided or `None`,
    a freshly-allocated array is returned. A tuple (possible only as a
    keyword argument) must have length equal to the number of outputs.
where : array_like, optional
    Values of True indicate to calculate the ufunc at that position, values
    of False indicate to leave the value in the output alone.
**kwargs

Returns
-------
z : Tensor
    The hypotenuse of the triangle(s).

Examples
--------
>>> import mars.tensor as mt

>>> mt.hypot(3*mt.ones((3, 3)), 4*mt.ones((3, 3))).execute()
array([[ 5.,  5.,  5.],
       [ 5.,  5.,  5.],
       [ 5.,  5.,  5.]])

Example showing broadcast of scalar_like argument:

>>> mt.hypot(3*mt.ones((3, 3)), [4]).execute()
array([[ 5.,  5.,  5.],
       [ 5.,  5.,  5.],
       [ 5.,  5.,  5.]])
@infer_dtype(np.hypot)
def hypot(x1, x2, out=None, where=None, **kwargs):
    '\n    Given the "legs" of a right triangle, return its hypotenuse.\n\n    Equivalent to ``sqrt(x1**2 + x2**2)``, element-wise.  If `x1` or\n    `x2` is scalar_like (i.e., unambiguously cast-able to a scalar type),\n    it is broadcast for use with each element of the other argument.\n    (See Examples)\n\n    Parameters\n    ----------\n    x1, x2 : array_like\n        Leg of the triangle(s).\n    out : Tensor, None, or tuple of Tensor and None, optional\n        A location into which the result is stored. If provided, it must have\n        a shape that the inputs broadcast to. If not provided or `None`,\n        a freshly-allocated array is returned. A tuple (possible only as a\n        keyword argument) must have length equal to the number of outputs.\n    where : array_like, optional\n        Values of True indicate to calculate the ufunc at that position, values\n        of False indicate to leave the value in the output alone.\n    **kwargs\n\n    Returns\n    -------\n    z : Tensor\n        The hypotenuse of the triangle(s).\n\n    Examples\n    --------\n    >>> import mars.tensor as mt\n\n    >>> mt.hypot(3*mt.ones((3, 3)), 4*mt.ones((3, 3))).execute()\n    array([[ 5.,  5.,  5.],\n           [ 5.,  5.,  5.],\n           [ 5.,  5.,  5.]])\n\n    Example showing broadcast of scalar_like argument:\n\n    >>> mt.hypot(3*mt.ones((3, 3)), [4]).execute()\n    array([[ 5.,  5.,  5.],\n           [ 5.,  5.,  5.],\n           [ 5.,  5.,  5.]])\n    '
    op = TensorHypot(**kwargs)
    return op(x1, x2, out=out, where=where)