TensorPlay

Latest development documentation · Updated 2026-09-08. A documentation snapshot for package 1.0.0.dev20260909 is not available.

On this page

Source code for tensorplay.functional

# Generated by tools/codegen/main.py -- Do not edit directly

import tensorplay
import tensorplay._C as _C
from tensorplay._C import DType
import tensorplay.graph as _graph
from tensorplay.graph import capture_call as _capture_call
_capturing = _graph.capturing

def _ensure_device(device):
    # None stays None so the C++ factory layer resolves it against
    # only spellings the bindings cannot parse are normalized here.
    if device is None or device is Ellipsis:
        return None
    if isinstance(device, str):
        return tensorplay.device(device)
    return device

_MISSING = object()


[docs]
def embedding(weight, indices, padding_idx=-1, scale_grad_by_freq=False, sparse=False):
    if _capturing():
        _captured = _capture_call(embedding, (weight, indices, padding_idx, scale_grad_by_freq, sparse), {})
        if _captured is not None:
            return _captured
    return _C.embedding(weight, indices, padding_idx, scale_grad_by_freq, sparse)


def embedding_dense_backward(grad_output, indices, num_weights, padding_idx, scale_grad_by_freq):
    if _capturing():
        _captured = _capture_call(embedding_dense_backward, (grad_output, indices, num_weights, padding_idx, scale_grad_by_freq), {})
        if _captured is not None:
            return _captured
    return _C.embedding_dense_backward(grad_output, indices, num_weights, padding_idx, scale_grad_by_freq)

def _embedding_bag(weight, indices, offsets, scale_grad_by_freq=False, mode=0, sparse=False, per_sample_weights=None, include_last_offset=False, padding_idx=-1):
    if _capturing():
        _captured = _capture_call(_embedding_bag, (weight, indices, offsets, scale_grad_by_freq, mode, sparse, per_sample_weights, include_last_offset, padding_idx), {})
        if _captured is not None:
            return _captured
    return _C._embedding_bag(weight, indices, offsets, scale_grad_by_freq, mode, sparse, per_sample_weights, include_last_offset, padding_idx)

def _embedding_bag_forward_only(weight, indices, offsets, scale_grad_by_freq=False, mode=0, sparse=False, per_sample_weights=None, include_last_offset=False, padding_idx=-1):
    if _capturing():
        _captured = _capture_call(_embedding_bag_forward_only, (weight, indices, offsets, scale_grad_by_freq, mode, sparse, per_sample_weights, include_last_offset, padding_idx), {})
        if _captured is not None:
            return _captured
    return _C._embedding_bag_forward_only(weight, indices, offsets, scale_grad_by_freq, mode, sparse, per_sample_weights, include_last_offset, padding_idx)

def _embedding_bag_dense_backward(grad, indices, offset2bag, bag_size, maximum_indices, num_weights, scale_grad_by_freq, mode, per_sample_weights=None, padding_idx=-1):
    if _capturing():
        _captured = _capture_call(_embedding_bag_dense_backward, (grad, indices, offset2bag, bag_size, maximum_indices, num_weights, scale_grad_by_freq, mode, per_sample_weights, padding_idx), {})
        if _captured is not None:
            return _captured
    return _C._embedding_bag_dense_backward(grad, indices, offset2bag, bag_size, maximum_indices, num_weights, scale_grad_by_freq, mode, per_sample_weights, padding_idx)

def _embedding_bag_per_sample_weights_backward(grad, weight, indices, offsets, offset2bag, mode, padding_idx=-1):
    if _capturing():
        _captured = _capture_call(_embedding_bag_per_sample_weights_backward, (grad, weight, indices, offsets, offset2bag, mode, padding_idx), {})
        if _captured is not None:
            return _captured
    return _C._embedding_bag_per_sample_weights_backward(grad, weight, indices, offsets, offset2bag, mode, padding_idx)


[docs]
def convolution(input, weight, bias, stride, padding, dilation, transposed, output_padding, groups):
    if _capturing():
        _captured = _capture_call(convolution, (input, weight, bias, stride, padding, dilation, transposed, output_padding, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    return _C.convolution(input, weight, bias, stride, padding, dilation, transposed, output_padding, groups)


def convolution_backward(grad_output, input, weight, bias_sizes, stride, padding, dilation, transposed, output_padding, groups, output_mask):
    if _capturing():
        _captured = _capture_call(convolution_backward, (grad_output, input, weight, bias_sizes, stride, padding, dilation, transposed, output_padding, groups, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(bias_sizes, int) and not isinstance(bias_sizes, bool):
        bias_sizes = [bias_sizes]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    return _C.convolution_backward(grad_output, input, weight, bias_sizes, stride, padding, dilation, transposed, output_padding, groups, output_mask)


[docs]
def convolution_overrideable(input, weight, bias, stride, padding, dilation, transposed, output_padding, groups):
    if _capturing():
        _captured = _capture_call(convolution_overrideable, (input, weight, bias, stride, padding, dilation, transposed, output_padding, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    return _C.convolution_overrideable(input, weight, bias, stride, padding, dilation, transposed, output_padding, groups)



[docs]
def convolution_backward_overrideable(grad_output, input, weight, stride, padding, dilation, transposed, output_padding, groups, output_mask):
    if _capturing():
        _captured = _capture_call(convolution_backward_overrideable, (grad_output, input, weight, stride, padding, dilation, transposed, output_padding, groups, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    return _C.convolution_backward_overrideable(grad_output, input, weight, stride, padding, dilation, transposed, output_padding, groups, output_mask)



[docs]
def conv1d(input, weight, bias=None, stride=([1]), padding=([0]), dilation=([1]), groups=1):
    if _capturing():
        _captured = _capture_call(conv1d, (input, weight, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv1d(input, weight, bias, stride, padding, dilation, groups)



[docs]
def conv1d_grad_input(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv1d_grad_input, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv1d_grad_input(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv1d_grad_weight(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv1d_grad_weight, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv1d_grad_weight(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv1d_grad_bias(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv1d_grad_bias, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv1d_grad_bias(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv2d(input, weight, bias=None, stride=([1, 1]), padding=([0, 0]), dilation=([1, 1]), groups=1):
    if _capturing():
        _captured = _capture_call(conv2d, (input, weight, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv2d(input, weight, bias, stride, padding, dilation, groups)



[docs]
def conv2d_relu(input, weight, bias=None, stride=([1, 1]), padding=([0, 0]), dilation=([1, 1]), groups=1):
    if _capturing():
        _captured = _capture_call(conv2d_relu, (input, weight, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv2d_relu(input, weight, bias, stride, padding, dilation, groups)



[docs]
def add_relu(input, other):
    if _capturing():
        _captured = _capture_call(add_relu, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.add_relu(input, other)



[docs]
def conv2d_grad_input(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv2d_grad_input, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv2d_grad_input(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv2d_grad_weight(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv2d_grad_weight, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv2d_grad_weight(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv2d_grad_bias(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv2d_grad_bias, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv2d_grad_bias(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv3d(input, weight, bias=None, stride=([1, 1, 1]), padding=([0, 0, 0]), dilation=([1, 1, 1]), groups=1):
    if _capturing():
        _captured = _capture_call(conv3d, (input, weight, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv3d(input, weight, bias, stride, padding, dilation, groups)



[docs]
def conv3d_grad_input(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv3d_grad_input, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv3d_grad_input(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv3d_grad_weight(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv3d_grad_weight, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv3d_grad_weight(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv3d_grad_bias(grad_output, input, weight, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(conv3d_grad_bias, (grad_output, input, weight, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv3d_grad_bias(grad_output, input, weight, stride, padding, dilation, groups)



[docs]
def conv_transpose2d(input, weight, bias=None, stride=([1, 1]), padding=([0, 0]), output_padding=([0, 0]), groups=1, dilation=([1, 1])):
    if _capturing():
        _captured = _capture_call(conv_transpose2d, (input, weight, bias, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose2d(input, weight, bias, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose2d_grad_input(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose2d_grad_input, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose2d_grad_input(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose2d_grad_weight(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose2d_grad_weight, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose2d_grad_weight(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose2d_grad_bias(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose2d_grad_bias, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose2d_grad_bias(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose3d(input, weight, bias=None, stride=([1, 1, 1]), padding=([0, 0, 0]), output_padding=([0, 0, 0]), groups=1, dilation=([1, 1, 1])):
    if _capturing():
        _captured = _capture_call(conv_transpose3d, (input, weight, bias, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose3d(input, weight, bias, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose3d_grad_input(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose3d_grad_input, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose3d_grad_input(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def constant_pad_nd(input, pad, value):
    if _capturing():
        _captured = _capture_call(constant_pad_nd, (input, pad, value), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    if not isinstance(value, (tensorplay.Scalar, tensorplay.Tensor)):
        value = tensorplay.Scalar(value)
    return _C.constant_pad_nd(input, pad, value)


def constant_pad_nd_backward(grad_output, pad):
    if _capturing():
        _captured = _capture_call(constant_pad_nd_backward, (grad_output, pad), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C.constant_pad_nd_backward(grad_output, pad)


[docs]
def conv_transpose3d_grad_weight(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose3d_grad_weight, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose3d_grad_weight(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose3d_grad_bias(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose3d_grad_bias, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose3d_grad_bias(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def add(input, other, *, alpha=1, out=None):
    if out is not None:
        return _C.add(input, other, alpha=alpha, out=out)
    if _capturing():
        _captured = _capture_call(add, (input, other), {'alpha': alpha})
        if _captured is not None:
            return _captured
    return _C.add(input, other, alpha=alpha)



[docs]
def add_(input, other, alpha=1):
    return input.add_(other=other, alpha=alpha)



[docs]
def sub(input, other, alpha=1):
    if _capturing():
        _captured = _capture_call(sub, (input, other, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.sub(other=other, alpha=alpha)



[docs]
def sub_(input, other, alpha=1):
    return input.sub_(other=other, alpha=alpha)



[docs]
def mul(input, other):
    if _capturing():
        _captured = _capture_call(mul, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.mul(other=other)



[docs]
def mul_(input, other):
    return input.mul_(other=other)



[docs]
def div(input, other, rounding_mode=None):
    if _capturing():
        _captured = _capture_call(div, (input, other), {'rounding_mode': rounding_mode})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    if rounding_mode is None:
        return input.div(other=other)
    return input.div(other=other, rounding_mode=rounding_mode)



[docs]
def divide(input, other, rounding_mode=None):
    if _capturing():
        _captured = _capture_call(divide, (input, other), {'rounding_mode': rounding_mode})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    if rounding_mode is None:
        return input.divide(other=other)
    return input.divide(other=other, rounding_mode=rounding_mode)



[docs]
def true_divide(input, other):
    if _capturing():
        _captured = _capture_call(true_divide, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.true_divide(other=other)



[docs]
def floor_divide(input, other):
    if _capturing():
        _captured = _capture_call(floor_divide, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.floor_divide(other=other)



[docs]
def multiply(input, other):
    if _capturing():
        _captured = _capture_call(multiply, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.multiply(other=other)



[docs]
def subtract(input, other, alpha=1):
    if _capturing():
        _captured = _capture_call(subtract, (input, other, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.subtract(other=other, alpha=alpha)



[docs]
def remainder(input, other, *, out=None):
    if out is not None:
        return _C.remainder(input, other, out=out)
    if _capturing():
        _captured = _capture_call(remainder, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.remainder(input, other)



[docs]
def fmod(input, other):
    if _capturing():
        _captured = _capture_call(fmod, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.fmod(other=other)



[docs]
def copysign(input, other):
    if _capturing():
        _captured = _capture_call(copysign, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.copysign(other=other)



[docs]
def clamp_min(input, min):
    if _capturing():
        _captured = _capture_call(clamp_min, (input, min), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.clamp_min(min=min)



[docs]
def clamp_max(input, max):
    if _capturing():
        _captured = _capture_call(clamp_max, (input, max), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    return input.clamp_max(max=max)



[docs]
def rsub(input, other, alpha=1):
    if _capturing():
        _captured = _capture_call(rsub, (input, other, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C.rsub(input, other, alpha=alpha)



[docs]
def fused_mul_add(input, other, addend):
    if _capturing():
        _captured = _capture_call(fused_mul_add, (input, other, addend), {})
        if _captured is not None:
            return _captured
    return _C.fused_mul_add(input, other, addend)


def _foreach_sgd(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sgd, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sgd(input, *args, **kwargs)

def _foreach_adam(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_adam, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_adam(input, *args, **kwargs)

def _amp_foreach_non_finite_check_and_unscale_(input, found_inf, inv_scale):
    if _capturing():
        _captured = _capture_call(_amp_foreach_non_finite_check_and_unscale_, (input, found_inf, inv_scale), {})
        if _captured is not None:
            return _captured
    return _C._amp_foreach_non_finite_check_and_unscale_(input, found_inf, inv_scale)

def _amp_update_scale_(input, growth_tracker, found_inf, growth_factor, backoff_factor, growth_interval):
    if _capturing():
        _captured = _capture_call(_amp_update_scale_, (input, growth_tracker, found_inf, growth_factor, backoff_factor, growth_interval), {})
        if _captured is not None:
            return _captured
    return _C._amp_update_scale_(input, growth_tracker, found_inf, growth_factor, backoff_factor, growth_interval)

def _fused_adam_(input, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, lr, beta1, beta2, weight_decay, eps, amsgrad, maximize, grad_scale=None, found_inf=None, exact=False):
    if _capturing():
        _captured = _capture_call(_fused_adam_, (input, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, lr, beta1, beta2, weight_decay, eps, amsgrad, maximize, grad_scale, found_inf, exact), {})
        if _captured is not None:
            return _captured
    return _C._fused_adam_(input, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, lr=lr, beta1=beta1, beta2=beta2, weight_decay=weight_decay, eps=eps, amsgrad=amsgrad, maximize=maximize, grad_scale=grad_scale, found_inf=found_inf, exact=exact)

def _fused_adamw_(input, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, lr, beta1, beta2, weight_decay, eps, amsgrad, maximize, grad_scale=None, found_inf=None, exact=False):
    if _capturing():
        _captured = _capture_call(_fused_adamw_, (input, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, lr, beta1, beta2, weight_decay, eps, amsgrad, maximize, grad_scale, found_inf, exact), {})
        if _captured is not None:
            return _captured
    return _C._fused_adamw_(input, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, lr=lr, beta1=beta1, beta2=beta2, weight_decay=weight_decay, eps=eps, amsgrad=amsgrad, maximize=maximize, grad_scale=grad_scale, found_inf=found_inf, exact=exact)

def _fused_sgd_(input, grads, momentum_buffer_list, weight_decay, momentum, lr, dampening, nesterov, maximize, is_first_step, grad_scale=None, found_inf=None):
    if _capturing():
        _captured = _capture_call(_fused_sgd_, (input, grads, momentum_buffer_list, weight_decay, momentum, lr, dampening, nesterov, maximize, is_first_step, grad_scale, found_inf), {})
        if _captured is not None:
            return _captured
    return _C._fused_sgd_(input, grads, momentum_buffer_list, weight_decay=weight_decay, momentum=momentum, lr=lr, dampening=dampening, nesterov=nesterov, maximize=maximize, is_first_step=is_first_step, grad_scale=grad_scale, found_inf=found_inf)

def _fused_adagrad_(input, grads, state_sums, state_steps, lr, lr_decay, weight_decay, eps, maximize, grad_scale=None, found_inf=None):
    if _capturing():
        _captured = _capture_call(_fused_adagrad_, (input, grads, state_sums, state_steps, lr, lr_decay, weight_decay, eps, maximize, grad_scale, found_inf), {})
        if _captured is not None:
            return _captured
    return _C._fused_adagrad_(input, grads, state_sums, state_steps, lr=lr, lr_decay=lr_decay, weight_decay=weight_decay, eps=eps, maximize=maximize, grad_scale=grad_scale, found_inf=found_inf)

def _fused_rmsprop_(input, grads, square_avgs, grad_avgs, momentum_buffer_list, state_steps, lr, alpha, eps, weight_decay, momentum, centered, maximize):
    if _capturing():
        _captured = _capture_call(_fused_rmsprop_, (input, grads, square_avgs, grad_avgs, momentum_buffer_list, state_steps, lr, alpha, eps, weight_decay, momentum, centered, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_rmsprop_(input, grads, square_avgs, grad_avgs, momentum_buffer_list, state_steps, lr=lr, alpha=alpha, eps=eps, weight_decay=weight_decay, momentum=momentum, centered=centered, maximize=maximize)

def _fused_adadelta_(input, grads, square_avgs, acc_deltas, state_steps, lr, rho, eps, weight_decay, maximize):
    if _capturing():
        _captured = _capture_call(_fused_adadelta_, (input, grads, square_avgs, acc_deltas, state_steps, lr, rho, eps, weight_decay, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_adadelta_(input, grads, square_avgs, acc_deltas, state_steps, lr=lr, rho=rho, eps=eps, weight_decay=weight_decay, maximize=maximize)

def _fused_adamax_(input, grads, exp_avgs, exp_infs, state_steps, lr, beta1, beta2, eps, weight_decay, maximize):
    if _capturing():
        _captured = _capture_call(_fused_adamax_, (input, grads, exp_avgs, exp_infs, state_steps, lr, beta1, beta2, eps, weight_decay, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_adamax_(input, grads, exp_avgs, exp_infs, state_steps, lr=lr, beta1=beta1, beta2=beta2, eps=eps, weight_decay=weight_decay, maximize=maximize)

def _fused_asgd_(input, grads, axs, mus, etas, state_steps, lr, lambd, t0, alpha, weight_decay, maximize):
    if _capturing():
        _captured = _capture_call(_fused_asgd_, (input, grads, axs, mus, etas, state_steps, lr, lambd, t0, alpha, weight_decay, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_asgd_(input, grads, axs, mus, etas, state_steps, lr=lr, lambd=lambd, t0=t0, alpha=alpha, weight_decay=weight_decay, maximize=maximize)

def _fused_rprop_(input, grads, prevs, step_sizes, state_steps, step_size_min, step_size_max, etaminus, etaplus, maximize):
    if _capturing():
        _captured = _capture_call(_fused_rprop_, (input, grads, prevs, step_sizes, state_steps, step_size_min, step_size_max, etaminus, etaplus, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_rprop_(input, grads, prevs, step_sizes, state_steps, step_size_min=step_size_min, step_size_max=step_size_max, etaminus=etaminus, etaplus=etaplus, maximize=maximize)

def _fused_nadam_(input, grads, exp_avgs, exp_avg_sqs, mu_products, state_steps, lr, beta1, beta2, eps, weight_decay, momentum_decay, decoupled_weight_decay, maximize):
    if _capturing():
        _captured = _capture_call(_fused_nadam_, (input, grads, exp_avgs, exp_avg_sqs, mu_products, state_steps, lr, beta1, beta2, eps, weight_decay, momentum_decay, decoupled_weight_decay, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_nadam_(input, grads, exp_avgs, exp_avg_sqs, mu_products, state_steps, lr=lr, beta1=beta1, beta2=beta2, eps=eps, weight_decay=weight_decay, momentum_decay=momentum_decay, decoupled_weight_decay=decoupled_weight_decay, maximize=maximize)

def _fused_radam_(input, grads, exp_avgs, exp_avg_sqs, state_steps, lr, beta1, beta2, eps, weight_decay, decoupled_weight_decay, maximize):
    if _capturing():
        _captured = _capture_call(_fused_radam_, (input, grads, exp_avgs, exp_avg_sqs, state_steps, lr, beta1, beta2, eps, weight_decay, decoupled_weight_decay, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_radam_(input, grads, exp_avgs, exp_avg_sqs, state_steps, lr=lr, beta1=beta1, beta2=beta2, eps=eps, weight_decay=weight_decay, decoupled_weight_decay=decoupled_weight_decay, maximize=maximize)

def _fused_adafactor_(input, grads, variances, state_steps, lr, beta2_decay, eps1, eps2, d, weight_decay, maximize):
    if _capturing():
        _captured = _capture_call(_fused_adafactor_, (input, grads, variances, state_steps, lr, beta2_decay, eps1, eps2, d, weight_decay, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_adafactor_(input, grads, variances, state_steps, lr=lr, beta2_decay=beta2_decay, eps1=eps1, eps2=eps2, d=d, weight_decay=weight_decay, maximize=maximize)

def _fused_adafactor_factored_(input, grads, row_vars, col_vars, state_steps, lr, beta2_decay, eps1, eps2, d, weight_decay, maximize):
    if _capturing():
        _captured = _capture_call(_fused_adafactor_factored_, (input, grads, row_vars, col_vars, state_steps, lr, beta2_decay, eps1, eps2, d, weight_decay, maximize), {})
        if _captured is not None:
            return _captured
    return _C._fused_adafactor_factored_(input, grads, row_vars, col_vars, state_steps, lr=lr, beta2_decay=beta2_decay, eps1=eps1, eps2=eps2, d=d, weight_decay=weight_decay, maximize=maximize)

def _foreach_add(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_add, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_add(input, *args, **kwargs)

def _foreach_add_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_add_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_add_(input, *args, **kwargs)

def _foreach_sub(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sub, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sub(input, *args, **kwargs)

def _foreach_sub_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sub_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sub_(input, *args, **kwargs)

def _foreach_mul(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_mul, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_mul(input, *args, **kwargs)

def _foreach_mul_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_mul_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_mul_(input, *args, **kwargs)

def _foreach_div(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_div, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_div(input, *args, **kwargs)

def _foreach_div_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_div_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_div_(input, *args, **kwargs)

def _foreach_addcmul(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_addcmul, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_addcmul(input, *args, **kwargs)

def _foreach_addcmul_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_addcmul_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_addcmul_(input, *args, **kwargs)

def _foreach_addcdiv(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_addcdiv, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_addcdiv(input, *args, **kwargs)

def _foreach_addcdiv_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_addcdiv_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_addcdiv_(input, *args, **kwargs)

def _foreach_lerp(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_lerp, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_lerp(input, *args, **kwargs)

def _foreach_lerp_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_lerp_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_lerp_(input, *args, **kwargs)

def _foreach_sqrt(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sqrt, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sqrt(input, *args, **kwargs)

def _foreach_sqrt_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sqrt_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sqrt_(input, *args, **kwargs)

def _foreach_rsqrt(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_rsqrt, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_rsqrt(input, *args, **kwargs)

def _foreach_rsqrt_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_rsqrt_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_rsqrt_(input, *args, **kwargs)

def _foreach_neg(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_neg, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_neg(input, *args, **kwargs)

def _foreach_neg_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_neg_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_neg_(input, *args, **kwargs)

def _foreach_abs(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_abs, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_abs(input, *args, **kwargs)

def _foreach_abs_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_abs_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_abs_(input, *args, **kwargs)

def _foreach_reciprocal(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_reciprocal, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_reciprocal(input, *args, **kwargs)

def _foreach_reciprocal_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_reciprocal_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_reciprocal_(input, *args, **kwargs)

def _foreach_sign(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sign, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sign(input, *args, **kwargs)

def _foreach_sign_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sign_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sign_(input, *args, **kwargs)

def _foreach_pow(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_pow, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_pow(input, *args, **kwargs)

def _foreach_pow_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_pow_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_pow_(input, *args, **kwargs)

def _foreach_clamp_min(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_clamp_min, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_clamp_min(input, *args, **kwargs)

def _foreach_clamp_max(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_clamp_max, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_clamp_max(input, *args, **kwargs)

def _foreach_clamp_min_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_clamp_min_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_clamp_min_(input, *args, **kwargs)

def _foreach_clamp_max_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_clamp_max_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_clamp_max_(input, *args, **kwargs)

def _foreach_maximum(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_maximum, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_maximum(input, *args, **kwargs)

def _foreach_minimum(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_minimum, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_minimum(input, *args, **kwargs)

def _foreach_maximum_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_maximum_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_maximum_(input, *args, **kwargs)

def _foreach_minimum_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_minimum_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_minimum_(input, *args, **kwargs)

def _foreach_copy_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_copy_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_copy_(input, *args, **kwargs)

def _foreach_zero_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_zero_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_zero_(input, *args, **kwargs)


[docs]
def div_(input, other, rounding_mode=None):
    if _capturing():
        _captured = _capture_call(div_, (input, other), {'rounding_mode': rounding_mode})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    if rounding_mode is None:
        return input.div_(other=other)
    return input.div_(other=other, rounding_mode=rounding_mode)



[docs]
def addcmul(input, tensor1, tensor2, *, value=1, out=None):
    if out is not None:
        return _C.addcmul(self=input, tensor1=tensor1, tensor2=tensor2, value=value, out=out)
    if _capturing():
        _captured = _capture_call(addcmul, (input, tensor1, tensor2), {'value': value})
        if _captured is not None:
            return _captured
    return _C.addcmul(self=input, tensor1=tensor1, tensor2=tensor2, value=value)



[docs]
def addcmul_(input, tensor1, tensor2, value=1):
    return input.addcmul_(tensor1=tensor1, tensor2=tensor2, value=value)



[docs]
def addcdiv(input, tensor1, tensor2, *, value=1, out=None):
    if out is not None:
        return _C.addcdiv(self=input, tensor1=tensor1, tensor2=tensor2, value=value, out=out)
    if _capturing():
        _captured = _capture_call(addcdiv, (input, tensor1, tensor2), {'value': value})
        if _captured is not None:
            return _captured
    return _C.addcdiv(self=input, tensor1=tensor1, tensor2=tensor2, value=value)



[docs]
def addcdiv_(input, tensor1, tensor2, value=1):
    return input.addcdiv_(tensor1=tensor1, tensor2=tensor2, value=value)



[docs]
def where(condition, input, other):
    if _capturing():
        _captured = _capture_call(where, (condition, input, other), {})
        if _captured is not None:
            return _captured
    _input_is_tensor = isinstance(input, tensorplay.Tensor)
    _other_is_tensor = isinstance(other, tensorplay.Tensor)
    if not _input_is_tensor:
        input = tensorplay.Scalar(input)
    if not _other_is_tensor:
        other = tensorplay.Scalar(other)
    return _C.where(condition=condition, self=input, other=other)



[docs]
def maximum(input, other, *, out=None):
    if out is not None:
        return _C.maximum(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(maximum, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.maximum(self=input, other=other)



[docs]
def minimum(input, other, *, out=None):
    if out is not None:
        return _C.minimum(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(minimum, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.minimum(self=input, other=other)



[docs]
def view_as_real(input):
    if _capturing():
        _captured = _capture_call(view_as_real, (input,), {})
        if _captured is not None:
            return _captured
    return _C.view_as_real(input)



[docs]
def view_as_complex(input):
    if _capturing():
        _captured = _capture_call(view_as_complex, (input,), {})
        if _captured is not None:
            return _captured
    return _C.view_as_complex(input)



[docs]
def is_complex(input):
    if _capturing():
        _captured = _capture_call(is_complex, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_complex(input)



[docs]
def mm(input, mat2):
    if _capturing():
        _captured = _capture_call(mm, (input, mat2), {})
        if _captured is not None:
            return _captured
    return _C.mm(input, mat2)



[docs]
def addmm(input, mat1, mat2, beta=1, alpha=1):
    if _capturing():
        _captured = _capture_call(addmm, (input, mat1, mat2, beta, alpha), {})
        if _captured is not None:
            return _captured
    return _C.addmm(input, mat1, mat2, beta=beta, alpha=alpha)



[docs]
def matmul(input, other, *, out=None):
    if out is not None:
        return _C.matmul(input, other, out=out)
    if _capturing():
        _captured = _capture_call(matmul, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.matmul(input, other)



[docs]
def matmul_backward_self(grad_output, input, other):
    if _capturing():
        _captured = _capture_call(matmul_backward_self, (grad_output, input, other), {})
        if _captured is not None:
            return _captured
    return _C.matmul_backward_self(grad_output, input, other)



[docs]
def matmul_backward_other(grad_output, input, other):
    if _capturing():
        _captured = _capture_call(matmul_backward_other, (grad_output, input, other), {})
        if _captured is not None:
            return _captured
    return _C.matmul_backward_other(grad_output, input, other)



[docs]
def bmm(input, mat2, *, out=None):
    if out is not None:
        return _C.bmm(input, mat2, out=out)
    if _capturing():
        _captured = _capture_call(bmm, (input, mat2), {})
        if _captured is not None:
            return _captured
    return _C.bmm(input, mat2)



[docs]
def baddbmm(input, batch1, batch2, *, beta=1, alpha=1, out=None):
    if out is not None:
        return _C.baddbmm(input, batch1, batch2, beta=beta, alpha=alpha, out=out)
    if _capturing():
        _captured = _capture_call(baddbmm, (input, batch1, batch2), {'beta': beta, 'alpha': alpha})
        if _captured is not None:
            return _captured
    return _C.baddbmm(input, batch1, batch2, beta=beta, alpha=alpha)



[docs]
def mv(input, vec, *, out=None):
    if out is not None:
        return _C.mv(self=input, vec=vec, out=out)
    if _capturing():
        _captured = _capture_call(mv, (input, vec), {})
        if _captured is not None:
            return _captured
    return _C.mv(self=input, vec=vec)



[docs]
def dot(input, tensor, *, out=None):
    if out is not None:
        return _C.dot(self=input, tensor=tensor, out=out)
    if _capturing():
        _captured = _capture_call(dot, (input, tensor), {})
        if _captured is not None:
            return _captured
    return _C.dot(self=input, tensor=tensor)



[docs]
def inner(input, other, *, out=None):
    if out is not None:
        return _C.inner(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(inner, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.inner(self=input, other=other)



[docs]
def inner_backward_self(grad_output, input, other):
    if _capturing():
        _captured = _capture_call(inner_backward_self, (grad_output, input, other), {})
        if _captured is not None:
            return _captured
    return _C.inner_backward_self(grad_output, input, other)



[docs]
def inner_backward_other(grad_output, input, other):
    if _capturing():
        _captured = _capture_call(inner_backward_other, (grad_output, input, other), {})
        if _captured is not None:
            return _captured
    return _C.inner_backward_other(grad_output, input, other)



[docs]
def outer(input, vec2, *, out=None):
    if out is not None:
        return _C.outer(self=input, vec2=vec2, out=out)
    if _capturing():
        _captured = _capture_call(outer, (input, vec2), {})
        if _captured is not None:
            return _captured
    return _C.outer(self=input, vec2=vec2)


def einsum(equation, *operands, path=None):
    if _capturing():
        _captured = _capture_call(einsum, (equation, *operands), {})
        if _captured is not None:
            return _captured
    return _C.einsum(equation, list(operands), path if path is not None else [])


[docs]
def eq(input, other, *, out=None):
    if out is not None:
        return _C.eq(input, other, out=out)
    if _capturing():
        _captured = _capture_call(eq, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.eq(input, other)



[docs]
def ne(input, other, *, out=None):
    if out is not None:
        return _C.ne(input, other, out=out)
    if _capturing():
        _captured = _capture_call(ne, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.ne(input, other)



[docs]
def lt(input, other, *, out=None):
    if out is not None:
        return _C.lt(input, other, out=out)
    if _capturing():
        _captured = _capture_call(lt, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.lt(input, other)



[docs]
def le(input, other, *, out=None):
    if out is not None:
        return _C.le(input, other, out=out)
    if _capturing():
        _captured = _capture_call(le, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.le(input, other)



[docs]
def gt(input, other, *, out=None):
    if out is not None:
        return _C.gt(input, other, out=out)
    if _capturing():
        _captured = _capture_call(gt, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.gt(input, other)



[docs]
def ge(input, other, *, out=None):
    if out is not None:
        return _C.ge(input, other, out=out)
    if _capturing():
        _captured = _capture_call(ge, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.ge(input, other)



[docs]
def copy_(input, src, non_blocking=False):
    return input.copy_(src=src, non_blocking=non_blocking)



[docs]
def view(input, shape):
    if _capturing():
        _captured = _capture_call(view, (input, shape), {})
        if _captured is not None:
            return _captured
    return input.view(shape=shape)



[docs]
def fill_(input, value):
    return input.fill_(value=value)



[docs]
def transpose(input, dim0, dim1):
    if _capturing():
        _captured = _capture_call(transpose, (input, dim0, dim1), {})
        if _captured is not None:
            return _captured
    return _C.transpose(input, dim0, dim1)



[docs]
def t(input):
    if _capturing():
        _captured = _capture_call(t, (input,), {})
        if _captured is not None:
            return _captured
    return _C.t(input)



[docs]
def permute(input, dims):
    if _capturing():
        _captured = _capture_call(permute, (input, dims), {})
        if _captured is not None:
            return _captured
    if isinstance(dims, int) and not isinstance(dims, bool):
        dims = [dims]
    return _C.permute(input, dims)


def permute_backward(grad_output, input, dims):
    if _capturing():
        _captured = _capture_call(permute_backward, (grad_output, input, dims), {})
        if _captured is not None:
            return _captured
    if isinstance(dims, int) and not isinstance(dims, bool):
        dims = [dims]
    return _C.permute_backward(grad_output, input, dims)


[docs]
def squeeze(input, dim=None):
    if _capturing():
        _captured = _capture_call(squeeze, (input, dim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.squeeze(input)
    return _C.squeeze(input, dim)


def squeeze_backward(grad_output, input):
    if _capturing():
        _captured = _capture_call(squeeze_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.squeeze_backward(grad_output, input)


[docs]
def unsqueeze(input, dim):
    if _capturing():
        _captured = _capture_call(unsqueeze, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.unsqueeze(input, dim)



[docs]
def diagonal(input, offset=0, dim1=0, dim2=1):
    if _capturing():
        _captured = _capture_call(diagonal, (input, offset, dim1, dim2), {})
        if _captured is not None:
            return _captured
    return _C.diagonal(input, offset, dim1, dim2)


def diagonal_backward(grad_output, input_sizes, offset, dim1, dim2):
    if _capturing():
        _captured = _capture_call(diagonal_backward, (grad_output, input_sizes, offset, dim1, dim2), {})
        if _captured is not None:
            return _captured
    if isinstance(input_sizes, int) and not isinstance(input_sizes, bool):
        input_sizes = [input_sizes]
    return _C.diagonal_backward(grad_output, input_sizes, offset, dim1, dim2)


[docs]
def movedim(input, source, destination):
    if _capturing():
        _captured = _capture_call(movedim, (input, source, destination), {})
        if _captured is not None:
            return _captured
    if isinstance(source, int) and not isinstance(source, bool):
        source = [source]
    if isinstance(destination, int) and not isinstance(destination, bool):
        destination = [destination]
    return _C.movedim(input, source, destination)



[docs]
def cat(tensors, dim=0, *, out=None):
    if out is not None:
        return _C.cat(tensors=tensors, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(cat, (tensors, dim), {})
        if _captured is not None:
            return _captured
    return _C.cat(tensors=tensors, dim=dim)



[docs]
def stack(tensors, dim=0, *, out=None):
    if out is not None:
        return _C.stack(tensors=tensors, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(stack, (tensors, dim), {})
        if _captured is not None:
            return _captured
    return _C.stack(tensors=tensors, dim=dim)



[docs]
def split(input, split_size, dim=0):
    if _capturing():
        _captured = _capture_call(split, (input, split_size, dim), {})
        if _captured is not None:
            return _captured
    return _C.split(input, split_size, dim)



[docs]
def chunk(input, chunks, dim=0):
    if _capturing():
        _captured = _capture_call(chunk, (input, chunks, dim), {})
        if _captured is not None:
            return _captured
    return _C.chunk(input, chunks, dim)



[docs]
def reshape(input, shape):
    if _capturing():
        _captured = _capture_call(reshape, (input, shape), {})
        if _captured is not None:
            return _captured
    if isinstance(shape, int) and not isinstance(shape, bool):
        shape = [shape]
    return _C.reshape(input, shape)



[docs]
def unbind(input, dim=0):
    if _capturing():
        _captured = _capture_call(unbind, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.unbind(input, dim)



[docs]
def slice(input, dim=0, start=None, end=None, step=1):
    if _capturing():
        _captured = _capture_call(slice, (input, dim, start, end, step), {})
        if _captured is not None:
            return _captured
    return input.slice(dim=dim, start=start, end=end, step=step)



[docs]
def clone(input, memory_format=None):
    if _capturing():
        _captured = _capture_call(clone, (input, memory_format), {})
        if _captured is not None:
            return _captured
    return input.clone(memory_format=memory_format)



[docs]
def contiguous(input, memory_format=tensorplay.contiguous_format):
    if _capturing():
        _captured = _capture_call(contiguous, (input, memory_format), {})
        if _captured is not None:
            return _captured
    return input.contiguous(memory_format=memory_format)



[docs]
def item(input):
    if _capturing():
        _captured = _capture_call(item, (input,), {})
        if _captured is not None:
            return _captured
    return input.item()


def select_backward(grad_output, input, dim, index):
    if _capturing():
        _captured = _capture_call(select_backward, (grad_output, input, dim, index), {})
        if _captured is not None:
            return _captured
    return _C.select_backward(grad_output, input, dim, index)

def slice_backward(grad_output, input, dim=0, start=None, end=None, step=1):
    if _capturing():
        _captured = _capture_call(slice_backward, (grad_output, input, dim, start, end, step), {})
        if _captured is not None:
            return _captured
    return _C.slice_backward(grad_output, input, dim, start, end, step)

_c_rand = _C.rand

def rand(*size, dtype=None, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(rand, tuple(size), {'dtype': DType.undefined if dtype is None else dtype, 'device': device, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    if isinstance(device, str):
        device = tensorplay.device(device)
    elif device is Ellipsis:
        device = None
    if len(size) == 1:
        s0 = size[0]
        if s0.__class__ in (list, tuple):
            size = s0
        elif hasattr(s0, '__iter__'):
            size = list(s0)
    # Hot path: every option defaulted -> keyword-free positional
    # call (pybind kwarg parsing costs ~0.3us/call; the C++ side
    # applies identical defaults).
    if dtype is None and device is None and not requires_grad:
        return _c_rand(size)
    return _C.rand(size=size, dtype=dtype, device=device, requires_grad=requires_grad)


[docs]
def rand_like(input, dtype=DType.undefined, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(rand_like, (input, dtype, device, requires_grad), {})
        if _captured is not None:
            return _captured
    return _C.rand_like(input, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def randint(low, high, size, *, dtype=DType.int64, device=None, requires_grad=False, out=None):
    if out is not None:
        return _C.randint(low, high, size, dtype=dtype, device=device, requires_grad=requires_grad, out=out)
    if _capturing():
        _captured = _capture_call(randint, (low, high, size), {'dtype': dtype, 'device': device, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    return _C.randint(low, high, size, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def randint_like(input, low, high, dtype=DType.undefined, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(randint_like, (input, low, high, dtype, device, requires_grad), {})
        if _captured is not None:
            return _captured
    return _C.randint_like(input, low, high, dtype=dtype, device=device, requires_grad=requires_grad)


_c_randn = _C.randn

def randn(*size, dtype=None, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(randn, tuple(size), {'dtype': DType.undefined if dtype is None else dtype, 'device': device, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    if isinstance(device, str):
        device = tensorplay.device(device)
    elif device is Ellipsis:
        device = None
    if len(size) == 1:
        s0 = size[0]
        if s0.__class__ in (list, tuple):
            size = s0
        elif hasattr(s0, '__iter__'):
            size = list(s0)
    # Hot path: every option defaulted -> keyword-free positional
    # call (pybind kwarg parsing costs ~0.3us/call; the C++ side
    # applies identical defaults).
    if dtype is None and device is None and not requires_grad:
        return _c_randn(size)
    return _C.randn(size=size, dtype=dtype, device=device, requires_grad=requires_grad)


[docs]
def randn_like(input, dtype=DType.undefined, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(randn_like, (input, dtype, device, requires_grad), {})
        if _captured is not None:
            return _captured
    return _C.randn_like(input, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def randperm(n, *, dtype=DType.int64, device=None, requires_grad=False, out=None):
    if out is not None:
        return _C.randperm(n, dtype=dtype, device=device, requires_grad=requires_grad, out=out)
    if _capturing():
        _captured = _capture_call(randperm, (n,), {'dtype': dtype, 'device': device, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    return _C.randperm(n, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def bernoulli(input, p=_MISSING, *, generator=None, out=None):
    if p is _MISSING:
        if out is not None:
            return _C.bernoulli(self=input, generator=generator, out=out)
        if _capturing():
            _captured = _capture_call(bernoulli, (input,), {"generator": generator})
            if _captured is not None:
                return _captured
        return _C.bernoulli(self=input, generator=generator)
    if out is not None:
        return _C.bernoulli(self=input, p=p, generator=generator, out=out)
    if _capturing():
        _captured = _capture_call(bernoulli, (input, p), {"generator": generator})
        if _captured is not None:
            return _captured
    return _C.bernoulli(self=input, p=p, generator=generator)



[docs]
def native_dropout(input, p):
    if _capturing():
        _captured = _capture_call(native_dropout, (input, p), {})
        if _captured is not None:
            return _captured
    return _C.native_dropout(input, p)


def native_dropout_backward(grad_output, mask, scale):
    if _capturing():
        _captured = _capture_call(native_dropout_backward, (grad_output, mask, scale), {})
        if _captured is not None:
            return _captured
    return _C.native_dropout_backward(grad_output, mask, scale)


[docs]
def native_alpha_dropout(input, p):
    if _capturing():
        _captured = _capture_call(native_alpha_dropout, (input, p), {})
        if _captured is not None:
            return _captured
    return _C.native_alpha_dropout(input, p)


def _alpha_dropout_backward(grad_output, mask, p):
    if _capturing():
        _captured = _capture_call(_alpha_dropout_backward, (grad_output, mask, p), {})
        if _captured is not None:
            return _captured
    return _C._alpha_dropout_backward(grad_output, mask, p)


[docs]
def native_feature_dropout(input, p):
    if _capturing():
        _captured = _capture_call(native_feature_dropout, (input, p), {})
        if _captured is not None:
            return _captured
    return _C.native_feature_dropout(input, p)


def _feature_dropout_backward(grad_output, mask, p):
    if _capturing():
        _captured = _capture_call(_feature_dropout_backward, (grad_output, mask, p), {})
        if _captured is not None:
            return _captured
    return _C._feature_dropout_backward(grad_output, mask, p)

def quantile(input, q, dim=None, keepdim=False, *, interpolation='linear', out=None):
    if out is not None:
        return _C.quantile(input, q, dim, keepdim, interpolation=interpolation, out=out)
    if _capturing():
        _captured = _capture_call(quantile, (input, q, dim, keepdim), {'interpolation': interpolation})
        if _captured is not None:
            return _captured
    return _C.quantile(input, q, dim, keepdim, interpolation=interpolation)

def nanquantile(input, q, dim=None, keepdim=False, *, interpolation='linear', out=None):
    if out is not None:
        return _C.nanquantile(input, q, dim, keepdim, interpolation=interpolation, out=out)
    if _capturing():
        _captured = _capture_call(nanquantile, (input, q, dim, keepdim), {'interpolation': interpolation})
        if _captured is not None:
            return _captured
    return _C.nanquantile(input, q, dim, keepdim, interpolation=interpolation)

def histogram(input, bins, *, weight=None, density=False, out=None):
    if out is not None:
        return _C.histogram(input, bins, weight=weight, density=density, out=out)
    if _capturing():
        _captured = _capture_call(histogram, (input, bins), {'weight': weight, 'density': density})
        if _captured is not None:
            return _captured
    return _C.histogram(input, bins, weight=weight, density=density)


[docs]
def trapezoid(y, x=None, dx=1, dim=-1):
    if _capturing():
        _captured = _capture_call(trapezoid, (y, x, dx, dim), {})
        if _captured is not None:
            return _captured
    if not isinstance(dx, (tensorplay.Scalar, tensorplay.Tensor)):
        dx = tensorplay.Scalar(dx)
    return _C.trapezoid(y, x, dx=dx, dim=dim)



[docs]
def cumulative_trapezoid(y, x=None, dx=1, dim=-1):
    if _capturing():
        _captured = _capture_call(cumulative_trapezoid, (y, x, dx, dim), {})
        if _captured is not None:
            return _captured
    if not isinstance(dx, (tensorplay.Scalar, tensorplay.Tensor)):
        dx = tensorplay.Scalar(dx)
    return _C.cumulative_trapezoid(y, x, dx=dx, dim=dim)


def _trapezoid_backward(grad, x, ysizes, dx, dim):
    if _capturing():
        _captured = _capture_call(_trapezoid_backward, (grad, x, ysizes, dx, dim), {})
        if _captured is not None:
            return _captured
    if isinstance(ysizes, int) and not isinstance(ysizes, bool):
        ysizes = [ysizes]
    if not isinstance(dx, (tensorplay.Scalar, tensorplay.Tensor)):
        dx = tensorplay.Scalar(dx)
    return _C._trapezoid_backward(grad, x, ysizes, dx, dim)

def _cumulative_trapezoid_backward(grad, x, dx, dim):
    if _capturing():
        _captured = _capture_call(_cumulative_trapezoid_backward, (grad, x, dx, dim), {})
        if _captured is not None:
            return _captured
    if not isinstance(dx, (tensorplay.Scalar, tensorplay.Tensor)):
        dx = tensorplay.Scalar(dx)
    return _C._cumulative_trapezoid_backward(grad, x, dx, dim)

def gradient(input, spacing=[], dim=[], edge_order=1):
    if _capturing():
        _captured = _capture_call(gradient, (input, spacing, dim, edge_order), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.gradient(input, spacing, dim, edge_order)


[docs]
def cov(input, correction=1, fweights=None, aweights=None):
    if _capturing():
        _captured = _capture_call(cov, (input, correction, fweights, aweights), {})
        if _captured is not None:
            return _captured
    return _C.cov(input, correction=correction, fweights=fweights, aweights=aweights)



[docs]
def corrcoef(input):
    if _capturing():
        _captured = _capture_call(corrcoef, (input,), {})
        if _captured is not None:
            return _captured
    return _C.corrcoef(input)


def _cov_backward(grad, input, correction, fweights, aweights):
    if _capturing():
        _captured = _capture_call(_cov_backward, (grad, input, correction, fweights, aweights), {})
        if _captured is not None:
            return _captured
    return _C._cov_backward(grad, input, correction, fweights, aweights)

def _corrcoef_backward(grad, input):
    if _capturing():
        _captured = _capture_call(_corrcoef_backward, (grad, input), {})
        if _captured is not None:
            return _captured
    return _C._corrcoef_backward(grad, input)


[docs]
def resize_(input, size):
    return input.resize_(size=size)



[docs]
def normal(mean, std, *, out=None):
    if out is not None:
        return _C.normal(mean, std, out=out)
    if _capturing():
        _captured = _capture_call(normal, (mean, std), {})
        if _captured is not None:
            return _captured
    return _C.normal(mean, std)



[docs]
def abs(input, *, out=None):
    if out is not None:
        return _C.abs(self=input, out=out)
    if _capturing():
        _captured = _capture_call(abs, (input,), {})
        if _captured is not None:
            return _captured
    return _C.abs(self=input)



[docs]
def acos(input, *, out=None):
    if out is not None:
        return _C.acos(self=input, out=out)
    if _capturing():
        _captured = _capture_call(acos, (input,), {})
        if _captured is not None:
            return _captured
    return _C.acos(self=input)



[docs]
def acosh(input, *, out=None):
    if out is not None:
        return _C.acosh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(acosh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.acosh(self=input)



[docs]
def angle(input, *, out=None):
    if out is not None:
        return _C.angle(self=input, out=out)
    if _capturing():
        _captured = _capture_call(angle, (input,), {})
        if _captured is not None:
            return _captured
    return _C.angle(self=input)



[docs]
def asin(input, *, out=None):
    if out is not None:
        return _C.asin(self=input, out=out)
    if _capturing():
        _captured = _capture_call(asin, (input,), {})
        if _captured is not None:
            return _captured
    return _C.asin(self=input)



[docs]
def asinh(input, *, out=None):
    if out is not None:
        return _C.asinh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(asinh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.asinh(self=input)



[docs]
def atan(input, *, out=None):
    if out is not None:
        return _C.atan(self=input, out=out)
    if _capturing():
        _captured = _capture_call(atan, (input,), {})
        if _captured is not None:
            return _captured
    return _C.atan(self=input)



[docs]
def atan2(input, other, *, out=None):
    if out is not None:
        return _C.atan2(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(atan2, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.atan2(self=input, other=other)



[docs]
def poisson(input):
    if _capturing():
        _captured = _capture_call(poisson, (input,), {})
        if _captured is not None:
            return _captured
    return _C.poisson(input)



[docs]
def atanh(input, *, out=None):
    if out is not None:
        return _C.atanh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(atanh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.atanh(self=input)



[docs]
def ceil(input, *, out=None):
    if out is not None:
        return _C.ceil(self=input, out=out)
    if _capturing():
        _captured = _capture_call(ceil, (input,), {})
        if _captured is not None:
            return _captured
    return _C.ceil(self=input)



[docs]
def clamp(input, min=None, max=None, *, out=None):
    if out is not None:
        return _C.clamp(input, min, max, out=out)
    if _capturing():
        _captured = _capture_call(clamp, (input, min, max), {})
        if _captured is not None:
            return _captured
    return _C.clamp(input, min, max)


def clamp_backward(grad_output, input, min=None, max=None):
    if _capturing():
        _captured = _capture_call(clamp_backward, (grad_output, input, min, max), {})
        if _captured is not None:
            return _captured
    if min is not None and not isinstance(min, (tensorplay.Scalar, tensorplay.Tensor)):
        min = tensorplay.Scalar(min)
    if max is not None and not isinstance(max, (tensorplay.Scalar, tensorplay.Tensor)):
        max = tensorplay.Scalar(max)
    return _C.clamp_backward(grad_output, input, min, max)


[docs]
def cos(input, *, out=None):
    if out is not None:
        return _C.cos(self=input, out=out)
    if _capturing():
        _captured = _capture_call(cos, (input,), {})
        if _captured is not None:
            return _captured
    return _C.cos(self=input)



[docs]
def cosh(input, *, out=None):
    if out is not None:
        return _C.cosh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(cosh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.cosh(self=input)



[docs]
def erf(input, *, out=None):
    if out is not None:
        return _C.erf(self=input, out=out)
    if _capturing():
        _captured = _capture_call(erf, (input,), {})
        if _captured is not None:
            return _captured
    return _C.erf(self=input)



[docs]
def erfc(input, *, out=None):
    if out is not None:
        return _C.erfc(self=input, out=out)
    if _capturing():
        _captured = _capture_call(erfc, (input,), {})
        if _captured is not None:
            return _captured
    return _C.erfc(self=input)



[docs]
def expm1(input, *, out=None):
    if out is not None:
        return _C.expm1(self=input, out=out)
    if _capturing():
        _captured = _capture_call(expm1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.expm1(self=input)



[docs]
def lgamma(input, *, out=None):
    if out is not None:
        return _C.lgamma(self=input, out=out)
    if _capturing():
        _captured = _capture_call(lgamma, (input,), {})
        if _captured is not None:
            return _captured
    return _C.lgamma(self=input)



[docs]
def log2(input, *, out=None):
    if out is not None:
        return _C.log2(self=input, out=out)
    if _capturing():
        _captured = _capture_call(log2, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log2(self=input)



[docs]
def reciprocal(input, *, out=None):
    if out is not None:
        return _C.reciprocal(self=input, out=out)
    if _capturing():
        _captured = _capture_call(reciprocal, (input,), {})
        if _captured is not None:
            return _captured
    return _C.reciprocal(self=input)



[docs]
def trunc(input, *, out=None):
    if out is not None:
        return _C.trunc(self=input, out=out)
    if _capturing():
        _captured = _capture_call(trunc, (input,), {})
        if _captured is not None:
            return _captured
    return _C.trunc(self=input)



[docs]
def exp(input, *, out=None):
    if out is not None:
        return _C.exp(self=input, out=out)
    if _capturing():
        _captured = _capture_call(exp, (input,), {})
        if _captured is not None:
            return _captured
    return _C.exp(self=input)



[docs]
def floor(input, *, out=None):
    if out is not None:
        return _C.floor(self=input, out=out)
    if _capturing():
        _captured = _capture_call(floor, (input,), {})
        if _captured is not None:
            return _captured
    return _C.floor(self=input)



[docs]
def lerp(input, end, weight, *, out=None):
    if out is not None:
        return _C.lerp(input, end, weight, out=out)
    if _capturing():
        _captured = _capture_call(lerp, (input, end, weight), {})
        if _captured is not None:
            return _captured
    return _C.lerp(input, end, weight)



[docs]
def lerp_(input, end, weight):
    return input.lerp_(end=end, weight=weight)



[docs]
def abs_(input):
    return input.abs_()



[docs]
def neg_(input):
    return input.neg_()



[docs]
def sqrt_(input):
    return input.sqrt_()



[docs]
def rsqrt_(input):
    return input.rsqrt_()



[docs]
def log(input, *, out=None):
    if out is not None:
        return _C.log(self=input, out=out)
    if _capturing():
        _captured = _capture_call(log, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log(self=input)



[docs]
def neg(input, *, out=None):
    if out is not None:
        return _C.neg(self=input, out=out)
    if _capturing():
        _captured = _capture_call(neg, (input,), {})
        if _captured is not None:
            return _captured
    return _C.neg(self=input)



[docs]
def pow(input, exponent, *, out=None):
    if out is not None:
        return _C.pow(input, exponent, out=out)
    if _capturing():
        _captured = _capture_call(pow, (input, exponent), {})
        if _captured is not None:
            return _captured
    return _C.pow(input, exponent)



[docs]
def round(input, *, decimals=_MISSING, out=None):
    if decimals is not _MISSING:
        if out is not None:
            return _C.round(input, decimals=decimals, out=out)
        if _capturing():
            _captured = _capture_call(round, (input,), {'decimals': decimals})
            if _captured is not None:
                return _captured
        return _C.round(input, decimals=decimals)
    if out is not None:
        return _C.round(input, out=out)
    if _capturing():
        _captured = _capture_call(round, (input,), {})
        if _captured is not None:
            return _captured
    return _C.round(input)



[docs]
def rsqrt(input, *, out=None):
    if out is not None:
        return _C.rsqrt(self=input, out=out)
    if _capturing():
        _captured = _capture_call(rsqrt, (input,), {})
        if _captured is not None:
            return _captured
    return _C.rsqrt(self=input)



[docs]
def sigmoid(input, *, out=None):
    if out is not None:
        return _C.sigmoid(self=input, out=out)
    if _capturing():
        _captured = _capture_call(sigmoid, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sigmoid(self=input)



[docs]
def sign(input, *, out=None):
    if out is not None:
        return _C.sign(self=input, out=out)
    if _capturing():
        _captured = _capture_call(sign, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sign(self=input)



[docs]
def sin(input, *, out=None):
    if out is not None:
        return _C.sin(self=input, out=out)
    if _capturing():
        _captured = _capture_call(sin, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sin(self=input)



[docs]
def sinh(input, *, out=None):
    if out is not None:
        return _C.sinh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(sinh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sinh(self=input)



[docs]
def softmax(input, dim, dtype=DType.undefined, *, out=None):
    if out is not None:
        return _C.softmax(input, dim, dtype, out=out)
    if _capturing():
        _captured = _capture_call(softmax, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.softmax(input, dim, dtype)



[docs]
def log_softmax(input, dim, dtype=DType.undefined, *, out=None):
    if out is not None:
        return _C.log_softmax(input, dim, dtype, out=out)
    if _capturing():
        _captured = _capture_call(log_softmax, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.log_softmax(input, dim, dtype)



[docs]
def sqrt(input, *, out=None):
    if out is not None:
        return _C.sqrt(self=input, out=out)
    if _capturing():
        _captured = _capture_call(sqrt, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sqrt(self=input)



[docs]
def square(input, *, out=None):
    if out is not None:
        return _C.square(self=input, out=out)
    if _capturing():
        _captured = _capture_call(square, (input,), {})
        if _captured is not None:
            return _captured
    return _C.square(self=input)



[docs]
def tan(input, *, out=None):
    if out is not None:
        return _C.tan(self=input, out=out)
    if _capturing():
        _captured = _capture_call(tan, (input,), {})
        if _captured is not None:
            return _captured
    return _C.tan(self=input)



[docs]
def tanh(input, *, out=None):
    if out is not None:
        return _C.tanh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(tanh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.tanh(self=input)



[docs]
def relu(input):
    if _capturing():
        _captured = _capture_call(relu, (input,), {})
        if _captured is not None:
            return _captured
    return _C.relu(input)



[docs]
def relu_(input):
    if _capturing():
        _captured = _capture_call(relu_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.relu_(input)


def threshold_backward(grad_output, input, threshold, *, out=None):
    if out is not None:
        return _C.threshold_backward(grad_output=grad_output, self=input, threshold=threshold, out=out)
    if _capturing():
        _captured = _capture_call(threshold_backward, (grad_output, input, threshold), {})
        if _captured is not None:
            return _captured
    return _C.threshold_backward(grad_output=grad_output, self=input, threshold=threshold)


[docs]
def gelu(input, approximate='none', *, out=None):
    if out is not None:
        return _C.gelu(self=input, approximate=approximate, out=out)
    if _capturing():
        _captured = _capture_call(gelu, (input, approximate), {})
        if _captured is not None:
            return _captured
    return _C.gelu(self=input, approximate=approximate)


def gelu_backward(grad_output, input, approximate='none', *, out=None):
    if out is not None:
        return _C.gelu_backward(grad_output=grad_output, self=input, approximate=approximate, out=out)
    if _capturing():
        _captured = _capture_call(gelu_backward, (grad_output, input, approximate), {})
        if _captured is not None:
            return _captured
    return _C.gelu_backward(grad_output=grad_output, self=input, approximate=approximate)


[docs]
def silu(input, *, out=None):
    if out is not None:
        return _C.silu(self=input, out=out)
    if _capturing():
        _captured = _capture_call(silu, (input,), {})
        if _captured is not None:
            return _captured
    return _C.silu(self=input)


def silu_backward(grad_output, input, *, out=None):
    if out is not None:
        return _C.silu_backward(grad_output=grad_output, self=input, out=out)
    if _capturing():
        _captured = _capture_call(silu_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.silu_backward(grad_output=grad_output, self=input)

_c_empty = _C.empty

def empty(*size, dtype=None, device=None, pin_memory=False, requires_grad=False):
    if _capturing():
        _captured = _capture_call(empty, tuple(size), {'dtype': DType.undefined if dtype is None else dtype, 'device': device, 'pin_memory': pin_memory, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    if isinstance(device, str):
        device = tensorplay.device(device)
    elif device is Ellipsis:
        device = None
    if len(size) == 1:
        s0 = size[0]
        if s0.__class__ in (list, tuple):
            size = s0
        elif hasattr(s0, '__iter__'):
            size = list(s0)
    # Hot path: every option defaulted -> keyword-free positional
    # call (pybind kwarg parsing costs ~0.3us/call; the C++ side
    # applies identical defaults).
    if dtype is None and device is None and not requires_grad and not pin_memory:
        return _c_empty(size)
    return _C.empty(size=size, dtype=dtype, device=device, pin_memory=pin_memory, requires_grad=requires_grad)

def full(size, fill_value, *, dtype=DType.undefined, device=None, pin_memory=False, requires_grad=False, out=None):
    if out is not None:
        return _C.full(size=size, fill_value=fill_value, dtype=dtype, device=device, pin_memory=pin_memory, requires_grad=requires_grad, out=out)
    if _capturing():
        _captured = _capture_call(full, (size, fill_value), {'dtype': dtype, 'device': device, 'pin_memory': pin_memory, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    return _C.full(size=size, fill_value=fill_value, dtype=dtype, device=device, pin_memory=pin_memory, requires_grad=requires_grad)

_c_zeros = _C.zeros

def zeros(*size, dtype=None, device=None, pin_memory=False, requires_grad=False):
    if _capturing():
        _captured = _capture_call(zeros, tuple(size), {'dtype': DType.undefined if dtype is None else dtype, 'device': device, 'pin_memory': pin_memory, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    if isinstance(device, str):
        device = tensorplay.device(device)
    elif device is Ellipsis:
        device = None
    if len(size) == 1:
        s0 = size[0]
        if s0.__class__ in (list, tuple):
            size = s0
        elif hasattr(s0, '__iter__'):
            size = list(s0)
    # Hot path: every option defaulted -> keyword-free positional
    # call (pybind kwarg parsing costs ~0.3us/call; the C++ side
    # applies identical defaults).
    if dtype is None and device is None and not requires_grad and not pin_memory:
        return _c_zeros(size)
    return _C.zeros(size=size, dtype=dtype, device=device, pin_memory=pin_memory, requires_grad=requires_grad)

_c_ones = _C.ones

def ones(*size, dtype=None, device=None, pin_memory=False, requires_grad=False):
    if _capturing():
        _captured = _capture_call(ones, tuple(size), {'dtype': DType.undefined if dtype is None else dtype, 'device': device, 'pin_memory': pin_memory, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    if isinstance(device, str):
        device = tensorplay.device(device)
    elif device is Ellipsis:
        device = None
    if len(size) == 1:
        s0 = size[0]
        if s0.__class__ in (list, tuple):
            size = s0
        elif hasattr(s0, '__iter__'):
            size = list(s0)
    # Hot path: every option defaulted -> keyword-free positional
    # call (pybind kwarg parsing costs ~0.3us/call; the C++ side
    # applies identical defaults).
    if dtype is None and device is None and not requires_grad and not pin_memory:
        return _c_ones(size)
    return _C.ones(size=size, dtype=dtype, device=device, pin_memory=pin_memory, requires_grad=requires_grad)


[docs]
def eye(n, m=-1, *, dtype=DType.float32, device=None, requires_grad=False, out=None):
    if out is not None:
        return _C.eye(n, m, dtype=dtype, device=device, requires_grad=requires_grad, out=out)
    if _capturing():
        _captured = _capture_call(eye, (n, m), {'dtype': dtype, 'device': device, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    return _C.eye(n, m, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def arange(*args, dtype=DType.undefined, device=None, requires_grad=False):
    _captured = _capture_call(arange, tuple(args), {'dtype': dtype, 'device': device, 'requires_grad': requires_grad})
    if _captured is not None:
        return _captured
    if dtype == DType.undefined:
        _has_float = False
        for _a in args:
            if isinstance(_a, float):
                _has_float = True
                break
        if _has_float:
            dtype = DType.float32
        else:
            dtype = DType.int64
    if len(args) == 1:
        return _C.arange(end=args[0], dtype=dtype, device=_ensure_device(device), requires_grad=requires_grad)
    elif len(args) == 2:
        return _C.arange(start=args[0], end=args[1], dtype=dtype, device=_ensure_device(device), requires_grad=requires_grad)
    elif len(args) == 3:
        return _C.arange(start=args[0], end=args[1], step=args[2], dtype=dtype, device=_ensure_device(device), requires_grad=requires_grad)
    else:
        raise TypeError(f'arange expected 1-3 positional arguments, got {len(args)}')



[docs]
def linspace(start, end, steps, *, dtype=DType.float32, device=None, requires_grad=False, out=None):
    if out is not None:
        return _C.linspace(start, end, steps, dtype=dtype, device=device, requires_grad=requires_grad, out=out)
    if _capturing():
        _captured = _capture_call(linspace, (start, end, steps), {'dtype': dtype, 'device': device, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    return _C.linspace(start, end, steps, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def logspace(start, end, steps, base=10.0, *, dtype=DType.float32, device=None, requires_grad=False, out=None):
    if out is not None:
        return _C.logspace(start, end, steps, base, dtype=dtype, device=device, requires_grad=requires_grad, out=out)
    if _capturing():
        _captured = _capture_call(logspace, (start, end, steps, base), {'dtype': dtype, 'device': device, 'requires_grad': requires_grad})
        if _captured is not None:
            return _captured
    return _C.logspace(start, end, steps, base, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def sum(input, dim=None, keepdim=False, *, dtype=DType.undefined):
    if _capturing():
        _captured = _capture_call(sum, (input, dim, keepdim), {'dtype': dtype})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.sum(input, dtype=dtype)
    return _C.sum(input, dim, keepdim, dtype=dtype)



[docs]
def mean(input, dim=None, keepdim=False, *, dtype=DType.undefined):
    if _capturing():
        _captured = _capture_call(mean, (input, dim, keepdim), {'dtype': dtype})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.mean(input, dtype=dtype)
    return _C.mean(input, dim, keepdim, dtype=dtype)


def _sum_dim_backward(grad_output, input, dim, keepdim=False):
    if _capturing():
        _captured = _capture_call(_sum_dim_backward, (grad_output, input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C._sum_dim_backward(grad_output, input, dim, keepdim)

def mean_dim_backward(grad_output, input, dim, keepdim=False):
    if _capturing():
        _captured = _capture_call(mean_dim_backward, (grad_output, input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.mean_dim_backward(grad_output, input, dim, keepdim)

def max(input, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(max, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.max(input)
    return _C.max(input, dim, keepdim)

def min(input, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(min, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.min(input)
    return _C.min(input, dim, keepdim)


[docs]
def prod(input, dim=None, keepdim=False, *, dtype=DType.undefined):
    if _capturing():
        _captured = _capture_call(prod, (input, dim, keepdim), {'dtype': dtype})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.prod(input, dtype=dtype)
    return _C.prod(input, dim, keepdim, dtype=dtype)



[docs]
def argmax(input, dim=None, keepdim=False, *, out=None):
    if out is not None:
        return _C.argmax(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(argmax, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.argmax(self=input, dim=dim, keepdim=keepdim)



[docs]
def argmin(input, dim=None, keepdim=False, *, out=None):
    if out is not None:
        return _C.argmin(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(argmin, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.argmin(self=input, dim=dim, keepdim=keepdim)



[docs]
def all(input, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(all, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.all(input)
    return _C.all(input, dim, keepdim)



[docs]
def any(input, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(any, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.any(input)
    return _C.any(input, dim, keepdim)



[docs]
def var(input, correction=1, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(var, (input, correction, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.var(input, correction)
    return _C.var(input, dim, correction, keepdim)



[docs]
def std(input, correction=1, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(std, (input, correction, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.std(input, correction)
    return _C.std(input, dim, correction, keepdim)



[docs]
def median(input, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(median, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.median(input)
    return _C.median(input, dim, keepdim)



[docs]
def norm(input, p=2.0, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(norm, (input, p, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.norm(input, p)
    return _C.norm(input, dim, p, keepdim)



[docs]
def exponential_(input, lambd=1.0):
    return input.exponential_(lambd=lambd)



[docs]
def geometric_(input, p):
    return input.geometric_(p=p)



[docs]
def log_normal_(input, mean=1.0, std=2.0):
    return input.log_normal_(mean=mean, std=std)



[docs]
def normal_(input, mean=0.0, std=1.0, generator=None):
    return input.normal_(mean=mean, std=std, generator=generator)



[docs]
def random_(input, low=0, high=0):
    return input.random_(low=low, high=high)



[docs]
def uniform_(input, from_=0.0, to=1.0, generator=None):
    return input.uniform_(from_=from_, to=to, generator=generator)



[docs]
def bernoulli_(input, p, generator=None):
    return input.bernoulli_(p=p, generator=generator)



[docs]
def cauchy_(input, median=0.0, sigma=1.0):
    return input.cauchy_(median=median, sigma=sigma)



[docs]
def empty_like(input, dtype=DType.undefined, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(empty_like, (input, dtype, device, requires_grad), {})
        if _captured is not None:
            return _captured
    return _C.empty_like(input, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def zeros_like(input, dtype=DType.undefined, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(zeros_like, (input, dtype, device, requires_grad), {})
        if _captured is not None:
            return _captured
    return _C.zeros_like(input, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def ones_like(input, dtype=DType.undefined, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(ones_like, (input, dtype, device, requires_grad), {})
        if _captured is not None:
            return _captured
    return _C.ones_like(input, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def full_like(input, fill_value, dtype=DType.undefined, device=None, requires_grad=False):
    if _capturing():
        _captured = _capture_call(full_like, (input, fill_value, dtype, device, requires_grad), {})
        if _captured is not None:
            return _captured
    if not isinstance(fill_value, (tensorplay.Scalar, tensorplay.Tensor)):
        fill_value = tensorplay.Scalar(fill_value)
    return _C.full_like(input, fill_value, dtype=dtype, device=device, requires_grad=requires_grad)



[docs]
def masked_select(input, mask, *, out=None):
    if out is not None:
        return _C.masked_select(self=input, mask=mask, out=out)
    if _capturing():
        _captured = _capture_call(masked_select, (input, mask), {})
        if _captured is not None:
            return _captured
    return _C.masked_select(self=input, mask=mask)



[docs]
def zero_(input):
    return input.zero_()



[docs]
def max_pool2d(input, kernel_size, stride=([]), padding=([0, 0]), dilation=([1, 1]), ceil_mode=False):
    if _capturing():
        _captured = _capture_call(max_pool2d, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)



[docs]
def max_pool3d(input, kernel_size, stride=([]), padding=([0, 0, 0]), dilation=([1, 1, 1]), ceil_mode=False):
    if _capturing():
        _captured = _capture_call(max_pool3d, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.max_pool3d(input, kernel_size, stride, padding, dilation, ceil_mode)



[docs]
def max_pool2d_with_indices(input, kernel_size, stride=[], padding=[], dilation=[], ceil_mode=False, *, out=None):
    if out is not None:
        return _C.max_pool2d_with_indices(input=input, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, ceil_mode=ceil_mode, out=out)
    if _capturing():
        _captured = _capture_call(max_pool2d_with_indices, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    return _C.max_pool2d_with_indices(input=input, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, ceil_mode=ceil_mode)



[docs]
def max_pool3d_with_indices(input, kernel_size, stride=[], padding=[], dilation=[], ceil_mode=False, *, out=None):
    if out is not None:
        return _C.max_pool3d_with_indices(input=input, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, ceil_mode=ceil_mode, out=out)
    if _capturing():
        _captured = _capture_call(max_pool3d_with_indices, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    return _C.max_pool3d_with_indices(input=input, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, ceil_mode=ceil_mode)



[docs]
def avg_pool2d(input, kernel_size, stride=[], padding=[], ceil_mode=False, count_include_pad=True, divisor_override=None, *, out=None):
    if out is not None:
        return _C.avg_pool2d(input=input, kernel_size=kernel_size, stride=stride, padding=padding, ceil_mode=ceil_mode, count_include_pad=count_include_pad, divisor_override=divisor_override, out=out)
    if _capturing():
        _captured = _capture_call(avg_pool2d, (input, kernel_size, stride, padding, ceil_mode, count_include_pad, divisor_override), {})
        if _captured is not None:
            return _captured
    return _C.avg_pool2d(input=input, kernel_size=kernel_size, stride=stride, padding=padding, ceil_mode=ceil_mode, count_include_pad=count_include_pad, divisor_override=divisor_override)



[docs]
def avg_pool3d(input, kernel_size, stride=[], padding=[], ceil_mode=False, count_include_pad=True, divisor_override=None, *, out=None):
    if out is not None:
        return _C.avg_pool3d(input=input, kernel_size=kernel_size, stride=stride, padding=padding, ceil_mode=ceil_mode, count_include_pad=count_include_pad, divisor_override=divisor_override, out=out)
    if _capturing():
        _captured = _capture_call(avg_pool3d, (input, kernel_size, stride, padding, ceil_mode, count_include_pad, divisor_override), {})
        if _captured is not None:
            return _captured
    return _C.avg_pool3d(input=input, kernel_size=kernel_size, stride=stride, padding=padding, ceil_mode=ceil_mode, count_include_pad=count_include_pad, divisor_override=divisor_override)


def avg_pool3d_backward(grad_output, input, kernel_size, stride=[], padding=[], ceil_mode=False, count_include_pad=True, divisor_override=None, *, out=None):
    if out is not None:
        return _C.avg_pool3d_backward(grad_output=grad_output, input=input, kernel_size=kernel_size, stride=stride, padding=padding, ceil_mode=ceil_mode, count_include_pad=count_include_pad, divisor_override=divisor_override, out=out)
    if _capturing():
        _captured = _capture_call(avg_pool3d_backward, (grad_output, input, kernel_size, stride, padding, ceil_mode, count_include_pad, divisor_override), {})
        if _captured is not None:
            return _captured
    return _C.avg_pool3d_backward(grad_output=grad_output, input=input, kernel_size=kernel_size, stride=stride, padding=padding, ceil_mode=ceil_mode, count_include_pad=count_include_pad, divisor_override=divisor_override)


[docs]
def adaptive_avg_pool3d(input, output_size, *, out=None):
    if out is not None:
        return _C.adaptive_avg_pool3d(input=input, output_size=output_size, out=out)
    if _capturing():
        _captured = _capture_call(adaptive_avg_pool3d, (input, output_size), {})
        if _captured is not None:
            return _captured
    return _C.adaptive_avg_pool3d(input=input, output_size=output_size)


def adaptive_avg_pool3d_backward(grad_output, input, *, out=None):
    if out is not None:
        return _C.adaptive_avg_pool3d_backward(grad_output=grad_output, input=input, out=out)
    if _capturing():
        _captured = _capture_call(adaptive_avg_pool3d_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.adaptive_avg_pool3d_backward(grad_output=grad_output, input=input)


[docs]
def adaptive_avg_pool2d(input, output_size, *, out=None):
    if out is not None:
        return _C.adaptive_avg_pool2d(input=input, output_size=output_size, out=out)
    if _capturing():
        _captured = _capture_call(adaptive_avg_pool2d, (input, output_size), {})
        if _captured is not None:
            return _captured
    return _C.adaptive_avg_pool2d(input=input, output_size=output_size)



[docs]
def adaptive_max_pool2d(input, output_size, *, out=None):
    if out is not None:
        return _C.adaptive_max_pool2d(input=input, output_size=output_size, out=out)
    if _capturing():
        _captured = _capture_call(adaptive_max_pool2d, (input, output_size), {})
        if _captured is not None:
            return _captured
    return _C.adaptive_max_pool2d(input=input, output_size=output_size)



[docs]
def adaptive_max_pool2d_with_indices(input, output_size):
    if _capturing():
        _captured = _capture_call(adaptive_max_pool2d_with_indices, (input, output_size), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C.adaptive_max_pool2d_with_indices(input, output_size)



[docs]
def adaptive_max_pool3d(input, output_size, *, out=None):
    if out is not None:
        return _C.adaptive_max_pool3d(input=input, output_size=output_size, out=out)
    if _capturing():
        _captured = _capture_call(adaptive_max_pool3d, (input, output_size), {})
        if _captured is not None:
            return _captured
    return _C.adaptive_max_pool3d(input=input, output_size=output_size)



[docs]
def fractional_max_pool2d(input, kernel_size, output_size, random_samples, *, out=None):
    if out is not None:
        return _C.fractional_max_pool2d(self=input, kernel_size=kernel_size, output_size=output_size, random_samples=random_samples, out=out)
    if _capturing():
        _captured = _capture_call(fractional_max_pool2d, (input, kernel_size, output_size, random_samples), {})
        if _captured is not None:
            return _captured
    return _C.fractional_max_pool2d(self=input, kernel_size=kernel_size, output_size=output_size, random_samples=random_samples)


def fractional_max_pool2d_backward(grad_output, input, kernel_size, output_size, indices, *, out=None):
    if out is not None:
        return _C.fractional_max_pool2d_backward(grad_output=grad_output, self=input, kernel_size=kernel_size, output_size=output_size, indices=indices, out=out)
    if _capturing():
        _captured = _capture_call(fractional_max_pool2d_backward, (grad_output, input, kernel_size, output_size, indices), {})
        if _captured is not None:
            return _captured
    return _C.fractional_max_pool2d_backward(grad_output=grad_output, self=input, kernel_size=kernel_size, output_size=output_size, indices=indices)


[docs]
def fractional_max_pool3d(input, kernel_size, output_size, random_samples, *, out=None):
    if out is not None:
        return _C.fractional_max_pool3d(self=input, kernel_size=kernel_size, output_size=output_size, random_samples=random_samples, out=out)
    if _capturing():
        _captured = _capture_call(fractional_max_pool3d, (input, kernel_size, output_size, random_samples), {})
        if _captured is not None:
            return _captured
    return _C.fractional_max_pool3d(self=input, kernel_size=kernel_size, output_size=output_size, random_samples=random_samples)


def fractional_max_pool3d_backward(grad_output, input, kernel_size, output_size, indices, *, out=None):
    if out is not None:
        return _C.fractional_max_pool3d_backward(grad_output=grad_output, self=input, kernel_size=kernel_size, output_size=output_size, indices=indices, out=out)
    if _capturing():
        _captured = _capture_call(fractional_max_pool3d_backward, (grad_output, input, kernel_size, output_size, indices), {})
        if _captured is not None:
            return _captured
    return _C.fractional_max_pool3d_backward(grad_output=grad_output, self=input, kernel_size=kernel_size, output_size=output_size, indices=indices)


[docs]
def max_unpool2d(input, indices, output_size, *, out=None):
    if out is not None:
        return _C.max_unpool2d(self=input, indices=indices, output_size=output_size, out=out)
    if _capturing():
        _captured = _capture_call(max_unpool2d, (input, indices, output_size), {})
        if _captured is not None:
            return _captured
    return _C.max_unpool2d(self=input, indices=indices, output_size=output_size)


def max_unpool2d_backward(grad_output, indices, output_size):
    if _capturing():
        _captured = _capture_call(max_unpool2d_backward, (grad_output, indices, output_size), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C.max_unpool2d_backward(grad_output, indices, output_size)


[docs]
def max_unpool3d(input, indices, output_size, stride, padding, *, out=None):
    if out is not None:
        return _C.max_unpool3d(self=input, indices=indices, output_size=output_size, stride=stride, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(max_unpool3d, (input, indices, output_size, stride, padding), {})
        if _captured is not None:
            return _captured
    return _C.max_unpool3d(self=input, indices=indices, output_size=output_size, stride=stride, padding=padding)


def max_unpool3d_backward(grad_output, indices, output_size):
    if _capturing():
        _captured = _capture_call(max_unpool3d_backward, (grad_output, indices, output_size), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C.max_unpool3d_backward(grad_output, indices, output_size)


[docs]
def grid_sampler_2d(input, grid, interpolation_mode, padding_mode, align_corners):
    if _capturing():
        _captured = _capture_call(grid_sampler_2d, (input, grid, interpolation_mode, padding_mode, align_corners), {})
        if _captured is not None:
            return _captured
    return _C.grid_sampler_2d(input, grid, interpolation_mode, padding_mode, align_corners)


def grid_sampler_2d_backward(grad_output, input, grid, interpolation_mode, padding_mode, align_corners, output_mask):
    if _capturing():
        _captured = _capture_call(grid_sampler_2d_backward, (grad_output, input, grid, interpolation_mode, padding_mode, align_corners, output_mask), {})
        if _captured is not None:
            return _captured
    return _C.grid_sampler_2d_backward(grad_output, input, grid, interpolation_mode, padding_mode, align_corners, output_mask)


[docs]
def grid_sampler_3d(input, grid, interpolation_mode, padding_mode, align_corners):
    if _capturing():
        _captured = _capture_call(grid_sampler_3d, (input, grid, interpolation_mode, padding_mode, align_corners), {})
        if _captured is not None:
            return _captured
    return _C.grid_sampler_3d(input, grid, interpolation_mode, padding_mode, align_corners)


def grid_sampler_3d_backward(grad_output, input, grid, interpolation_mode, padding_mode, align_corners, output_mask):
    if _capturing():
        _captured = _capture_call(grid_sampler_3d_backward, (grad_output, input, grid, interpolation_mode, padding_mode, align_corners, output_mask), {})
        if _captured is not None:
            return _captured
    return _C.grid_sampler_3d_backward(grad_output, input, grid, interpolation_mode, padding_mode, align_corners, output_mask)


[docs]
def nll_loss(input, target, weight=None, reduction=1, ignore_index=-100, *, out=None):
    if out is not None:
        return _C.nll_loss(self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index, out=out)
    if _capturing():
        _captured = _capture_call(nll_loss, (input, target, weight, reduction, ignore_index), {})
        if _captured is not None:
            return _captured
    return _C.nll_loss(self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index)


def nll_loss_backward(grad_output, input, target, weight=None, reduction=1, ignore_index=-100, total_weight=None, *, out=None):
    if out is not None:
        return _C.nll_loss_backward(grad_output=grad_output, self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index, total_weight=total_weight, out=out)
    if _capturing():
        _captured = _capture_call(nll_loss_backward, (grad_output, input, target, weight, reduction, ignore_index, total_weight), {})
        if _captured is not None:
            return _captured
    return _C.nll_loss_backward(grad_output=grad_output, self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index, total_weight=total_weight)


[docs]
def nll_loss2d(input, target, weight=None, reduction=1, ignore_index=-100, *, out=None):
    if out is not None:
        return _C.nll_loss2d(self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index, out=out)
    if _capturing():
        _captured = _capture_call(nll_loss2d, (input, target, weight, reduction, ignore_index), {})
        if _captured is not None:
            return _captured
    return _C.nll_loss2d(self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index)


def nll_loss2d_backward(grad_output, input, target, weight=None, reduction=1, ignore_index=-100, total_weight=None, *, out=None):
    if out is not None:
        return _C.nll_loss2d_backward(grad_output=grad_output, self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index, total_weight=total_weight, out=out)
    if _capturing():
        _captured = _capture_call(nll_loss2d_backward, (grad_output, input, target, weight, reduction, ignore_index, total_weight), {})
        if _captured is not None:
            return _captured
    return _C.nll_loss2d_backward(grad_output=grad_output, self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index, total_weight=total_weight)

def _ctc_loss(log_probs, targets, input_lengths, target_lengths, blank=0, zero_infinity=False):
    if _capturing():
        _captured = _capture_call(_ctc_loss, (log_probs, targets, input_lengths, target_lengths, blank, zero_infinity), {})
        if _captured is not None:
            return _captured
    return _C._ctc_loss(log_probs, targets, input_lengths, target_lengths, blank, zero_infinity)

def _ctc_loss_backward(grad, log_probs, targets, input_lengths, target_lengths, neg_log_likelihood, log_alpha, blank, zero_infinity):
    if _capturing():
        _captured = _capture_call(_ctc_loss_backward, (grad, log_probs, targets, input_lengths, target_lengths, neg_log_likelihood, log_alpha, blank, zero_infinity), {})
        if _captured is not None:
            return _captured
    return _C._ctc_loss_backward(grad, log_probs, targets, input_lengths, target_lengths, neg_log_likelihood, log_alpha, blank, zero_infinity)


[docs]
def mse_loss(input, target, reduction=1, *, out=None):
    if out is not None:
        return _C.mse_loss(self=input, target=target, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(mse_loss, (input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.mse_loss(self=input, target=target, reduction=reduction)


def mse_loss_backward(grad_output, input, target, reduction=1, *, out=None):
    if out is not None:
        return _C.mse_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(mse_loss_backward, (grad_output, input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.mse_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction)

def max_pool2d_backward(grad_output, input, kernel_size, stride=([]), padding=([0, 0]), dilation=([1, 1]), ceil_mode=False):
    if _capturing():
        _captured = _capture_call(max_pool2d_backward, (grad_output, input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.max_pool2d_backward(grad_output, input, kernel_size, stride, padding, dilation, ceil_mode)

def max_pool3d_backward(grad_output, input, kernel_size, stride=([]), padding=([0, 0, 0]), dilation=([1, 1, 1]), ceil_mode=False):
    if _capturing():
        _captured = _capture_call(max_pool3d_backward, (grad_output, input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.max_pool3d_backward(grad_output, input, kernel_size, stride, padding, dilation, ceil_mode)

def max_pool2d_with_indices_backward(grad_output, input, kernel_size, stride=[], padding=[], dilation=[], ceil_mode=False, indices=None, *, out=None):
    if out is not None:
        return _C.max_pool2d_with_indices_backward(grad_output=grad_output, input=input, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, ceil_mode=ceil_mode, indices=indices, out=out)
    if _capturing():
        _captured = _capture_call(max_pool2d_with_indices_backward, (grad_output, input, kernel_size, stride, padding, dilation, ceil_mode, indices), {})
        if _captured is not None:
            return _captured
    return _C.max_pool2d_with_indices_backward(grad_output=grad_output, input=input, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, ceil_mode=ceil_mode, indices=indices)

def max_pool3d_with_indices_backward(grad_output, input, kernel_size, stride=[], padding=[], dilation=[], ceil_mode=False, indices=None, *, out=None):
    if out is not None:
        return _C.max_pool3d_with_indices_backward(grad_output=grad_output, input=input, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, ceil_mode=ceil_mode, indices=indices, out=out)
    if _capturing():
        _captured = _capture_call(max_pool3d_with_indices_backward, (grad_output, input, kernel_size, stride, padding, dilation, ceil_mode, indices), {})
        if _captured is not None:
            return _captured
    return _C.max_pool3d_with_indices_backward(grad_output=grad_output, input=input, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, ceil_mode=ceil_mode, indices=indices)

def avg_pool2d_backward(grad_output, input, kernel_size, stride=[], padding=[], ceil_mode=False, count_include_pad=True, divisor_override=None, *, out=None):
    if out is not None:
        return _C.avg_pool2d_backward(grad_output=grad_output, input=input, kernel_size=kernel_size, stride=stride, padding=padding, ceil_mode=ceil_mode, count_include_pad=count_include_pad, divisor_override=divisor_override, out=out)
    if _capturing():
        _captured = _capture_call(avg_pool2d_backward, (grad_output, input, kernel_size, stride, padding, ceil_mode, count_include_pad, divisor_override), {})
        if _captured is not None:
            return _captured
    return _C.avg_pool2d_backward(grad_output=grad_output, input=input, kernel_size=kernel_size, stride=stride, padding=padding, ceil_mode=ceil_mode, count_include_pad=count_include_pad, divisor_override=divisor_override)

def adaptive_avg_pool2d_backward(grad_output, input):
    if _capturing():
        _captured = _capture_call(adaptive_avg_pool2d_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.adaptive_avg_pool2d_backward(grad_output, input)

def adaptive_max_pool2d_backward(grad_output, input, *, out=None):
    if out is not None:
        return _C.adaptive_max_pool2d_backward(grad_output=grad_output, input=input, out=out)
    if _capturing():
        _captured = _capture_call(adaptive_max_pool2d_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.adaptive_max_pool2d_backward(grad_output=grad_output, input=input)

def adaptive_max_pool2d_with_indices_backward(grad_output, input, output_size, indices):
    if _capturing():
        _captured = _capture_call(adaptive_max_pool2d_with_indices_backward, (grad_output, input, output_size, indices), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C.adaptive_max_pool2d_with_indices_backward(grad_output, input, output_size, indices)

def adaptive_max_pool3d_backward(grad_output, input, *, out=None):
    if out is not None:
        return _C.adaptive_max_pool3d_backward(grad_output=grad_output, input=input, out=out)
    if _capturing():
        _captured = _capture_call(adaptive_max_pool3d_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.adaptive_max_pool3d_backward(grad_output=grad_output, input=input)


[docs]
def batch_norm(input, weight, bias, running_mean, running_var, training, momentum, eps):
    if _capturing():
        _captured = _capture_call(batch_norm, (input, weight, bias, running_mean, running_var, training, momentum, eps), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm(input, weight, bias, running_mean, running_var, training, momentum, eps)



[docs]
def layer_norm(input, normalized_shape, weight=None, bias=None, eps=1e-5):
    if _capturing():
        _captured = _capture_call(layer_norm, (input, normalized_shape, weight, bias, eps), {})
        if _captured is not None:
            return _captured
    if isinstance(normalized_shape, int) and not isinstance(normalized_shape, bool):
        normalized_shape = [normalized_shape]
    return _C.layer_norm(input, normalized_shape, weight, bias, eps)



[docs]
def group_norm(input, num_groups, weight=None, bias=None, eps=1e-5):
    if _capturing():
        _captured = _capture_call(group_norm, (input, num_groups, weight, bias, eps), {})
        if _captured is not None:
            return _captured
    return _C.group_norm(input, num_groups, weight, bias, eps)



[docs]
def instance_norm(input, weight=None, bias=None, running_mean=None, running_var=None, use_input_stats=True, momentum=0.1, eps=1e-5):
    if _capturing():
        _captured = _capture_call(instance_norm, (input, weight, bias, running_mean, running_var, use_input_stats, momentum, eps), {})
        if _captured is not None:
            return _captured
    return _C.instance_norm(input, weight, bias, running_mean, running_var, use_input_stats, momentum, eps)


def batch_norm_backward(grad_output, input, weight=None, running_mean=None, running_var=None, training=True, eps=1e-5):
    if _capturing():
        _captured = _capture_call(batch_norm_backward, (grad_output, input, weight, running_mean, running_var, training, eps), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm_backward(grad_output, input, weight, running_mean, running_var, training, eps)

def layer_norm_backward(grad_output, input, normalized_shape, weight=None, bias=None, eps=1e-5):
    if _capturing():
        _captured = _capture_call(layer_norm_backward, (grad_output, input, normalized_shape, weight, bias, eps), {})
        if _captured is not None:
            return _captured
    if isinstance(normalized_shape, int) and not isinstance(normalized_shape, bool):
        normalized_shape = [normalized_shape]
    return _C.layer_norm_backward(grad_output, input, normalized_shape, weight, bias, eps)

def group_norm_backward(grad_output, input, num_groups, weight=None, bias=None, eps=1e-5):
    if _capturing():
        _captured = _capture_call(group_norm_backward, (grad_output, input, num_groups, weight, bias, eps), {})
        if _captured is not None:
            return _captured
    return _C.group_norm_backward(grad_output, input, num_groups, weight, bias, eps)

def instance_norm_backward(grad_output, input, weight=None, bias=None, running_mean=None, running_var=None, use_input_stats=True, eps=1e-5):
    if _capturing():
        _captured = _capture_call(instance_norm_backward, (grad_output, input, weight, bias, running_mean, running_var, use_input_stats, eps), {})
        if _captured is not None:
            return _captured
    return _C.instance_norm_backward(grad_output, input, weight, bias, running_mean, running_var, use_input_stats, eps)


[docs]
def multinomial(input, num_samples, replacement=False, impl=0, *, out=None):
    if out is not None:
        return _C.multinomial(self=input, num_samples=num_samples, replacement=replacement, impl=impl, out=out)
    if _capturing():
        _captured = _capture_call(multinomial, (input, num_samples, replacement, impl), {})
        if _captured is not None:
            return _captured
    return _C.multinomial(self=input, num_samples=num_samples, replacement=replacement, impl=impl)



[docs]
def topk(input, k, dim=-1, largest=True, sorted=True, impl=0, *, out=None):
    if out is not None:
        return _C.topk(self=input, k=k, dim=dim, largest=largest, sorted=sorted, impl=impl, out=out)
    if _capturing():
        _captured = _capture_call(topk, (input, k, dim, largest, sorted, impl), {})
        if _captured is not None:
            return _captured
    return _C.topk(self=input, k=k, dim=dim, largest=largest, sorted=sorted, impl=impl)



[docs]
def sample(logits, temperature=1.0, top_k=0, top_p=1.0, impl=0):
    if _capturing():
        _captured = _capture_call(sample, (logits, temperature, top_k, top_p, impl), {})
        if _captured is not None:
            return _captured
    return _C.sample(logits, temperature, top_k, top_p, impl)



[docs]
def scaled_dot_product_attention(query, key, value, is_causal=False, impl=0):
    if _capturing():
        _captured = _capture_call(scaled_dot_product_attention, (query, key, value, is_causal, impl), {})
        if _captured is not None:
            return _captured
    return _C.scaled_dot_product_attention(query, key, value, is_causal, impl)


def scaled_dot_product_attention_backward(grad_output, query, key, value, is_causal=False, impl=0):
    if _capturing():
        _captured = _capture_call(scaled_dot_product_attention_backward, (grad_output, query, key, value, is_causal, impl), {})
        if _captured is not None:
            return _captured
    return _C.scaled_dot_product_attention_backward(grad_output, query, key, value, is_causal, impl)


[docs]
def tp_l1_loss(input, target, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_l1_loss, (input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_l1_loss(input, target, reduction)


def tp_l1_loss_backward(grad_output, input, target, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_l1_loss_backward, (grad_output, input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_l1_loss_backward(grad_output, input, target, reduction)


[docs]
def tp_kl_div(input, target, reduction=1, log_target=False):
    if _capturing():
        _captured = _capture_call(tp_kl_div, (input, target, reduction, log_target), {})
        if _captured is not None:
            return _captured
    return _C.tp_kl_div(input, target, reduction, log_target)


def tp_kl_div_backward(grad_output, input, target, reduction=1, log_target=False):
    if _capturing():
        _captured = _capture_call(tp_kl_div_backward, (grad_output, input, target, reduction, log_target), {})
        if _captured is not None:
            return _captured
    return _C.tp_kl_div_backward(grad_output, input, target, reduction, log_target)


[docs]
def tp_margin_ranking_loss(input1, input2, target, margin=0.0, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_margin_ranking_loss, (input1, input2, target, margin, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_margin_ranking_loss(input1, input2, target, margin, reduction)


def tp_margin_ranking_loss_backward(grad_output, input1, input2, target, margin=0.0, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_margin_ranking_loss_backward, (grad_output, input1, input2, target, margin, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_margin_ranking_loss_backward(grad_output, input1, input2, target, margin, reduction)


[docs]
def tp_hinge_embedding_loss(input, target, margin=1.0, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_hinge_embedding_loss, (input, target, margin, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_hinge_embedding_loss(input, target, margin, reduction)


def tp_hinge_embedding_loss_backward(grad_output, input, target, margin=1.0, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_hinge_embedding_loss_backward, (grad_output, input, target, margin, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_hinge_embedding_loss_backward(grad_output, input, target, margin, reduction)


[docs]
def tp_soft_margin_loss(input, target, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_soft_margin_loss, (input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_soft_margin_loss(input, target, reduction)


def tp_soft_margin_loss_backward(grad_output, input, target, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_soft_margin_loss_backward, (grad_output, input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_soft_margin_loss_backward(grad_output, input, target, reduction)


[docs]
def tp_cosine_embedding_loss(input1, input2, target, margin=0.0, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_cosine_embedding_loss, (input1, input2, target, margin, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_cosine_embedding_loss(input1, input2, target, margin, reduction)


def tp_cosine_embedding_loss_backward(grad_output, input1, input2, target, margin=0.0, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_cosine_embedding_loss_backward, (grad_output, input1, input2, target, margin, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_cosine_embedding_loss_backward(grad_output, input1, input2, target, margin, reduction)


[docs]
def tp_poisson_nll_loss(input, target, log_input=True, full=False, eps=1e-08, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_poisson_nll_loss, (input, target, log_input, full, eps, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_poisson_nll_loss(input, target, log_input, full, eps, reduction)


def tp_poisson_nll_loss_backward(grad_output, input, target, log_input=True, full=False, eps=1e-08, reduction=1):
    if _capturing():
        _captured = _capture_call(tp_poisson_nll_loss_backward, (grad_output, input, target, log_input, full, eps, reduction), {})
        if _captured is not None:
            return _captured
    return _C.tp_poisson_nll_loss_backward(grad_output, input, target, log_input, full, eps, reduction)


[docs]
def fft_fft(input, n=-1, dim=-1, norm='backward', *, out=None):
    if out is not None:
        return _C.fft_fft(self=input, n=n, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_fft, (input, n, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_fft(self=input, n=n, dim=dim, norm=norm)



[docs]
def fft_ifft(input, n=-1, dim=-1, norm='backward', *, out=None):
    if out is not None:
        return _C.fft_ifft(self=input, n=n, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_ifft, (input, n, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_ifft(self=input, n=n, dim=dim, norm=norm)



[docs]
def fft_rfft(input, n=-1, dim=-1, norm='backward', *, out=None):
    if out is not None:
        return _C.fft_rfft(self=input, n=n, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_rfft, (input, n, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_rfft(self=input, n=n, dim=dim, norm=norm)



[docs]
def fft_irfft(input, n=-1, dim=-1, norm='backward', *, out=None):
    if out is not None:
        return _C.fft_irfft(self=input, n=n, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_irfft, (input, n, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_irfft(self=input, n=n, dim=dim, norm=norm)



[docs]
def fft_fft2(input, s=None, dim=[-2,-1], norm='backward', *, out=None):
    if out is not None:
        return _C.fft_fft2(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_fft2, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_fft2(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_ifft2(input, s=None, dim=[-2,-1], norm='backward', *, out=None):
    if out is not None:
        return _C.fft_ifft2(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_ifft2, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_ifft2(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_rfft2(input, s=None, dim=[-2,-1], norm='backward', *, out=None):
    if out is not None:
        return _C.fft_rfft2(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_rfft2, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_rfft2(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_irfft2(input, s=None, dim=[-2,-1], norm='backward', *, out=None):
    if out is not None:
        return _C.fft_irfft2(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_irfft2, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_irfft2(self=input, s=s, dim=dim, norm=norm)


def fft_fft2_backward(grad, input, s=None, dim=[-2,-1], norm='backward'):
    if _capturing():
        _captured = _capture_call(fft_fft2_backward, (grad, input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    if isinstance(s, int) and not isinstance(s, bool):
        s = [s]
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.fft_fft2_backward(grad, input, s, dim, norm)

def fft_ifft2_backward(grad, input, s=None, dim=[-2,-1], norm='backward'):
    if _capturing():
        _captured = _capture_call(fft_ifft2_backward, (grad, input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    if isinstance(s, int) and not isinstance(s, bool):
        s = [s]
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.fft_ifft2_backward(grad, input, s, dim, norm)

def fft_rfft2_backward(grad, input, s=None, dim=[-2,-1], norm='backward'):
    if _capturing():
        _captured = _capture_call(fft_rfft2_backward, (grad, input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    if isinstance(s, int) and not isinstance(s, bool):
        s = [s]
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.fft_rfft2_backward(grad, input, s, dim, norm)

def fft_irfft2_backward(grad, input, s=None, dim=[-2,-1], norm='backward'):
    if _capturing():
        _captured = _capture_call(fft_irfft2_backward, (grad, input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    if isinstance(s, int) and not isinstance(s, bool):
        s = [s]
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.fft_irfft2_backward(grad, input, s, dim, norm)

def fft_fft_backward(grad, input, dim, norm):
    if _capturing():
        _captured = _capture_call(fft_fft_backward, (grad, input, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_fft_backward(grad, input, dim, norm)

def fft_ifft_backward(grad, input, dim, norm):
    if _capturing():
        _captured = _capture_call(fft_ifft_backward, (grad, input, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_ifft_backward(grad, input, dim, norm)

def fft_rfft_backward(grad, input, dim, norm):
    if _capturing():
        _captured = _capture_call(fft_rfft_backward, (grad, input, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_rfft_backward(grad, input, dim, norm)

def fft_irfft_backward(grad, input, dim, norm):
    if _capturing():
        _captured = _capture_call(fft_irfft_backward, (grad, input, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_irfft_backward(grad, input, dim, norm)


[docs]
def hann_window(window_length, periodic=True, dtype=None):
    if _capturing():
        _captured = _capture_call(hann_window, (window_length, periodic, dtype), {})
        if _captured is not None:
            return _captured
    if dtype is None:
            dtype = DType.undefined
    return _C.hann_window(window_length, periodic, dtype)



[docs]
def hamming_window(window_length, periodic=True, alpha=0.54, beta=0.46, dtype=None):
    if _capturing():
        _captured = _capture_call(hamming_window, (window_length, periodic, alpha, beta, dtype), {})
        if _captured is not None:
            return _captured
    if dtype is None:
            dtype = DType.undefined
    return _C.hamming_window(window_length, periodic, alpha, beta, dtype)



[docs]
def bartlett_window(window_length, periodic=True, dtype=None):
    if _capturing():
        _captured = _capture_call(bartlett_window, (window_length, periodic, dtype), {})
        if _captured is not None:
            return _captured
    if dtype is None:
            dtype = DType.undefined
    return _C.bartlett_window(window_length, periodic, dtype)



[docs]
def blackman_window(window_length, periodic=True, dtype=None):
    if _capturing():
        _captured = _capture_call(blackman_window, (window_length, periodic, dtype), {})
        if _captured is not None:
            return _captured
    if dtype is None:
            dtype = DType.undefined
    return _C.blackman_window(window_length, periodic, dtype)



[docs]
def stft(input, n_fft, hop_length=None, win_length=None, window=None, center=True, pad_mode='reflect', normalized=False, onesided=True, return_complex=True):
    if _capturing():
        _captured = _capture_call(stft, (input, n_fft, hop_length, win_length, window, center, pad_mode, normalized, onesided, return_complex), {})
        if _captured is not None:
            return _captured
    return _C.stft(input, n_fft, hop_length, win_length, window, center, pad_mode, normalized, onesided, return_complex)



[docs]
def istft(input, n_fft, hop_length=None, win_length=None, window=None, center=True, normalized=False, onesided=True, length=None, return_complex=False):
    if _capturing():
        _captured = _capture_call(istft, (input, n_fft, hop_length, win_length, window, center, normalized, onesided, length, return_complex), {})
        if _captured is not None:
            return _captured
    return _C.istft(input, n_fft, hop_length, win_length, window, center, normalized, onesided, length, return_complex)


def stft_backward(grad_output, input, n_fft, hop_length=None, win_length=None, window=None, center=True, pad_mode='reflect', normalized=False, onesided=True):
    if _capturing():
        _captured = _capture_call(stft_backward, (grad_output, input, n_fft, hop_length, win_length, window, center, pad_mode, normalized, onesided), {})
        if _captured is not None:
            return _captured
    return _C.stft_backward(grad_output, input, n_fft, hop_length, win_length, window, center, pad_mode, normalized, onesided)


[docs]
def cumsum(input, dim=0, dtype=None, *, out=None):
    if out is not None:
        return _C.cumsum(self=input, dim=dim, dtype=dtype, out=out)
    if _capturing():
        _captured = _capture_call(cumsum, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.cumsum(self=input, dim=dim, dtype=dtype)



[docs]
def flip(input, dims=[]):
    if _capturing():
        _captured = _capture_call(flip, (input, dims), {})
        if _captured is not None:
            return _captured
    if isinstance(dims, int) and not isinstance(dims, bool):
        dims = [dims]
    return _C.flip(input, dims)



[docs]
def index_select(input, dim, index, *, out=None):
    if out is not None:
        return _C.index_select(self=input, dim=dim, index=index, out=out)
    if _capturing():
        _captured = _capture_call(index_select, (input, dim, index), {})
        if _captured is not None:
            return _captured
    return _C.index_select(self=input, dim=dim, index=index)



[docs]
def index_add(input, dim, index, source, *, out=None):
    if out is not None:
        return _C.index_add(self=input, dim=dim, index=index, source=source, out=out)
    if _capturing():
        _captured = _capture_call(index_add, (input, dim, index, source), {})
        if _captured is not None:
            return _captured
    return _C.index_add(self=input, dim=dim, index=index, source=source)



[docs]
def nonzero(input, *, out=None):
    if out is not None:
        return _C.nonzero(self=input, out=out)
    if _capturing():
        _captured = _capture_call(nonzero, (input,), {})
        if _captured is not None:
            return _captured
    return _C.nonzero(self=input)



[docs]
def unique(input, sorted=True, return_inverse=False, return_counts=False, dim=None):
    if dim is not None:
        values, inverse, counts = unique_dim(input, dim, sorted, True, True)
        outs = [values]
        if return_inverse:
            outs.append(inverse)
        if return_counts:
            outs.append(counts)
        return outs[0] if len(outs) == 1 else tuple(outs)
    if _capturing():
        _captured = _capture_call(unique, (input, sorted, return_inverse, return_counts), {})
        if _captured is not None:
            return _captured
    values, inverse, counts = _C.unique(input, sorted, True, True)
    outs = [values]
    if return_inverse:
        outs.append(inverse)
    if return_counts:
        outs.append(counts)
    return outs[0] if len(outs) == 1 else tuple(outs)



[docs]
def count_nonzero(input, dim=[]):
    if _capturing():
        _captured = _capture_call(count_nonzero, (input, dim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.count_nonzero(input, dim)



[docs]
def log10(input, *, out=None):
    if out is not None:
        return _C.log10(self=input, out=out)
    if _capturing():
        _captured = _capture_call(log10, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log10(self=input)



[docs]
def log1p(input, *, out=None):
    if out is not None:
        return _C.log1p(self=input, out=out)
    if _capturing():
        _captured = _capture_call(log1p, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log1p(self=input)



[docs]
def frac(input, *, out=None):
    if out is not None:
        return _C.frac(self=input, out=out)
    if _capturing():
        _captured = _capture_call(frac, (input,), {})
        if _captured is not None:
            return _captured
    return _C.frac(self=input)



[docs]
def i0(input, *, out=None):
    if out is not None:
        return _C.i0(self=input, out=out)
    if _capturing():
        _captured = _capture_call(i0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.i0(self=input)



[docs]
def polar(abs, angle, *, out=None):
    if out is not None:
        return _C.polar(abs=abs, angle=angle, out=out)
    if _capturing():
        _captured = _capture_call(polar, (abs, angle), {})
        if _captured is not None:
            return _captured
    return _C.polar(abs=abs, angle=angle)



[docs]
def real(input):
    if _capturing():
        _captured = _capture_call(real, (input,), {})
        if _captured is not None:
            return _captured
    return _C.real(input)



[docs]
def diff(input, n=1, dim=-1, prepend=None, append=None, *, out=None):
    if out is not None:
        return _C.diff(self=input, n=n, dim=dim, prepend=prepend, append=append, out=out)
    if _capturing():
        _captured = _capture_call(diff, (input, n, dim, prepend, append), {})
        if _captured is not None:
            return _captured
    return _C.diff(self=input, n=n, dim=dim, prepend=prepend, append=append)



[docs]
def logical_and(input, other, *, out=None):
    if out is not None:
        return _C.logical_and(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(logical_and, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.logical_and(self=input, other=other)



[docs]
def cross(input, other, dim=None, *, out=None):
    if out is not None:
        return _C.cross(self=input, other=other, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(cross, (input, other, dim), {})
        if _captured is not None:
            return _captured
    return _C.cross(self=input, other=other, dim=dim)



[docs]
def roll(input, shifts, dims=[]):
    if _capturing():
        _captured = _capture_call(roll, (input, shifts, dims), {})
        if _captured is not None:
            return _captured
    if isinstance(shifts, int) and not isinstance(shifts, bool):
        shifts = [shifts]
    if isinstance(dims, int) and not isinstance(dims, bool):
        dims = [dims]
    return _C.roll(input, shifts, dims)



[docs]
def unfold(input, dimension, size, step):
    if _capturing():
        _captured = _capture_call(unfold, (input, dimension, size, step), {})
        if _captured is not None:
            return _captured
    return _C.unfold(input, dimension, size, step)


def unfold_backward(grad_output, input_sizes, dim, size, step):
    if _capturing():
        _captured = _capture_call(unfold_backward, (grad_output, input_sizes, dim, size, step), {})
        if _captured is not None:
            return _captured
    if isinstance(input_sizes, int) and not isinstance(input_sizes, bool):
        input_sizes = [input_sizes]
    return _C.unfold_backward(grad_output, input_sizes, dim, size, step)


[docs]
def threshold(input, threshold, value, *, out=None):
    if out is not None:
        return _C.threshold(self=input, threshold=threshold, value=value, out=out)
    if _capturing():
        _captured = _capture_call(threshold, (input, threshold, value), {})
        if _captured is not None:
            return _captured
    return _C.threshold(self=input, threshold=threshold, value=value)



[docs]
def relu6(input):
    if _capturing():
        _captured = _capture_call(relu6, (input,), {})
        if _captured is not None:
            return _captured
    return _C.relu6(input)



[docs]
def leaky_relu(input, negative_slope=0.01, *, out=None):
    if out is not None:
        return _C.leaky_relu(self=input, negative_slope=negative_slope, out=out)
    if _capturing():
        _captured = _capture_call(leaky_relu, (input, negative_slope), {})
        if _captured is not None:
            return _captured
    return _C.leaky_relu(self=input, negative_slope=negative_slope)


def leaky_relu_backward(grad_output, input, negative_slope, self_is_result, *, out=None):
    if out is not None:
        return _C.leaky_relu_backward(grad_output=grad_output, self=input, negative_slope=negative_slope, self_is_result=self_is_result, out=out)
    if _capturing():
        _captured = _capture_call(leaky_relu_backward, (grad_output, input, negative_slope, self_is_result), {})
        if _captured is not None:
            return _captured
    return _C.leaky_relu_backward(grad_output=grad_output, self=input, negative_slope=negative_slope, self_is_result=self_is_result)


[docs]
def rrelu_with_noise(input, noise, lower=0.125, upper=0.3333333333333333, training=False, *, out=None):
    if out is not None:
        return _C.rrelu_with_noise(self=input, noise=noise, lower=lower, upper=upper, training=training, out=out)
    if _capturing():
        _captured = _capture_call(rrelu_with_noise, (input, noise, lower, upper, training), {})
        if _captured is not None:
            return _captured
    return _C.rrelu_with_noise(self=input, noise=noise, lower=lower, upper=upper, training=training)


def rrelu_with_noise_backward(grad_output, input, noise, lower, upper, training, self_is_result):
    if _capturing():
        _captured = _capture_call(rrelu_with_noise_backward, (grad_output, input, noise, lower, upper, training, self_is_result), {})
        if _captured is not None:
            return _captured
    if not isinstance(lower, (tensorplay.Scalar, tensorplay.Tensor)):
        lower = tensorplay.Scalar(lower)
    if not isinstance(upper, (tensorplay.Scalar, tensorplay.Tensor)):
        upper = tensorplay.Scalar(upper)
    return _C.rrelu_with_noise_backward(grad_output, input, noise, lower, upper, training, self_is_result)


[docs]
def log_sigmoid(input, *, out=None):
    if out is not None:
        return _C.log_sigmoid(self=input, out=out)
    if _capturing():
        _captured = _capture_call(log_sigmoid, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log_sigmoid(self=input)


def log_sigmoid_backward(grad_output, input, *, out=None):
    if out is not None:
        return _C.log_sigmoid_backward(grad_output=grad_output, self=input, out=out)
    if _capturing():
        _captured = _capture_call(log_sigmoid_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.log_sigmoid_backward(grad_output=grad_output, self=input)


[docs]
def hardtanh(input, min_val=-1, max_val=1, *, out=None):
    if out is not None:
        return _C.hardtanh(self=input, min_val=min_val, max_val=max_val, out=out)
    if _capturing():
        _captured = _capture_call(hardtanh, (input, min_val, max_val), {})
        if _captured is not None:
            return _captured
    return _C.hardtanh(self=input, min_val=min_val, max_val=max_val)


def hardtanh_backward(grad_output, input, min_val, max_val, *, out=None):
    if out is not None:
        return _C.hardtanh_backward(grad_output=grad_output, self=input, min_val=min_val, max_val=max_val, out=out)
    if _capturing():
        _captured = _capture_call(hardtanh_backward, (grad_output, input, min_val, max_val), {})
        if _captured is not None:
            return _captured
    return _C.hardtanh_backward(grad_output=grad_output, self=input, min_val=min_val, max_val=max_val)


[docs]
def hardswish(input, *, out=None):
    if out is not None:
        return _C.hardswish(self=input, out=out)
    if _capturing():
        _captured = _capture_call(hardswish, (input,), {})
        if _captured is not None:
            return _captured
    return _C.hardswish(self=input)


def hardswish_backward(grad_output, input):
    if _capturing():
        _captured = _capture_call(hardswish_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.hardswish_backward(grad_output, input)


[docs]
def hardsigmoid(input, *, out=None):
    if out is not None:
        return _C.hardsigmoid(self=input, out=out)
    if _capturing():
        _captured = _capture_call(hardsigmoid, (input,), {})
        if _captured is not None:
            return _captured
    return _C.hardsigmoid(self=input)


def hardsigmoid_backward(grad_output, input, *, out=None):
    if out is not None:
        return _C.hardsigmoid_backward(grad_output=grad_output, self=input, out=out)
    if _capturing():
        _captured = _capture_call(hardsigmoid_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.hardsigmoid_backward(grad_output=grad_output, self=input)


[docs]
def softplus(input, beta=1, threshold=20, *, out=None):
    if out is not None:
        return _C.softplus(self=input, beta=beta, threshold=threshold, out=out)
    if _capturing():
        _captured = _capture_call(softplus, (input, beta, threshold), {})
        if _captured is not None:
            return _captured
    return _C.softplus(self=input, beta=beta, threshold=threshold)


def softplus_backward(grad_output, input, beta, threshold, *, out=None):
    if out is not None:
        return _C.softplus_backward(grad_output=grad_output, self=input, beta=beta, threshold=threshold, out=out)
    if _capturing():
        _captured = _capture_call(softplus_backward, (grad_output, input, beta, threshold), {})
        if _captured is not None:
            return _captured
    return _C.softplus_backward(grad_output=grad_output, self=input, beta=beta, threshold=threshold)


[docs]
def elu(input, alpha=1, scale=1, input_scale=1, *, out=None):
    if out is not None:
        return _C.elu(self=input, alpha=alpha, scale=scale, input_scale=input_scale, out=out)
    if _capturing():
        _captured = _capture_call(elu, (input, alpha, scale, input_scale), {})
        if _captured is not None:
            return _captured
    return _C.elu(self=input, alpha=alpha, scale=scale, input_scale=input_scale)


def elu_backward(grad_output, alpha, scale, input_scale, is_result, self_or_result, *, out=None):
    if out is not None:
        return _C.elu_backward(grad_output=grad_output, alpha=alpha, scale=scale, input_scale=input_scale, is_result=is_result, self_or_result=self_or_result, out=out)
    if _capturing():
        _captured = _capture_call(elu_backward, (grad_output, alpha, scale, input_scale, is_result, self_or_result), {})
        if _captured is not None:
            return _captured
    return _C.elu_backward(grad_output=grad_output, alpha=alpha, scale=scale, input_scale=input_scale, is_result=is_result, self_or_result=self_or_result)


[docs]
def selu(input):
    if _capturing():
        _captured = _capture_call(selu, (input,), {})
        if _captured is not None:
            return _captured
    return _C.selu(input)



[docs]
def celu(input, alpha=1.0):
    if _capturing():
        _captured = _capture_call(celu, (input, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C.celu(input, alpha)



[docs]
def mish(input, *, out=None):
    if out is not None:
        return _C.mish(self=input, out=out)
    if _capturing():
        _captured = _capture_call(mish, (input,), {})
        if _captured is not None:
            return _captured
    return _C.mish(self=input)


def mish_backward(grad_output, input):
    if _capturing():
        _captured = _capture_call(mish_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.mish_backward(grad_output, input)


[docs]
def softshrink(input, lambd=0.5, *, out=None):
    if out is not None:
        return _C.softshrink(self=input, lambd=lambd, out=out)
    if _capturing():
        _captured = _capture_call(softshrink, (input, lambd), {})
        if _captured is not None:
            return _captured
    return _C.softshrink(self=input, lambd=lambd)


def softshrink_backward(grad_output, input, lambd, *, out=None):
    if out is not None:
        return _C.softshrink_backward(grad_output=grad_output, self=input, lambd=lambd, out=out)
    if _capturing():
        _captured = _capture_call(softshrink_backward, (grad_output, input, lambd), {})
        if _captured is not None:
            return _captured
    return _C.softshrink_backward(grad_output=grad_output, self=input, lambd=lambd)


[docs]
def hardshrink(input, lambd=0.5, *, out=None):
    if out is not None:
        return _C.hardshrink(self=input, lambd=lambd, out=out)
    if _capturing():
        _captured = _capture_call(hardshrink, (input, lambd), {})
        if _captured is not None:
            return _captured
    return _C.hardshrink(self=input, lambd=lambd)


def hardshrink_backward(grad_out, input, lambd, *, out=None):
    if out is not None:
        return _C.hardshrink_backward(grad_out=grad_out, self=input, lambd=lambd, out=out)
    if _capturing():
        _captured = _capture_call(hardshrink_backward, (grad_out, input, lambd), {})
        if _captured is not None:
            return _captured
    return _C.hardshrink_backward(grad_out=grad_out, self=input, lambd=lambd)


[docs]
def glu(input, dim=-1, *, out=None):
    if out is not None:
        return _C.glu(self=input, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(glu, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.glu(self=input, dim=dim)


def glu_backward(grad_output, input, dim=-1, *, out=None):
    if out is not None:
        return _C.glu_backward(grad_output=grad_output, self=input, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(glu_backward, (grad_output, input, dim), {})
        if _captured is not None:
            return _captured
    return _C.glu_backward(grad_output=grad_output, self=input, dim=dim)


[docs]
def one_hot(input, num_classes=-1):
    if _capturing():
        _captured = _capture_call(one_hot, (input, num_classes), {})
        if _captured is not None:
            return _captured
    return _C.one_hot(input, num_classes)



[docs]
def narrow(input, dim, start, length):
    if _capturing():
        _captured = _capture_call(narrow, (input, dim, start, length), {})
        if _captured is not None:
            return _captured
    return _C.narrow(input, dim, start, length)



[docs]
def pixel_shuffle(input, upscale_factor):
    if _capturing():
        _captured = _capture_call(pixel_shuffle, (input, upscale_factor), {})
        if _captured is not None:
            return _captured
    return _C.pixel_shuffle(input, upscale_factor)



[docs]
def pixel_unshuffle(input, downscale_factor):
    if _capturing():
        _captured = _capture_call(pixel_unshuffle, (input, downscale_factor), {})
        if _captured is not None:
            return _captured
    return _C.pixel_unshuffle(input, downscale_factor)



[docs]
def reflection_pad_nd(input, pad):
    if _capturing():
        _captured = _capture_call(reflection_pad_nd, (input, pad), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C.reflection_pad_nd(input, pad)


def reflection_pad_nd_backward(grad_output, input, pad):
    if _capturing():
        _captured = _capture_call(reflection_pad_nd_backward, (grad_output, input, pad), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C.reflection_pad_nd_backward(grad_output, input, pad)


[docs]
def replication_pad_nd(input, pad):
    if _capturing():
        _captured = _capture_call(replication_pad_nd, (input, pad), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C.replication_pad_nd(input, pad)


def replication_pad_nd_backward(grad_output, input, pad):
    if _capturing():
        _captured = _capture_call(replication_pad_nd_backward, (grad_output, input, pad), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C.replication_pad_nd_backward(grad_output, input, pad)


[docs]
def circular_pad_nd(input, pad):
    if _capturing():
        _captured = _capture_call(circular_pad_nd, (input, pad), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C.circular_pad_nd(input, pad)


def circular_pad_nd_backward(grad_output, input, pad):
    if _capturing():
        _captured = _capture_call(circular_pad_nd_backward, (grad_output, input, pad), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C.circular_pad_nd_backward(grad_output, input, pad)


[docs]
def im2col(input, kernel_size, dilation=[], padding=[], stride=[], *, out=None):
    if out is not None:
        return _C.im2col(self=input, kernel_size=kernel_size, dilation=dilation, padding=padding, stride=stride, out=out)
    if _capturing():
        _captured = _capture_call(im2col, (input, kernel_size, dilation, padding, stride), {})
        if _captured is not None:
            return _captured
    return _C.im2col(self=input, kernel_size=kernel_size, dilation=dilation, padding=padding, stride=stride)


def im2col_backward(grad_output, input_size, kernel_size, dilation, padding, stride):
    if _capturing():
        _captured = _capture_call(im2col_backward, (grad_output, input_size, kernel_size, dilation, padding, stride), {})
        if _captured is not None:
            return _captured
    if isinstance(input_size, int) and not isinstance(input_size, bool):
        input_size = [input_size]
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C.im2col_backward(grad_output, input_size, kernel_size, dilation, padding, stride)


[docs]
def col2im(input, output_size, kernel_size, dilation=[], padding=[], stride=[], *, out=None):
    if out is not None:
        return _C.col2im(self=input, output_size=output_size, kernel_size=kernel_size, dilation=dilation, padding=padding, stride=stride, out=out)
    if _capturing():
        _captured = _capture_call(col2im, (input, output_size, kernel_size, dilation, padding, stride), {})
        if _captured is not None:
            return _captured
    return _C.col2im(self=input, output_size=output_size, kernel_size=kernel_size, dilation=dilation, padding=padding, stride=stride)


def col2im_backward(grad_output, input_size, output_size, kernel_size, dilation, padding, stride):
    if _capturing():
        _captured = _capture_call(col2im_backward, (grad_output, input_size, output_size, kernel_size, dilation, padding, stride), {})
        if _captured is not None:
            return _captured
    if isinstance(input_size, int) and not isinstance(input_size, bool):
        input_size = [input_size]
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C.col2im_backward(grad_output, input_size, output_size, kernel_size, dilation, padding, stride)


[docs]
def conv_transpose1d(input, weight, bias=None, stride=[], padding=[], output_padding=[], groups=1, dilation=[]):
    if _capturing():
        _captured = _capture_call(conv_transpose1d, (input, weight, bias, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose1d(input, weight, bias, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose1d_grad_input(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose1d_grad_input, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose1d_grad_input(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose1d_grad_weight(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose1d_grad_weight, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose1d_grad_weight(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def conv_transpose1d_grad_bias(grad_output, input, weight, stride, padding, output_padding, groups, dilation):
    if _capturing():
        _captured = _capture_call(conv_transpose1d_grad_bias, (grad_output, input, weight, stride, padding, output_padding, groups, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_transpose1d_grad_bias(grad_output, input, weight, stride, padding, output_padding, groups, dilation)



[docs]
def upsample_nearest1d(input, output_size, scales=None, *, out=None):
    if out is not None:
        return _C.upsample_nearest1d(input, output_size, scales, out=out)
    if _capturing():
        _captured = _capture_call(upsample_nearest1d, (input, output_size, scales), {})
        if _captured is not None:
            return _captured
    return _C.upsample_nearest1d(input, output_size, scales)


def upsample_nearest1d_backward(grad_output, output_size, input_size, scales=None, *, out=None):
    if out is not None:
        return _C.upsample_nearest1d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales=scales, out=out)
    if _capturing():
        _captured = _capture_call(upsample_nearest1d_backward, (grad_output, output_size, input_size, scales), {})
        if _captured is not None:
            return _captured
    return _C.upsample_nearest1d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales=scales)


[docs]
def upsample_nearest2d(input, output_size, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_nearest2d(input, output_size, scales_h, scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_nearest2d, (input, output_size, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_nearest2d(input, output_size, scales_h, scales_w)


def upsample_nearest2d_backward(grad_output, output_size, input_size, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_nearest2d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_nearest2d_backward, (grad_output, output_size, input_size, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_nearest2d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales_h=scales_h, scales_w=scales_w)


[docs]
def upsample_nearest3d(input, output_size, scales_d=None, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_nearest3d(input, output_size, scales_d, scales_h, scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_nearest3d, (input, output_size, scales_d, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_nearest3d(input, output_size, scales_d, scales_h, scales_w)


def upsample_nearest3d_backward(grad_output, output_size, input_size, scales_d=None, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_nearest3d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales_d=scales_d, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_nearest3d_backward, (grad_output, output_size, input_size, scales_d, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_nearest3d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales_d=scales_d, scales_h=scales_h, scales_w=scales_w)


[docs]
def upsample_linear1d(input, output_size, align_corners, scales=None, *, out=None):
    if out is not None:
        return _C.upsample_linear1d(input, output_size, align_corners, scales, out=out)
    if _capturing():
        _captured = _capture_call(upsample_linear1d, (input, output_size, align_corners, scales), {})
        if _captured is not None:
            return _captured
    return _C.upsample_linear1d(input, output_size, align_corners, scales)


def upsample_linear1d_backward(grad_output, output_size, input_size, align_corners, scales=None, *, out=None):
    if out is not None:
        return _C.upsample_linear1d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales=scales, out=out)
    if _capturing():
        _captured = _capture_call(upsample_linear1d_backward, (grad_output, output_size, input_size, align_corners, scales), {})
        if _captured is not None:
            return _captured
    return _C.upsample_linear1d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales=scales)


[docs]
def upsample_bilinear2d(input, output_size, align_corners, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_bilinear2d(input, output_size, align_corners, scales_h, scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_bilinear2d, (input, output_size, align_corners, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_bilinear2d(input, output_size, align_corners, scales_h, scales_w)


def upsample_bilinear2d_backward(grad_output, output_size, input_size, align_corners, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_bilinear2d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_bilinear2d_backward, (grad_output, output_size, input_size, align_corners, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_bilinear2d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w)


[docs]
def upsample_bicubic2d(input, output_size, align_corners, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_bicubic2d(input, output_size, align_corners, scales_h, scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_bicubic2d, (input, output_size, align_corners, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_bicubic2d(input, output_size, align_corners, scales_h, scales_w)


def upsample_bicubic2d_backward(grad_output, output_size, input_size, align_corners, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_bicubic2d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_bicubic2d_backward, (grad_output, output_size, input_size, align_corners, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_bicubic2d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w)


[docs]
def upsample_trilinear3d(input, output_size, align_corners, scales_d=None, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_trilinear3d(input, output_size, align_corners, scales_d, scales_h, scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_trilinear3d, (input, output_size, align_corners, scales_d, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_trilinear3d(input, output_size, align_corners, scales_d, scales_h, scales_w)


def upsample_trilinear3d_backward(grad_output, output_size, input_size, align_corners, scales_d=None, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C.upsample_trilinear3d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_d=scales_d, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(upsample_trilinear3d_backward, (grad_output, output_size, input_size, align_corners, scales_d, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C.upsample_trilinear3d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_d=scales_d, scales_h=scales_h, scales_w=scales_w)


[docs]
def addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=None):
    if out is not None:
        return _C.addbmm(self=input, batch1=batch1, batch2=batch2, beta=beta, alpha=alpha, out=out)
    if _capturing():
        _captured = _capture_call(addbmm, (input, batch1, batch2), {'beta': beta, 'alpha': alpha})
        if _captured is not None:
            return _captured
    return _C.addbmm(self=input, batch1=batch1, batch2=batch2, beta=beta, alpha=alpha)



[docs]
def addmv(input, mat, vec, *, beta=1, alpha=1, out=None):
    if out is not None:
        return _C.addmv(self=input, mat=mat, vec=vec, beta=beta, alpha=alpha, out=out)
    if _capturing():
        _captured = _capture_call(addmv, (input, mat, vec), {'beta': beta, 'alpha': alpha})
        if _captured is not None:
            return _captured
    return _C.addmv(self=input, mat=mat, vec=vec, beta=beta, alpha=alpha)



[docs]
def addr(input, vec1, vec2, *, beta=1, alpha=1, out=None):
    if out is not None:
        return _C.addr(self=input, vec1=vec1, vec2=vec2, beta=beta, alpha=alpha, out=out)
    if _capturing():
        _captured = _capture_call(addr, (input, vec1, vec2), {'beta': beta, 'alpha': alpha})
        if _captured is not None:
            return _captured
    return _C.addr(self=input, vec1=vec1, vec2=vec2, beta=beta, alpha=alpha)



[docs]
def amax(input, dim=[], keepdim=False, *, out=None):
    if out is not None:
        return _C.amax(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(amax, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.amax(self=input, dim=dim, keepdim=keepdim)



[docs]
def amin(input, dim=[], keepdim=False, *, out=None):
    if out is not None:
        return _C.amin(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(amin, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.amin(self=input, dim=dim, keepdim=keepdim)



[docs]
def aminmax(input, dim=[], keepdim=False, *, out=None):
    if out is not None:
        return _C.aminmax(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(aminmax, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.aminmax(self=input, dim=dim, keepdim=keepdim)



[docs]
def argsort(input, dim=-1, descending=False, *, stable=_MISSING, out=None):
    if stable is not _MISSING:
        if out is not None:
            return _C.argsort(input, stable=stable, dim=dim, descending=descending, out=out)
        if _capturing():
            _captured = _capture_call(argsort, (input, dim, descending), {'stable': stable})
            if _captured is not None:
                return _captured
        return _C.argsort(input, stable=stable, dim=dim, descending=descending)
    if out is not None:
        return _C.argsort(input, dim, descending, out=out)
    if _capturing():
        _captured = _capture_call(argsort, (input, dim, descending), {})
        if _captured is not None:
            return _captured
    return _C.argsort(input, dim, descending)



[docs]
def bincount(input, weights=None, minlength=0):
    if _capturing():
        _captured = _capture_call(bincount, (input, weights, minlength), {})
        if _captured is not None:
            return _captured
    return _C.bincount(input, weights, minlength)


def block_diag(*args):
    if _capturing():
        _captured = _capture_call(block_diag, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.block_diag(*args)

def broadcast_tensors(*args):
    if _capturing():
        _captured = _capture_call(broadcast_tensors, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.broadcast_tensors(*args)


[docs]
def channel_shuffle(input, groups):
    if _capturing():
        _captured = _capture_call(channel_shuffle, (input, groups), {})
        if _captured is not None:
            return _captured
    return _C.channel_shuffle(input, groups)



[docs]
def cholesky(input, upper=False):
    if _capturing():
        _captured = _capture_call(cholesky, (input, upper), {})
        if _captured is not None:
            return _captured
    return _C.cholesky(input, upper)



[docs]
def cholesky_inverse(input, upper=False, *, out=None):
    if out is not None:
        return _C.cholesky_inverse(self=input, upper=upper, out=out)
    if _capturing():
        _captured = _capture_call(cholesky_inverse, (input, upper), {})
        if _captured is not None:
            return _captured
    return _C.cholesky_inverse(self=input, upper=upper)



[docs]
def cholesky_solve(input, input2, upper=False, *, out=None):
    if out is not None:
        return _C.cholesky_solve(self=input, input2=input2, upper=upper, out=out)
    if _capturing():
        _captured = _capture_call(cholesky_solve, (input, input2, upper), {})
        if _captured is not None:
            return _captured
    return _C.cholesky_solve(self=input, input2=input2, upper=upper)



[docs]
def clip(input, min=None, max=None, *, out=None):
    if out is not None:
        return _C.clip(input, min, max, out=out)
    if _capturing():
        _captured = _capture_call(clip, (input, min, max), {})
        if _captured is not None:
            return _captured
    return _C.clip(input, min, max)



[docs]
def clamp_(input, min=None, max=None):
    if _capturing():
        _captured = _capture_call(clamp_, (input, min, max), {})
        if _captured is not None:
            return _captured
    if min is not None and not isinstance(min, (tensorplay.Scalar, tensorplay.Tensor)):
        min = tensorplay.Scalar(min)
    if max is not None and not isinstance(max, (tensorplay.Scalar, tensorplay.Tensor)):
        max = tensorplay.Scalar(max)
    return _C.clamp_(input, min, max)



[docs]
def clamp_min_(input, min):
    if _capturing():
        _captured = _capture_call(clamp_min_, (input, min), {})
        if _captured is not None:
            return _captured
    if not isinstance(min, (tensorplay.Scalar, tensorplay.Tensor)):
        min = tensorplay.Scalar(min)
    return _C.clamp_min_(input, min)



[docs]
def clamp_max_(input, max):
    if _capturing():
        _captured = _capture_call(clamp_max_, (input, max), {})
        if _captured is not None:
            return _captured
    if not isinstance(max, (tensorplay.Scalar, tensorplay.Tensor)):
        max = tensorplay.Scalar(max)
    return _C.clamp_max_(input, max)



[docs]
def complex(real, imag, *, out=None):
    if out is not None:
        return _C.complex(real=real, imag=imag, out=out)
    if _capturing():
        _captured = _capture_call(complex, (real, imag), {})
        if _captured is not None:
            return _captured
    return _C.complex(real=real, imag=imag)



[docs]
def conj(input):
    if _capturing():
        _captured = _capture_call(conj, (input,), {})
        if _captured is not None:
            return _captured
    return _C.conj(input)



[docs]
def adjoint(input):
    if _capturing():
        _captured = _capture_call(adjoint, (input,), {})
        if _captured is not None:
            return _captured
    return _C.adjoint(input)



[docs]
def imag(input):
    if _capturing():
        _captured = _capture_call(imag, (input,), {})
        if _captured is not None:
            return _captured
    return _C.imag(input)



[docs]
def cummax(input, dim, *, out=None):
    if out is not None:
        return _C.cummax(self=input, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(cummax, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.cummax(self=input, dim=dim)



[docs]
def cummin(input, dim, *, out=None):
    if out is not None:
        return _C.cummin(self=input, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(cummin, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.cummin(self=input, dim=dim)



[docs]
def cumprod(input, dim, dtype=None, *, out=None):
    if out is not None:
        return _C.cumprod(self=input, dim=dim, dtype=dtype, out=out)
    if _capturing():
        _captured = _capture_call(cumprod, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.cumprod(self=input, dim=dim, dtype=dtype)



[docs]
def logcumsumexp(input, dim, dtype=None, *, out=None):
    if out is not None:
        return _C.logcumsumexp(self=input, dim=dim, dtype=dtype, out=out)
    if _capturing():
        _captured = _capture_call(logcumsumexp, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.logcumsumexp(self=input, dim=dim, dtype=dtype)



[docs]
def diag(input, diagonal=0, *, out=None):
    if out is not None:
        return _C.diag(self=input, diagonal=diagonal, out=out)
    if _capturing():
        _captured = _capture_call(diag, (input, diagonal), {})
        if _captured is not None:
            return _captured
    return _C.diag(self=input, diagonal=diagonal)



[docs]
def diag_embed(input, offset=0, dim1=-2, dim2=-1):
    if _capturing():
        _captured = _capture_call(diag_embed, (input, offset, dim1, dim2), {})
        if _captured is not None:
            return _captured
    return _C.diag_embed(input, offset, dim1, dim2)



[docs]
def dist(input, other, p=2):
    if _capturing():
        _captured = _capture_call(dist, (input, other, p), {})
        if _captured is not None:
            return _captured
    if not isinstance(p, (tensorplay.Scalar, tensorplay.Tensor)):
        p = tensorplay.Scalar(p)
    return _C.dist(input, other, p)



[docs]
def gather(input, dim, index, *, out=None):
    if out is not None:
        return _C.gather(self=input, dim=dim, index=index, out=out)
    if _capturing():
        _captured = _capture_call(gather, (input, dim, index), {})
        if _captured is not None:
            return _captured
    return _C.gather(self=input, dim=dim, index=index)



[docs]
def take(input, index, *, out=None):
    if out is not None:
        return _C.take(self=input, index=index, out=out)
    if _capturing():
        _captured = _capture_call(take, (input, index), {})
        if _captured is not None:
            return _captured
    return _C.take(self=input, index=index)



[docs]
def take_along_dim(input, indices, dim=None, *, out=None):
    if out is not None:
        return _C.take_along_dim(self=input, indices=indices, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(take_along_dim, (input, indices, dim), {})
        if _captured is not None:
            return _captured
    return _C.take_along_dim(self=input, indices=indices, dim=dim)



[docs]
def select_scatter(input, src, dim, index):
    if _capturing():
        _captured = _capture_call(select_scatter, (input, src, dim, index), {})
        if _captured is not None:
            return _captured
    return _C.select_scatter(input, src, dim, index)



[docs]
def slice_scatter(input, src, dim=0, start=None, end=None, step=1):
    if _capturing():
        _captured = _capture_call(slice_scatter, (input, src, dim, start, end, step), {})
        if _captured is not None:
            return _captured
    return _C.slice_scatter(input, src, dim, start, end, step)



[docs]
def diagonal_scatter(input, src, offset=0, dim1=0, dim2=1):
    if _capturing():
        _captured = _capture_call(diagonal_scatter, (input, src, offset, dim1, dim2), {})
        if _captured is not None:
            return _captured
    return _C.diagonal_scatter(input, src, offset, dim1, dim2)



[docs]
def msort(input, *, out=None):
    if out is not None:
        return _C.msort(self=input, out=out)
    if _capturing():
        _captured = _capture_call(msort, (input,), {})
        if _captured is not None:
            return _captured
    return _C.msort(self=input)



[docs]
def nanmean(input, dim=None, keepdim=False, *, dtype=None, out=None):
    if out is not None:
        return _C.nanmean(self=input, dim=dim, keepdim=keepdim, dtype=dtype, out=out)
    if _capturing():
        _captured = _capture_call(nanmean, (input, dim, keepdim), {'dtype': dtype})
        if _captured is not None:
            return _captured
    return _C.nanmean(self=input, dim=dim, keepdim=keepdim, dtype=dtype)



[docs]
def isclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=False):
    if _capturing():
        _captured = _capture_call(isclose, (input, other, rtol, atol, equal_nan), {})
        if _captured is not None:
            return _captured
    return _C.isclose(input, other, rtol, atol, equal_nan)



[docs]
def isreal(input):
    if _capturing():
        _captured = _capture_call(isreal, (input,), {})
        if _captured is not None:
            return _captured
    return _C.isreal(input)



[docs]
def bitwise_not(input, *, out=None):
    if out is not None:
        return _C.bitwise_not(self=input, out=out)
    if _capturing():
        _captured = _capture_call(bitwise_not, (input,), {})
        if _captured is not None:
            return _captured
    return _C.bitwise_not(self=input)



[docs]
def bitwise_and(input, other, *, out=None):
    if out is not None:
        return _C.bitwise_and(input, other, out=out)
    if _capturing():
        _captured = _capture_call(bitwise_and, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.bitwise_and(input, other)



[docs]
def bitwise_or(input, other, *, out=None):
    if out is not None:
        return _C.bitwise_or(input, other, out=out)
    if _capturing():
        _captured = _capture_call(bitwise_or, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.bitwise_or(input, other)



[docs]
def bitwise_xor(input, other, *, out=None):
    if out is not None:
        return _C.bitwise_xor(input, other, out=out)
    if _capturing():
        _captured = _capture_call(bitwise_xor, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.bitwise_xor(input, other)



[docs]
def bitwise_left_shift(input, other, *, out=None):
    if out is not None:
        return _C.bitwise_left_shift(input, other, out=out)
    if _capturing():
        _captured = _capture_call(bitwise_left_shift, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.bitwise_left_shift(input, other)



[docs]
def bitwise_right_shift(input, other, *, out=None):
    if out is not None:
        return _C.bitwise_right_shift(input, other, out=out)
    if _capturing():
        _captured = _capture_call(bitwise_right_shift, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.bitwise_right_shift(input, other)



[docs]
def index_copy(input, dim, index, source, *, out=None):
    if out is not None:
        return _C.index_copy(self=input, dim=dim, index=index, source=source, out=out)
    if _capturing():
        _captured = _capture_call(index_copy, (input, dim, index, source), {})
        if _captured is not None:
            return _captured
    return _C.index_copy(self=input, dim=dim, index=index, source=source)



[docs]
def index_fill(input, dim, index, value):
    if _capturing():
        _captured = _capture_call(index_fill, (input, dim, index, value), {})
        if _captured is not None:
            return _captured
    if not isinstance(value, (tensorplay.Scalar, tensorplay.Tensor)):
        value = tensorplay.Scalar(value)
    return _C.index_fill(input, dim, index, value)



[docs]
def index_fill_(input, dim, index, value):
    if _capturing():
        _captured = _capture_call(index_fill_, (input, dim, index, value), {})
        if _captured is not None:
            return _captured
    if not isinstance(value, (tensorplay.Scalar, tensorplay.Tensor)):
        value = tensorplay.Scalar(value)
    return _C.index_fill_(input, dim, index, value)



[docs]
def searchsorted(sorted_sequence, input, *, out_int32=False, right=False, side=None, sorter=None, out=None):
    if out is not None:
        return _C.searchsorted(sorted_sequence, input, out_int32=out_int32, right=right, side=side, sorter=sorter, out=out)
    if _capturing():
        _captured = _capture_call(searchsorted, (sorted_sequence, input), {'out_int32': out_int32, 'right': right, 'side': side, 'sorter': sorter})
        if _captured is not None:
            return _captured
    return _C.searchsorted(sorted_sequence, input, out_int32=out_int32, right=right, side=side, sorter=sorter)



[docs]
def bucketize(input, boundaries, *, out_int32=False, right=False, out=None):
    if out is not None:
        return _C.bucketize(input, boundaries, out_int32=out_int32, right=right, out=out)
    if _capturing():
        _captured = _capture_call(bucketize, (input, boundaries), {'out_int32': out_int32, 'right': right})
        if _captured is not None:
            return _captured
    return _C.bucketize(input, boundaries, out_int32=out_int32, right=right)



[docs]
def scatter(input, dim, index, src, *, reduce=_MISSING, out=None):
    if reduce is not _MISSING:
        if out is not None:
            return _C.scatter(input, dim, index, src, reduce=reduce, out=out)
        if _capturing():
            _captured = _capture_call(scatter, (input, dim, index, src), {'reduce': reduce})
            if _captured is not None:
                return _captured
        return _C.scatter(input, dim, index, src, reduce=reduce)
    if out is not None:
        return _C.scatter(input, dim, index, src, out=out)
    if _capturing():
        _captured = _capture_call(scatter, (input, dim, index, src), {})
        if _captured is not None:
            return _captured
    return _C.scatter(input, dim, index, src)



[docs]
def scatter_(input, dim, index, src):
    if _capturing():
        _captured = _capture_call(scatter_, (input, dim, index, src), {})
        if _captured is not None:
            return _captured
    return _C.scatter_(input, dim, index, src)



[docs]
def masked_fill(input, mask, value):
    if _capturing():
        _captured = _capture_call(masked_fill, (input, mask, value), {})
        if _captured is not None:
            return _captured
    return _C.masked_fill(input, mask, value)



[docs]
def masked_fill_(input, mask, value):
    if _capturing():
        _captured = _capture_call(masked_fill_, (input, mask, value), {})
        if _captured is not None:
            return _captured
    return _C.masked_fill_(input, mask, value)



[docs]
def index_put(input, indices, values, accumulate=False):
    if _capturing():
        _captured = _capture_call(index_put, (input, indices, values, accumulate), {})
        if _captured is not None:
            return _captured
    return _C.index_put(input, indices, values, accumulate)



[docs]
def index_put_(input, indices, values, accumulate=False):
    if _capturing():
        _captured = _capture_call(index_put_, (input, indices, values, accumulate), {})
        if _captured is not None:
            return _captured
    return _C.index_put_(input, indices, values, accumulate)



[docs]
def masked_scatter(input, mask, source):
    if _capturing():
        _captured = _capture_call(masked_scatter, (input, mask, source), {})
        if _captured is not None:
            return _captured
    return _C.masked_scatter(input, mask, source)



[docs]
def scatter_add(input, dim, index, src, *, out=None):
    if out is not None:
        return _C.scatter_add(self=input, dim=dim, index=index, src=src, out=out)
    if _capturing():
        _captured = _capture_call(scatter_add, (input, dim, index, src), {})
        if _captured is not None:
            return _captured
    return _C.scatter_add(self=input, dim=dim, index=index, src=src)



[docs]
def scatter_add_(input, dim, index, src):
    if _capturing():
        _captured = _capture_call(scatter_add_, (input, dim, index, src), {})
        if _captured is not None:
            return _captured
    return _C.scatter_add_(input, dim, index, src)



[docs]
def sort(input, dim=-1, descending=False, *, stable=_MISSING, out=None):
    if stable is not _MISSING:
        if _capturing():
            _captured = _capture_call(sort, (input, dim, descending), {'stable': stable})
            if _captured is not None:
                return _captured
        return _C.sort(input, stable=stable, dim=dim, descending=descending)
    if out is not None:
        return _C.sort(input, dim, descending, out=out)
    if _capturing():
        _captured = _capture_call(sort, (input, dim, descending), {})
        if _captured is not None:
            return _captured
    return _C.sort(input, dim, descending)



[docs]
def mode(input, dim=-1, keepdim=False, *, out=None):
    if out is not None:
        return _C.mode(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(mode, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.mode(self=input, dim=dim, keepdim=keepdim)



[docs]
def kthvalue(input, k, dim=-1, keepdim=False, *, out=None):
    if out is not None:
        return _C.kthvalue(self=input, k=k, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(kthvalue, (input, k, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.kthvalue(self=input, k=k, dim=dim, keepdim=keepdim)



[docs]
def nanmedian(input, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(nanmedian, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.nanmedian(input)
    return _C.nanmedian(input, dim, keepdim)



[docs]
def nansum(input, dim=[], keepdim=False, *, out=None):
    if out is not None:
        return _C.nansum(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(nansum, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.nansum(self=input, dim=dim, keepdim=keepdim)



[docs]
def std_mean(input, dim=[], unbiased=True, keepdim=False):
    if _capturing():
        _captured = _capture_call(std_mean, (input, dim, unbiased, keepdim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.std_mean(input, dim, unbiased, keepdim)



[docs]
def var_mean(input, dim=[], unbiased=True, keepdim=False):
    if _capturing():
        _captured = _capture_call(var_mean, (input, dim, unbiased, keepdim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.var_mean(input, dim, unbiased, keepdim)



[docs]
def trace(input):
    if _capturing():
        _captured = _capture_call(trace, (input,), {})
        if _captured is not None:
            return _captured
    return _C.trace(input)



[docs]
def renorm(input, p, dim, maxnorm, *, out=None):
    if out is not None:
        return _C.renorm(self=input, p=p, dim=dim, maxnorm=maxnorm, out=out)
    if _capturing():
        _captured = _capture_call(renorm, (input, p, dim, maxnorm), {})
        if _captured is not None:
            return _captured
    return _C.renorm(self=input, p=p, dim=dim, maxnorm=maxnorm)



[docs]
def rot90(input, k=1, dims=[0,1]):
    if _capturing():
        _captured = _capture_call(rot90, (input, k, dims), {})
        if _captured is not None:
            return _captured
    if isinstance(dims, int) and not isinstance(dims, bool):
        dims = [dims]
    return _C.rot90(input, k, dims)



[docs]
def split_with_sizes(input, split_sizes, dim=0):
    if _capturing():
        _captured = _capture_call(split_with_sizes, (input, split_sizes, dim), {})
        if _captured is not None:
            return _captured
    if isinstance(split_sizes, int) and not isinstance(split_sizes, bool):
        split_sizes = [split_sizes]
    return _C.split_with_sizes(input, split_sizes, dim)



[docs]
def meshgrid(tensors, indexing='ij'):
    if _capturing():
        _captured = _capture_call(meshgrid, (tensors, indexing), {})
        if _captured is not None:
            return _captured
    return _C.meshgrid(tensors, indexing)



[docs]
def greater(input, other, *, out=None):
    if out is not None:
        return _C.greater(input, other, out=out)
    if _capturing():
        _captured = _capture_call(greater, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.greater(input, other)



[docs]
def greater_equal(input, other, *, out=None):
    if out is not None:
        return _C.greater_equal(input, other, out=out)
    if _capturing():
        _captured = _capture_call(greater_equal, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.greater_equal(input, other)



[docs]
def less(input, other, *, out=None):
    if out is not None:
        return _C.less(input, other, out=out)
    if _capturing():
        _captured = _capture_call(less, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.less(input, other)



[docs]
def less_equal(input, other, *, out=None):
    if out is not None:
        return _C.less_equal(input, other, out=out)
    if _capturing():
        _captured = _capture_call(less_equal, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.less_equal(input, other)



[docs]
def not_equal(input, other, *, out=None):
    if out is not None:
        return _C.not_equal(input, other, out=out)
    if _capturing():
        _captured = _capture_call(not_equal, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.not_equal(input, other)



[docs]
def logical_not(input, *, out=None):
    if out is not None:
        return _C.logical_not(self=input, out=out)
    if _capturing():
        _captured = _capture_call(logical_not, (input,), {})
        if _captured is not None:
            return _captured
    return _C.logical_not(self=input)



[docs]
def logical_or(input, other, *, out=None):
    if out is not None:
        return _C.logical_or(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(logical_or, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.logical_or(self=input, other=other)



[docs]
def logical_xor(input, other, *, out=None):
    if out is not None:
        return _C.logical_xor(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(logical_xor, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.logical_xor(self=input, other=other)



[docs]
def deg2rad(input, *, out=None):
    if out is not None:
        return _C.deg2rad(self=input, out=out)
    if _capturing():
        _captured = _capture_call(deg2rad, (input,), {})
        if _captured is not None:
            return _captured
    return _C.deg2rad(self=input)



[docs]
def rad2deg(input, *, out=None):
    if out is not None:
        return _C.rad2deg(self=input, out=out)
    if _capturing():
        _captured = _capture_call(rad2deg, (input,), {})
        if _captured is not None:
            return _captured
    return _C.rad2deg(self=input)



[docs]
def exp2(input, *, out=None):
    if out is not None:
        return _C.exp2(self=input, out=out)
    if _capturing():
        _captured = _capture_call(exp2, (input,), {})
        if _captured is not None:
            return _captured
    return _C.exp2(self=input)



[docs]
def fix(input, *, out=None):
    if out is not None:
        return _C.fix(self=input, out=out)
    if _capturing():
        _captured = _capture_call(fix, (input,), {})
        if _captured is not None:
            return _captured
    return _C.fix(self=input)



[docs]
def digamma(input, *, out=None):
    if out is not None:
        return _C.digamma(self=input, out=out)
    if _capturing():
        _captured = _capture_call(digamma, (input,), {})
        if _captured is not None:
            return _captured
    return _C.digamma(self=input)



[docs]
def erfinv(input, *, out=None):
    if out is not None:
        return _C.erfinv(self=input, out=out)
    if _capturing():
        _captured = _capture_call(erfinv, (input,), {})
        if _captured is not None:
            return _captured
    return _C.erfinv(self=input)



[docs]
def erfcx(input):
    if _capturing():
        _captured = _capture_call(erfcx, (input,), {})
        if _captured is not None:
            return _captured
    return _C.erfcx(input)



[docs]
def ndtr(input):
    if _capturing():
        _captured = _capture_call(ndtr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.ndtr(input)



[docs]
def ndtri(input):
    if _capturing():
        _captured = _capture_call(ndtri, (input,), {})
        if _captured is not None:
            return _captured
    return _C.ndtri(input)



[docs]
def log_ndtr(input):
    if _capturing():
        _captured = _capture_call(log_ndtr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log_ndtr(input)



[docs]
def entr(input):
    if _capturing():
        _captured = _capture_call(entr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.entr(input)



[docs]
def sgn(input, *, out=None):
    if out is not None:
        return _C.sgn(self=input, out=out)
    if _capturing():
        _captured = _capture_call(sgn, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sgn(self=input)



[docs]
def signbit(input, *, out=None):
    if out is not None:
        return _C.signbit(self=input, out=out)
    if _capturing():
        _captured = _capture_call(signbit, (input,), {})
        if _captured is not None:
            return _captured
    return _C.signbit(self=input)



[docs]
def sinc(input, *, out=None):
    if out is not None:
        return _C.sinc(self=input, out=out)
    if _capturing():
        _captured = _capture_call(sinc, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sinc(self=input)



[docs]
def heaviside(input, values, *, out=None):
    if out is not None:
        return _C.heaviside(self=input, values=values, out=out)
    if _capturing():
        _captured = _capture_call(heaviside, (input, values), {})
        if _captured is not None:
            return _captured
    return _C.heaviside(self=input, values=values)



[docs]
def hypot(input, other, *, out=None):
    if out is not None:
        return _C.hypot(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(hypot, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.hypot(self=input, other=other)



[docs]
def logaddexp(input, other, *, out=None):
    if out is not None:
        return _C.logaddexp(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(logaddexp, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.logaddexp(self=input, other=other)



[docs]
def logaddexp2(input, other, *, out=None):
    if out is not None:
        return _C.logaddexp2(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(logaddexp2, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.logaddexp2(self=input, other=other)



[docs]
def logit(input, eps=None, *, out=None):
    if out is not None:
        return _C.logit(self=input, eps=eps, out=out)
    if _capturing():
        _captured = _capture_call(logit, (input, eps), {})
        if _captured is not None:
            return _captured
    return _C.logit(self=input, eps=eps)


def logit_backward(grad_output, input, eps=None, *, out=None):
    if out is not None:
        return _C.logit_backward(grad_output=grad_output, self=input, eps=eps, out=out)
    if _capturing():
        _captured = _capture_call(logit_backward, (grad_output, input, eps), {})
        if _captured is not None:
            return _captured
    return _C.logit_backward(grad_output=grad_output, self=input, eps=eps)

def sigmoid_backward(grad_output, output, *, out=None):
    if out is not None:
        return _C.sigmoid_backward(grad_output=grad_output, output=output, out=out)
    if _capturing():
        _captured = _capture_call(sigmoid_backward, (grad_output, output), {})
        if _captured is not None:
            return _captured
    return _C.sigmoid_backward(grad_output=grad_output, output=output)

def tanh_backward(grad_output, output, *, out=None):
    if out is not None:
        return _C.tanh_backward(grad_output=grad_output, output=output, out=out)
    if _capturing():
        _captured = _capture_call(tanh_backward, (grad_output, output), {})
        if _captured is not None:
            return _captured
    return _C.tanh_backward(grad_output=grad_output, output=output)


[docs]
def gcd(input, other, *, out=None):
    if out is not None:
        return _C.gcd(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(gcd, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.gcd(self=input, other=other)



[docs]
def lcm(input, other, *, out=None):
    if out is not None:
        return _C.lcm(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(lcm, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.lcm(self=input, other=other)



[docs]
def nextafter(input, other, *, out=None):
    if out is not None:
        return _C.nextafter(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(nextafter, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.nextafter(self=input, other=other)



[docs]
def isfinite(input):
    if _capturing():
        _captured = _capture_call(isfinite, (input,), {})
        if _captured is not None:
            return _captured
    return _C.isfinite(input)



[docs]
def isinf(input):
    if _capturing():
        _captured = _capture_call(isinf, (input,), {})
        if _captured is not None:
            return _captured
    return _C.isinf(input)



[docs]
def isnan(input):
    if _capturing():
        _captured = _capture_call(isnan, (input,), {})
        if _captured is not None:
            return _captured
    return _C.isnan(input)



[docs]
def isneginf(input, *, out=None):
    if out is not None:
        return _C.isneginf(self=input, out=out)
    if _capturing():
        _captured = _capture_call(isneginf, (input,), {})
        if _captured is not None:
            return _captured
    return _C.isneginf(self=input)



[docs]
def isposinf(input, *, out=None):
    if out is not None:
        return _C.isposinf(self=input, out=out)
    if _capturing():
        _captured = _capture_call(isposinf, (input,), {})
        if _captured is not None:
            return _captured
    return _C.isposinf(self=input)



[docs]
def nan_to_num(input, nan=0.0, posinf=None, neginf=None, *, out=None):
    if out is not None:
        return _C.nan_to_num(self=input, nan=nan, posinf=posinf, neginf=neginf, out=out)
    if _capturing():
        _captured = _capture_call(nan_to_num, (input, nan, posinf, neginf), {})
        if _captured is not None:
            return _captured
    return _C.nan_to_num(self=input, nan=nan, posinf=posinf, neginf=neginf)



[docs]
def negative(input, *, out=None):
    if out is not None:
        return _C.negative(self=input, out=out)
    if _capturing():
        _captured = _capture_call(negative, (input,), {})
        if _captured is not None:
            return _captured
    return _C.negative(self=input)



[docs]
def positive(input):
    if _capturing():
        _captured = _capture_call(positive, (input,), {})
        if _captured is not None:
            return _captured
    return _C.positive(input)



[docs]
def svd(input, some=True, compute_uv=True, *, out=None):
    if out is not None:
        return _C.svd(self=input, some=some, compute_uv=compute_uv, out=out)
    if _capturing():
        _captured = _capture_call(svd, (input, some, compute_uv), {})
        if _captured is not None:
            return _captured
    return _C.svd(self=input, some=some, compute_uv=compute_uv)



[docs]
def triangular_solve(input, A, upper=False, transpose=False, unitriangular=False, *, out=None):
    if out is not None:
        return _C.triangular_solve(self=input, A=A, upper=upper, transpose=transpose, unitriangular=unitriangular, out=out)
    if _capturing():
        _captured = _capture_call(triangular_solve, (input, A, upper, transpose, unitriangular), {})
        if _captured is not None:
            return _captured
    return _C.triangular_solve(self=input, A=A, upper=upper, transpose=transpose, unitriangular=unitriangular)



[docs]
def vdot(input, other, *, out=None):
    if out is not None:
        return _C.vdot(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(vdot, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.vdot(self=input, other=other)



[docs]
def prelu(input, weight):
    if _capturing():
        _captured = _capture_call(prelu, (input, weight), {})
        if _captured is not None:
            return _captured
    return _C.prelu(input, weight)



[docs]
def pdist(input, p=2.0):
    if _capturing():
        _captured = _capture_call(pdist, (input, p), {})
        if _captured is not None:
            return _captured
    return _C.pdist(input, p)



[docs]
def pairwise_distance(x1, x2, p=2.0, eps=1e-06, keepdim=False):
    if _capturing():
        _captured = _capture_call(pairwise_distance, (x1, x2, p, eps, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.pairwise_distance(x1, x2, p, eps, keepdim)



[docs]
def l1_loss(input, target):
    if _capturing():
        _captured = _capture_call(l1_loss, (input, target), {})
        if _captured is not None:
            return _captured
    return _C.l1_loss(input, target)



[docs]
def smooth_l1_loss(input, target, reduction=1, beta=1.0, *, out=None):
    if out is not None:
        return _C.smooth_l1_loss(self=input, target=target, reduction=reduction, beta=beta, out=out)
    if _capturing():
        _captured = _capture_call(smooth_l1_loss, (input, target, reduction, beta), {})
        if _captured is not None:
            return _captured
    return _C.smooth_l1_loss(self=input, target=target, reduction=reduction, beta=beta)


def smooth_l1_loss_backward(grad_output, input, target, reduction, beta, *, out=None):
    if out is not None:
        return _C.smooth_l1_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction, beta=beta, out=out)
    if _capturing():
        _captured = _capture_call(smooth_l1_loss_backward, (grad_output, input, target, reduction, beta), {})
        if _captured is not None:
            return _captured
    return _C.smooth_l1_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction, beta=beta)


[docs]
def huber_loss(input, target, reduction=1, delta=1.0, *, out=None):
    if out is not None:
        return _C.huber_loss(self=input, target=target, reduction=reduction, delta=delta, out=out)
    if _capturing():
        _captured = _capture_call(huber_loss, (input, target, reduction, delta), {})
        if _captured is not None:
            return _captured
    return _C.huber_loss(self=input, target=target, reduction=reduction, delta=delta)


def huber_loss_backward(grad_output, input, target, reduction, delta, *, out=None):
    if out is not None:
        return _C.huber_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction, delta=delta, out=out)
    if _capturing():
        _captured = _capture_call(huber_loss_backward, (grad_output, input, target, reduction, delta), {})
        if _captured is not None:
            return _captured
    return _C.huber_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction, delta=delta)


[docs]
def kl_div(input, target):
    if _capturing():
        _captured = _capture_call(kl_div, (input, target), {})
        if _captured is not None:
            return _captured
    return _C.kl_div(input, target)



[docs]
def binary_cross_entropy(input, target, weight=None, reduction=1, *, out=None):
    if out is not None:
        return _C.binary_cross_entropy(self=input, target=target, weight=weight, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(binary_cross_entropy, (input, target, weight, reduction), {})
        if _captured is not None:
            return _captured
    return _C.binary_cross_entropy(self=input, target=target, weight=weight, reduction=reduction)


def binary_cross_entropy_backward(grad_output, input, target, weight=None, reduction=1, *, out=None):
    if out is not None:
        return _C.binary_cross_entropy_backward(grad_output=grad_output, self=input, target=target, weight=weight, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(binary_cross_entropy_backward, (grad_output, input, target, weight, reduction), {})
        if _captured is not None:
            return _captured
    return _C.binary_cross_entropy_backward(grad_output=grad_output, self=input, target=target, weight=weight, reduction=reduction)


[docs]
def binary_cross_entropy_with_logits(input, target, weight=None, pos_weight=None):
    if _capturing():
        _captured = _capture_call(binary_cross_entropy_with_logits, (input, target, weight, pos_weight), {})
        if _captured is not None:
            return _captured
    return _C.binary_cross_entropy_with_logits(input, target, weight, pos_weight)



[docs]
def poisson_nll_loss(input, target, log_input=True, full=False, eps=1e-08):
    if _capturing():
        _captured = _capture_call(poisson_nll_loss, (input, target, log_input, full, eps), {})
        if _captured is not None:
            return _captured
    return _C.poisson_nll_loss(input, target, log_input, full, eps)



[docs]
def soft_margin_loss(input, target, *, out=None):
    if out is not None:
        return _C.soft_margin_loss(input=input, target=target, out=out)
    if _capturing():
        _captured = _capture_call(soft_margin_loss, (input, target), {})
        if _captured is not None:
            return _captured
    return _C.soft_margin_loss(input=input, target=target)



[docs]
def cosine_embedding_loss(x1, x2, target, margin=0):
    if _capturing():
        _captured = _capture_call(cosine_embedding_loss, (x1, x2, target, margin), {})
        if _captured is not None:
            return _captured
    if not isinstance(margin, (tensorplay.Scalar, tensorplay.Tensor)):
        margin = tensorplay.Scalar(margin)
    return _C.cosine_embedding_loss(x1, x2, target, margin)



[docs]
def margin_ranking_loss(input1, input2, target, margin=0):
    if _capturing():
        _captured = _capture_call(margin_ranking_loss, (input1, input2, target, margin), {})
        if _captured is not None:
            return _captured
    if not isinstance(margin, (tensorplay.Scalar, tensorplay.Tensor)):
        margin = tensorplay.Scalar(margin)
    return _C.margin_ranking_loss(input1, input2, target, margin)



[docs]
def hinge_embedding_loss(input, target, margin=1.0):
    if _capturing():
        _captured = _capture_call(hinge_embedding_loss, (input, target, margin), {})
        if _captured is not None:
            return _captured
    if not isinstance(margin, (tensorplay.Scalar, tensorplay.Tensor)):
        margin = tensorplay.Scalar(margin)
    return _C.hinge_embedding_loss(input, target, margin)



[docs]
def multi_margin_loss(input, target, p=1, margin=1, weight=None, reduction=1, *, out=None):
    if out is not None:
        return _C.multi_margin_loss(self=input, target=target, p=p, margin=margin, weight=weight, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(multi_margin_loss, (input, target, p, margin, weight, reduction), {})
        if _captured is not None:
            return _captured
    return _C.multi_margin_loss(self=input, target=target, p=p, margin=margin, weight=weight, reduction=reduction)


def multi_margin_loss_backward(grad_output, input, target, p, margin, weight=None, reduction=1, *, out=None):
    if out is not None:
        return _C.multi_margin_loss_backward(grad_output=grad_output, self=input, target=target, p=p, margin=margin, weight=weight, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(multi_margin_loss_backward, (grad_output, input, target, p, margin, weight, reduction), {})
        if _captured is not None:
            return _captured
    return _C.multi_margin_loss_backward(grad_output=grad_output, self=input, target=target, p=p, margin=margin, weight=weight, reduction=reduction)


[docs]
def multilabel_margin_loss(input, target, reduction=1, *, out=None):
    if out is not None:
        return _C.multilabel_margin_loss(self=input, target=target, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(multilabel_margin_loss, (input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.multilabel_margin_loss(self=input, target=target, reduction=reduction)



[docs]
def multilabel_margin_loss_forward(input, target, reduction, *, out=None):
    if out is not None:
        return _C.multilabel_margin_loss_forward(self=input, target=target, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(multilabel_margin_loss_forward, (input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.multilabel_margin_loss_forward(self=input, target=target, reduction=reduction)


def multilabel_margin_loss_backward(grad_output, input, target, reduction, is_target, *, out=None):
    if out is not None:
        return _C.multilabel_margin_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction, is_target=is_target, out=out)
    if _capturing():
        _captured = _capture_call(multilabel_margin_loss_backward, (grad_output, input, target, reduction, is_target), {})
        if _captured is not None:
            return _captured
    return _C.multilabel_margin_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction, is_target=is_target)


[docs]
def multilabel_soft_margin_loss(input, target):
    if _capturing():
        _captured = _capture_call(multilabel_soft_margin_loss, (input, target), {})
        if _captured is not None:
            return _captured
    return _C.multilabel_soft_margin_loss(input, target)



[docs]
def triplet_margin_loss(anchor, positive, negative, margin=1.0, p=2.0):
    if _capturing():
        _captured = _capture_call(triplet_margin_loss, (anchor, positive, negative, margin, p), {})
        if _captured is not None:
            return _captured
    if not isinstance(margin, (tensorplay.Scalar, tensorplay.Tensor)):
        margin = tensorplay.Scalar(margin)
    return _C.triplet_margin_loss(anchor, positive, negative, margin, p)



[docs]
def lstm(input, hx, params, has_biases=True, num_layers=1, dropout_p=0.0, training=False, bidirectional=False, batch_first=False):
    if _capturing():
        _captured = _capture_call(lstm, (input, hx, params, has_biases, num_layers, dropout_p, training, bidirectional, batch_first), {})
        if _captured is not None:
            return _captured
    return _C.lstm(input, hx, params, has_biases, num_layers, dropout_p, training, bidirectional, batch_first)



[docs]
def gru(input, hx, params, has_biases=True, num_layers=1, dropout_p=0.0, training=False, bidirectional=False, batch_first=False):
    if _capturing():
        _captured = _capture_call(gru, (input, hx, params, has_biases, num_layers, dropout_p, training, bidirectional, batch_first), {})
        if _captured is not None:
            return _captured
    return _C.gru(input, hx, params, has_biases, num_layers, dropout_p, training, bidirectional, batch_first)



[docs]
def rnn_relu(input, hx, params, has_biases=True, num_layers=1, dropout_p=0.0, training=False, bidirectional=False, batch_first=False):
    if _capturing():
        _captured = _capture_call(rnn_relu, (input, hx, params, has_biases, num_layers, dropout_p, training, bidirectional, batch_first), {})
        if _captured is not None:
            return _captured
    return _C.rnn_relu(input, hx, params, has_biases, num_layers, dropout_p, training, bidirectional, batch_first)



[docs]
def rnn_tanh(input, hx, params, has_biases=True, num_layers=1, dropout_p=0.0, training=False, bidirectional=False, batch_first=False):
    if _capturing():
        _captured = _capture_call(rnn_tanh, (input, hx, params, has_biases, num_layers, dropout_p, training, bidirectional, batch_first), {})
        if _captured is not None:
            return _captured
    return _C.rnn_tanh(input, hx, params, has_biases, num_layers, dropout_p, training, bidirectional, batch_first)



[docs]
def logsumexp(input, dim, keepdim=False, *, out=None):
    if out is not None:
        return _C.logsumexp(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(logsumexp, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.logsumexp(self=input, dim=dim, keepdim=keepdim)



[docs]
def tril(input, diagonal=0, *, out=None):
    if out is not None:
        return _C.tril(self=input, diagonal=diagonal, out=out)
    if _capturing():
        _captured = _capture_call(tril, (input, diagonal), {})
        if _captured is not None:
            return _captured
    return _C.tril(self=input, diagonal=diagonal)



[docs]
def triu(input, diagonal=0, *, out=None):
    if out is not None:
        return _C.triu(self=input, diagonal=diagonal, out=out)
    if _capturing():
        _captured = _capture_call(triu, (input, diagonal), {})
        if _captured is not None:
            return _captured
    return _C.triu(self=input, diagonal=diagonal)



[docs]
def bessel_j0(input):
    if _capturing():
        _captured = _capture_call(bessel_j0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.bessel_j0(input)



[docs]
def bessel_j1(input):
    if _capturing():
        _captured = _capture_call(bessel_j1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.bessel_j1(input)



[docs]
def bessel_y0(input):
    if _capturing():
        _captured = _capture_call(bessel_y0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.bessel_y0(input)



[docs]
def bessel_y1(input):
    if _capturing():
        _captured = _capture_call(bessel_y1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.bessel_y1(input)



[docs]
def airy_ai(input):
    if _capturing():
        _captured = _capture_call(airy_ai, (input,), {})
        if _captured is not None:
            return _captured
    return _C.airy_ai(input)



[docs]
def spherical_bessel_j0(input):
    if _capturing():
        _captured = _capture_call(spherical_bessel_j0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.spherical_bessel_j0(input)



[docs]
def modified_bessel_i0(input):
    if _capturing():
        _captured = _capture_call(modified_bessel_i0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.modified_bessel_i0(input)



[docs]
def modified_bessel_i1(input):
    if _capturing():
        _captured = _capture_call(modified_bessel_i1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.modified_bessel_i1(input)



[docs]
def modified_bessel_k0(input):
    if _capturing():
        _captured = _capture_call(modified_bessel_k0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.modified_bessel_k0(input)



[docs]
def modified_bessel_k1(input):
    if _capturing():
        _captured = _capture_call(modified_bessel_k1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.modified_bessel_k1(input)



[docs]
def scaled_modified_bessel_k0(input):
    if _capturing():
        _captured = _capture_call(scaled_modified_bessel_k0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.scaled_modified_bessel_k0(input)



[docs]
def scaled_modified_bessel_k1(input):
    if _capturing():
        _captured = _capture_call(scaled_modified_bessel_k1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.scaled_modified_bessel_k1(input)



[docs]
def i0e(input):
    if _capturing():
        _captured = _capture_call(i0e, (input,), {})
        if _captured is not None:
            return _captured
    return _C.i0e(input)



[docs]
def i1(input):
    if _capturing():
        _captured = _capture_call(i1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.i1(input)



[docs]
def i1e(input):
    if _capturing():
        _captured = _capture_call(i1e, (input,), {})
        if _captured is not None:
            return _captured
    return _C.i1e(input)



[docs]
def chebyshev_polynomial_t(x, n):
    if _capturing():
        _captured = _capture_call(chebyshev_polynomial_t, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.chebyshev_polynomial_t(x, n)



[docs]
def chebyshev_polynomial_u(x, n):
    if _capturing():
        _captured = _capture_call(chebyshev_polynomial_u, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.chebyshev_polynomial_u(x, n)



[docs]
def chebyshev_polynomial_v(x, n):
    if _capturing():
        _captured = _capture_call(chebyshev_polynomial_v, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.chebyshev_polynomial_v(x, n)



[docs]
def chebyshev_polynomial_w(x, n):
    if _capturing():
        _captured = _capture_call(chebyshev_polynomial_w, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.chebyshev_polynomial_w(x, n)



[docs]
def shifted_chebyshev_polynomial_t(x, n):
    if _capturing():
        _captured = _capture_call(shifted_chebyshev_polynomial_t, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.shifted_chebyshev_polynomial_t(x, n)



[docs]
def shifted_chebyshev_polynomial_u(x, n):
    if _capturing():
        _captured = _capture_call(shifted_chebyshev_polynomial_u, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.shifted_chebyshev_polynomial_u(x, n)



[docs]
def shifted_chebyshev_polynomial_v(x, n):
    if _capturing():
        _captured = _capture_call(shifted_chebyshev_polynomial_v, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.shifted_chebyshev_polynomial_v(x, n)



[docs]
def shifted_chebyshev_polynomial_w(x, n):
    if _capturing():
        _captured = _capture_call(shifted_chebyshev_polynomial_w, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.shifted_chebyshev_polynomial_w(x, n)



[docs]
def hermite_polynomial_h(x, n):
    if _capturing():
        _captured = _capture_call(hermite_polynomial_h, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.hermite_polynomial_h(x, n)



[docs]
def hermite_polynomial_he(x, n):
    if _capturing():
        _captured = _capture_call(hermite_polynomial_he, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.hermite_polynomial_he(x, n)



[docs]
def laguerre_polynomial_l(x, n):
    if _capturing():
        _captured = _capture_call(laguerre_polynomial_l, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.laguerre_polynomial_l(x, n)



[docs]
def legendre_polynomial_p(x, n):
    if _capturing():
        _captured = _capture_call(legendre_polynomial_p, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.legendre_polynomial_p(x, n)



[docs]
def zeta(input, other):
    if _capturing():
        _captured = _capture_call(zeta, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.zeta(input, other)



[docs]
def gammainc(a, x):
    if _capturing():
        _captured = _capture_call(gammainc, (a, x), {})
        if _captured is not None:
            return _captured
    return _C.gammainc(a, x)



[docs]
def gammaincc(a, x):
    if _capturing():
        _captured = _capture_call(gammaincc, (a, x), {})
        if _captured is not None:
            return _captured
    return _C.gammaincc(a, x)



[docs]
def polygamma(n, input, *, out=None):
    if out is not None:
        return _C.polygamma(n=n, self=input, out=out)
    if _capturing():
        _captured = _capture_call(polygamma, (n, input), {})
        if _captured is not None:
            return _captured
    return _C.polygamma(n=n, self=input)



[docs]
def sparse_coo_tensor(indices, values, size=None, is_coalesced=False):
    if _capturing():
        _captured = _capture_call(sparse_coo_tensor, (indices, values, size, is_coalesced), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C.sparse_coo_tensor(indices, values, size, is_coalesced=is_coalesced)



[docs]
def to_dense(input):
    if _capturing():
        _captured = _capture_call(to_dense, (input,), {})
        if _captured is not None:
            return _captured
    return _C.to_dense(input)



[docs]
def to_sparse(input, sparse_dim=None):
    if _capturing():
        _captured = _capture_call(to_sparse, (input, sparse_dim), {})
        if _captured is not None:
            return _captured
    if sparse_dim is None:
        return _C.to_sparse(input)
    return _C.to_sparse(input, sparse_dim)



[docs]
def to_sparse_csr(input):
    if _capturing():
        _captured = _capture_call(to_sparse_csr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.to_sparse_csr(input)


def _nnz(input):
    if _capturing():
        _captured = _capture_call(_nnz, (input,), {})
        if _captured is not None:
            return _captured
    return _C._nnz(input)


[docs]
def sparse_mm(input, dense):
    if _capturing():
        _captured = _capture_call(sparse_mm, (input, dense), {})
        if _captured is not None:
            return _captured
    return _C.sparse_mm(input, dense)


def _to_sparse_semi_structured(dense):
    if _capturing():
        _captured = _capture_call(_to_sparse_semi_structured, (dense,), {})
        if _captured is not None:
            return _captured
    return _C._to_sparse_semi_structured(dense)

def _sparse_semi_structured_to_dense(packed, meta):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_to_dense, (packed, meta), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_to_dense(packed, meta)

def _sparse_semi_structured_mask_grad(grad, packed, meta):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_mask_grad, (grad, packed, meta), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_mask_grad(grad, packed, meta)

def _sparse_semi_structured_gather_grad(grad, packed, meta):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_gather_grad, (grad, packed, meta), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_gather_grad(grad, packed, meta)

def _sparse_semi_structured_mm(mat1, mat1_meta, mat2, out_dtype=None):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_mm, (mat1, mat1_meta, mat2, out_dtype), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_mm(mat1, mat1_meta, mat2, out_dtype=out_dtype)

def _sparse_semi_structured_mm_right(mat2, mat1, mat1_meta, out_dtype=None):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_mm_right, (mat2, mat1, mat1_meta, out_dtype), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_mm_right(mat2, mat1, mat1_meta, out_dtype=out_dtype)

def _sparse_semi_structured_addmm(input, mat1, mat1_meta, mat2, alpha=1, beta=1, out_dtype=None):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_addmm, (input, mat1, mat1_meta, mat2, alpha, beta, out_dtype), {})
        if _captured is not None:
            return _captured
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    if not isinstance(beta, (tensorplay.Scalar, tensorplay.Tensor)):
        beta = tensorplay.Scalar(beta)
    return _C._sparse_semi_structured_addmm(input, mat1, mat1_meta, mat2, alpha=alpha, beta=beta, out_dtype=out_dtype)


[docs]
def sparse_sum(input, dim=None, dtype=None):
    if _capturing():
        _captured = _capture_call(sparse_sum, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.sparse_sum(input, dim, dtype)



[docs]
def sparse_add(input, other):
    if _capturing():
        _captured = _capture_call(sparse_add, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.sparse_add(input, other)



[docs]
def sparse_mul(input, other):
    if _capturing():
        _captured = _capture_call(sparse_mul, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.sparse_mul(input, other)



[docs]
def spdiags(diagonals, offsets, shape, layout=None):
    if _capturing():
        _captured = _capture_call(spdiags, (diagonals, offsets, shape, layout), {})
        if _captured is not None:
            return _captured
    if isinstance(shape, int) and not isinstance(shape, bool):
        shape = [shape]
    return _C.spdiags(diagonals, offsets, shape, layout)



[docs]
def quantize_per_tensor_dynamic(input, dtype, reduce_range):
    if _capturing():
        _captured = _capture_call(quantize_per_tensor_dynamic, (input, dtype, reduce_range), {})
        if _captured is not None:
            return _captured
    return _C.quantize_per_tensor_dynamic(input, dtype, reduce_range)



[docs]
def quantize_per_tensor(input, scale, zero_point, dtype):
    if _capturing():
        _captured = _capture_call(quantize_per_tensor, (input, scale, zero_point, dtype), {})
        if _captured is not None:
            return _captured
    return _C.quantize_per_tensor(input, scale, zero_point, dtype)



[docs]
def quantize_per_channel(input, scales, zero_points, axis, dtype):
    if _capturing():
        _captured = _capture_call(quantize_per_channel, (input, scales, zero_points, axis, dtype), {})
        if _captured is not None:
            return _captured
    return _C.quantize_per_channel(input, scales, zero_points, axis, dtype)



[docs]
def dequantize(*args):
    if _capturing():
        _captured = _capture_call(dequantize, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.dequantize(*args)



[docs]
def quantized_linear(input, weight, input_scale, input_zero_point, weight_scales, weight_zero_points, bias=None):
    if _capturing():
        _captured = _capture_call(quantized_linear, (input, weight, input_scale, input_zero_point, weight_scales, weight_zero_points, bias), {})
        if _captured is not None:
            return _captured
    return _C.quantized_linear(input, weight, input_scale, input_zero_point, weight_scales, weight_zero_points, bias)



[docs]
def quantized_add(a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point):
    if _capturing():
        _captured = _capture_call(quantized_add, (a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point), {})
        if _captured is not None:
            return _captured
    return _C.quantized_add(a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point)



[docs]
def quantized_sub(a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point):
    if _capturing():
        _captured = _capture_call(quantized_sub, (a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point), {})
        if _captured is not None:
            return _captured
    return _C.quantized_sub(a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point)



[docs]
def quantized_mul(a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point):
    if _capturing():
        _captured = _capture_call(quantized_mul, (a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point), {})
        if _captured is not None:
            return _captured
    return _C.quantized_mul(a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point)



[docs]
def quantized_div(a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point):
    if _capturing():
        _captured = _capture_call(quantized_div, (a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point), {})
        if _captured is not None:
            return _captured
    return _C.quantized_div(a, b, a_scale, a_zero_point, b_scale, b_zero_point, out_scale, out_zero_point)



[docs]
def quantized_clamp(input, self_scale, self_zero_point, out_scale, out_zero_point, min=None, max=None):
    if _capturing():
        _captured = _capture_call(quantized_clamp, (input, self_scale, self_zero_point, out_scale, out_zero_point, min, max), {})
        if _captured is not None:
            return _captured
    if min is not None and not isinstance(min, (tensorplay.Scalar, tensorplay.Tensor)):
        min = tensorplay.Scalar(min)
    if max is not None and not isinstance(max, (tensorplay.Scalar, tensorplay.Tensor)):
        max = tensorplay.Scalar(max)
    return _C.quantized_clamp(input, self_scale, self_zero_point, out_scale, out_zero_point, min, max)



[docs]
def quantized_max_pool2d(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(quantized_max_pool2d, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.quantized_max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)



[docs]
def quantized_conv2d_prepack(weight, weight_scales, weight_zero_points, bias=None, transposed=False):
    if _capturing():
        _captured = _capture_call(quantized_conv2d_prepack, (weight, weight_scales, weight_zero_points, bias, transposed), {})
        if _captured is not None:
            return _captured
    return _C.quantized_conv2d_prepack(weight, weight_scales, weight_zero_points, bias, transposed)



[docs]
def quantized_conv2d_unpack(weight_packed, bias_packed, weight_sizes, transposed=False, depthwise=False):
    if _capturing():
        _captured = _capture_call(quantized_conv2d_unpack, (weight_packed, bias_packed, weight_sizes, transposed, depthwise), {})
        if _captured is not None:
            return _captured
    if isinstance(weight_sizes, int) and not isinstance(weight_sizes, bool):
        weight_sizes = [weight_sizes]
    return _C.quantized_conv2d_unpack(weight_packed, bias_packed, weight_sizes, transposed, depthwise)



[docs]
def quantized_conv2d_run(input, weight_packed, bias_packed, weight_sizes, input_scale, input_zero_point, out_scale, out_zero_point, stride=1, padding=0, dilation=1, output_padding=0, groups=1, transposed=False, output_min=None, output_max=None):
    if _capturing():
        _captured = _capture_call(quantized_conv2d_run, (input, weight_packed, bias_packed, weight_sizes, input_scale, input_zero_point, out_scale, out_zero_point, stride, padding, dilation, output_padding, groups, transposed, output_min, output_max), {})
        if _captured is not None:
            return _captured
    if isinstance(weight_sizes, int) and not isinstance(weight_sizes, bool):
        weight_sizes = [weight_sizes]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if output_min is not None and not isinstance(output_min, (tensorplay.Scalar, tensorplay.Tensor)):
        output_min = tensorplay.Scalar(output_min)
    if output_max is not None and not isinstance(output_max, (tensorplay.Scalar, tensorplay.Tensor)):
        output_max = tensorplay.Scalar(output_max)
    return _C.quantized_conv2d_run(input, weight_packed, bias_packed, weight_sizes, input_scale, input_zero_point, out_scale, out_zero_point, stride, padding, dilation, output_padding, groups, transposed, output_min, output_max)



[docs]
def quantized_conv2d(input, weight, bias, input_scale, input_zero_point, weight_scale, weight_zero_point, out_scale, out_zero_point, stride=1, padding=0, dilation=1, groups=1):
    if _capturing():
        _captured = _capture_call(quantized_conv2d, (input, weight, bias, input_scale, input_zero_point, weight_scale, weight_zero_point, out_scale, out_zero_point, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.quantized_conv2d(input, weight, bias, input_scale, input_zero_point, weight_scale, weight_zero_point, out_scale, out_zero_point, stride, padding, dilation, groups)



[docs]
def forward_neg(a, da):
    if _capturing():
        _captured = _capture_call(forward_neg, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_neg(a, da)



[docs]
def forward_exp(a, da):
    if _capturing():
        _captured = _capture_call(forward_exp, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_exp(a, da)



[docs]
def forward_log(a, da):
    if _capturing():
        _captured = _capture_call(forward_log, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_log(a, da)



[docs]
def forward_sin(a, da):
    if _capturing():
        _captured = _capture_call(forward_sin, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_sin(a, da)



[docs]
def forward_cos(a, da):
    if _capturing():
        _captured = _capture_call(forward_cos, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_cos(a, da)



[docs]
def forward_sqrt(a, da):
    if _capturing():
        _captured = _capture_call(forward_sqrt, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_sqrt(a, da)



[docs]
def forward_tanh(a, da):
    if _capturing():
        _captured = _capture_call(forward_tanh, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_tanh(a, da)



[docs]
def forward_sigmoid(a, da):
    if _capturing():
        _captured = _capture_call(forward_sigmoid, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_sigmoid(a, da)



[docs]
def forward_relu(a, da):
    if _capturing():
        _captured = _capture_call(forward_relu, (a, da), {})
        if _captured is not None:
            return _captured
    return _C.forward_relu(a, da)



[docs]
def forward_add(a, da, b, db):
    if _capturing():
        _captured = _capture_call(forward_add, (a, da, b, db), {})
        if _captured is not None:
            return _captured
    return _C.forward_add(a, da, b, db)



[docs]
def forward_sub(a, da, b, db):
    if _capturing():
        _captured = _capture_call(forward_sub, (a, da, b, db), {})
        if _captured is not None:
            return _captured
    return _C.forward_sub(a, da, b, db)



[docs]
def forward_mul(a, da, b, db):
    if _capturing():
        _captured = _capture_call(forward_mul, (a, da, b, db), {})
        if _captured is not None:
            return _captured
    return _C.forward_mul(a, da, b, db)



[docs]
def forward_div(a, da, b, db):
    if _capturing():
        _captured = _capture_call(forward_div, (a, da, b, db), {})
        if _captured is not None:
            return _captured
    return _C.forward_div(a, da, b, db)



[docs]
def forward_pow(a, da, b, db):
    if _capturing():
        _captured = _capture_call(forward_pow, (a, da, b, db), {})
        if _captured is not None:
            return _captured
    return _C.forward_pow(a, da, b, db)



[docs]
def forward_mm(a, da, b, db):
    if _capturing():
        _captured = _capture_call(forward_mm, (a, da, b, db), {})
        if _captured is not None:
            return _captured
    return _C.forward_mm(a, da, b, db)



[docs]
def expand(input, size, implicit=False):
    if _capturing():
        _captured = _capture_call(expand, (input, size, implicit), {})
        if _captured is not None:
            return _captured
    return input.expand(size=size, implicit=implicit)



[docs]
def expand_as(input, other):
    if _capturing():
        _captured = _capture_call(expand_as, (input, other), {})
        if _captured is not None:
            return _captured
    return input.expand_as(other=other)



[docs]
def broadcast_to(input, size):
    if _capturing():
        _captured = _capture_call(broadcast_to, (input, size), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C.broadcast_to(input, size)



[docs]
def repeat(input, repeats):
    if _capturing():
        _captured = _capture_call(repeat, (input, repeats), {})
        if _captured is not None:
            return _captured
    return input.repeat(repeats=repeats)



[docs]
def tile(input, dims):
    if _capturing():
        _captured = _capture_call(tile, (input, dims), {})
        if _captured is not None:
            return _captured
    if isinstance(dims, int) and not isinstance(dims, bool):
        dims = [dims]
    return _C.tile(input, dims)



[docs]
def hstack(*args):
    if _capturing():
        _captured = _capture_call(hstack, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.hstack(*args)



[docs]
def vstack(*args):
    if _capturing():
        _captured = _capture_call(vstack, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.vstack(*args)



[docs]
def dstack(*args):
    if _capturing():
        _captured = _capture_call(dstack, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.dstack(*args)



[docs]
def row_stack(*args):
    if _capturing():
        _captured = _capture_call(row_stack, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.row_stack(*args)



[docs]
def column_stack(*args):
    if _capturing():
        _captured = _capture_call(column_stack, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.column_stack(*args)



[docs]
def tensor_split(input, sections, dim=0):
    if _capturing():
        _captured = _capture_call(tensor_split, (input, sections, dim), {})
        if _captured is not None:
            return _captured
    return _C.tensor_split(input, sections, dim)



[docs]
def hsplit(input, sections):
    if _capturing():
        _captured = _capture_call(hsplit, (input, sections), {})
        if _captured is not None:
            return _captured
    return _C.hsplit(input, sections)



[docs]
def vsplit(input, sections):
    if _capturing():
        _captured = _capture_call(vsplit, (input, sections), {})
        if _captured is not None:
            return _captured
    return _C.vsplit(input, sections)



[docs]
def dsplit(input, sections):
    if _capturing():
        _captured = _capture_call(dsplit, (input, sections), {})
        if _captured is not None:
            return _captured
    return _C.dsplit(input, sections)



[docs]
def atleast_1d(*args):
    if _capturing():
        _captured = _capture_call(atleast_1d, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.atleast_1d(*args)



[docs]
def atleast_2d(*args):
    if _capturing():
        _captured = _capture_call(atleast_2d, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.atleast_2d(*args)



[docs]
def atleast_3d(*args):
    if _capturing():
        _captured = _capture_call(atleast_3d, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.atleast_3d(*args)



[docs]
def flatten(input, start_dim=0, end_dim=-1):
    if _capturing():
        _captured = _capture_call(flatten, (input, start_dim, end_dim), {})
        if _captured is not None:
            return _captured
    return _C.flatten(input, start_dim, end_dim)



[docs]
def unflatten(input, dim, sizes):
    if _capturing():
        _captured = _capture_call(unflatten, (input, dim, sizes), {})
        if _captured is not None:
            return _captured
    if isinstance(sizes, int) and not isinstance(sizes, bool):
        sizes = [sizes]
    return _C.unflatten(input, dim, sizes)



[docs]
def ravel(input):
    if _capturing():
        _captured = _capture_call(ravel, (input,), {})
        if _captured is not None:
            return _captured
    return _C.ravel(input)



[docs]
def moveaxis(input, source, destination):
    if _capturing():
        _captured = _capture_call(moveaxis, (input, source, destination), {})
        if _captured is not None:
            return _captured
    if isinstance(source, int) and not isinstance(source, bool):
        source = [source]
    if isinstance(destination, int) and not isinstance(destination, bool):
        destination = [destination]
    return _C.moveaxis(input, source, destination)



[docs]
def swapaxes(input, axis0, axis1):
    if _capturing():
        _captured = _capture_call(swapaxes, (input, axis0, axis1), {})
        if _captured is not None:
            return _captured
    return _C.swapaxes(input, axis0, axis1)



[docs]
def swapdims(input, dim0, dim1):
    if _capturing():
        _captured = _capture_call(swapdims, (input, dim0, dim1), {})
        if _captured is not None:
            return _captured
    return _C.swapdims(input, dim0, dim1)



[docs]
def argwhere(input):
    if _capturing():
        _captured = _capture_call(argwhere, (input,), {})
        if _captured is not None:
            return _captured
    return _C.argwhere(input)



[docs]
def fill(input, value):
    if _capturing():
        _captured = _capture_call(fill, (input, value), {})
        if _captured is not None:
            return _captured
    if not isinstance(value, (tensorplay.Scalar, tensorplay.Tensor)):
        value = tensorplay.Scalar(value)
    return _C.fill(input, value)



[docs]
def equal(input, other):
    if _capturing():
        _captured = _capture_call(equal, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.equal(input, other)



[docs]
def allclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=False):
    if _capturing():
        _captured = _capture_call(allclose, (input, other, rtol, atol, equal_nan), {})
        if _captured is not None:
            return _captured
    return _C.allclose(input, other, rtol, atol, equal_nan)



[docs]
def scatter_reduce(input, dim, index, src, reduce, *, include_self=True, out=None):
    if out is not None:
        return _C.scatter_reduce(input, dim, index, src, reduce, include_self=include_self, out=out)
    if _capturing():
        _captured = _capture_call(scatter_reduce, (input, dim, index, src, reduce), {'include_self': include_self})
        if _captured is not None:
            return _captured
    return _C.scatter_reduce(input, dim, index, src, reduce, include_self=include_self)



[docs]
def index_reduce(input, dim, index, source, reduce, *, include_self=True, out=None):
    if out is not None:
        return _C.index_reduce(self=input, dim=dim, index=index, source=source, reduce=reduce, include_self=include_self, out=out)
    if _capturing():
        _captured = _capture_call(index_reduce, (input, dim, index, source, reduce), {'include_self': include_self})
        if _captured is not None:
            return _captured
    return _C.index_reduce(self=input, dim=dim, index=index, source=source, reduce=reduce, include_self=include_self)


def _scatter_reduce_backward_self(grad, input, dim, index, src, reduce, include_self):
    if _capturing():
        _captured = _capture_call(_scatter_reduce_backward_self, (grad, input, dim, index, src, reduce, include_self), {})
        if _captured is not None:
            return _captured
    return _C._scatter_reduce_backward_self(grad, input, dim, index, src, reduce, include_self)

def _scatter_reduce_backward_src(grad, input, dim, index, src, reduce, include_self):
    if _capturing():
        _captured = _capture_call(_scatter_reduce_backward_src, (grad, input, dim, index, src, reduce, include_self), {})
        if _captured is not None:
            return _captured
    return _C._scatter_reduce_backward_src(grad, input, dim, index, src, reduce, include_self)

def _index_reduce_backward_self(grad, input, dim, index, source, reduce, include_self):
    if _capturing():
        _captured = _capture_call(_index_reduce_backward_self, (grad, input, dim, index, source, reduce, include_self), {})
        if _captured is not None:
            return _captured
    return _C._index_reduce_backward_self(grad, input, dim, index, source, reduce, include_self)

def _index_reduce_backward_src(grad, input, dim, index, source, reduce, include_self):
    if _capturing():
        _captured = _capture_call(_index_reduce_backward_src, (grad, input, dim, index, source, reduce, include_self), {})
        if _captured is not None:
            return _captured
    return _C._index_reduce_backward_src(grad, input, dim, index, source, reduce, include_self)


[docs]
def grouped_mm(input, mat2, offs):
    if _capturing():
        _captured = _capture_call(grouped_mm, (input, mat2, offs), {})
        if _captured is not None:
            return _captured
    return _C.grouped_mm(input, mat2, offs)



[docs]
def rms_norm(input, normalized_shape, weight=None, eps=None):
    if _capturing():
        _captured = _capture_call(rms_norm, (input, normalized_shape, weight, eps), {})
        if _captured is not None:
            return _captured
    if isinstance(normalized_shape, int) and not isinstance(normalized_shape, bool):
        normalized_shape = [normalized_shape]
    return _C.rms_norm(input, normalized_shape, weight, eps)



[docs]
def linear(input, weight, bias=None):
    if _capturing():
        _captured = _capture_call(linear, (input, weight, bias), {})
        if _captured is not None:
            return _captured
    return _C.linear(input, weight, bias)



[docs]
def absolute(input, *, out=None):
    if out is not None:
        return _C.absolute(self=input, out=out)
    if _capturing():
        _captured = _capture_call(absolute, (input,), {})
        if _captured is not None:
            return _captured
    return _C.absolute(self=input)



[docs]
def absolute_(input):
    return input.absolute_()



[docs]
def arccos(input, *, out=None):
    if out is not None:
        return _C.arccos(self=input, out=out)
    if _capturing():
        _captured = _capture_call(arccos, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arccos(self=input)



[docs]
def arccos_(input):
    if _capturing():
        _captured = _capture_call(arccos_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arccos_(input)



[docs]
def arccosh(input, *, out=None):
    if out is not None:
        return _C.arccosh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(arccosh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arccosh(self=input)



[docs]
def arccosh_(input):
    if _capturing():
        _captured = _capture_call(arccosh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arccosh_(input)



[docs]
def arcsin(input, *, out=None):
    if out is not None:
        return _C.arcsin(self=input, out=out)
    if _capturing():
        _captured = _capture_call(arcsin, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arcsin(self=input)



[docs]
def arcsin_(input):
    if _capturing():
        _captured = _capture_call(arcsin_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arcsin_(input)



[docs]
def arcsinh(input, *, out=None):
    if out is not None:
        return _C.arcsinh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(arcsinh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arcsinh(self=input)



[docs]
def arcsinh_(input):
    if _capturing():
        _captured = _capture_call(arcsinh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arcsinh_(input)



[docs]
def arctan(input, *, out=None):
    if out is not None:
        return _C.arctan(self=input, out=out)
    if _capturing():
        _captured = _capture_call(arctan, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arctan(self=input)



[docs]
def arctan_(input):
    if _capturing():
        _captured = _capture_call(arctan_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arctan_(input)



[docs]
def arctanh(input, *, out=None):
    if out is not None:
        return _C.arctanh(self=input, out=out)
    if _capturing():
        _captured = _capture_call(arctanh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arctanh(self=input)



[docs]
def arctanh_(input):
    if _capturing():
        _captured = _capture_call(arctanh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.arctanh_(input)



[docs]
def avg_pool1d(input, kernel_size, stride=[], padding=0, ceil_mode=False, count_include_pad=True):
    if _capturing():
        _captured = _capture_call(avg_pool1d, (input, kernel_size, stride, padding, ceil_mode, count_include_pad), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    return _C.avg_pool1d(input, kernel_size, stride, padding, ceil_mode, count_include_pad)



[docs]
def adaptive_avg_pool1d(input, output_size):
    if _capturing():
        _captured = _capture_call(adaptive_avg_pool1d, (input, output_size), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C.adaptive_avg_pool1d(input, output_size)



[docs]
def adaptive_max_pool1d(input, output_size):
    if _capturing():
        _captured = _capture_call(adaptive_max_pool1d, (input, output_size), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C.adaptive_max_pool1d(input, output_size)



[docs]
def max_pool1d_with_indices(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(max_pool1d_with_indices, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.max_pool1d_with_indices(input, kernel_size, stride, padding, dilation, ceil_mode)



[docs]
def max_pool1d(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(max_pool1d, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.max_pool1d(input, kernel_size, stride, padding, dilation, ceil_mode)



[docs]
def concat(tensors, dim=0, *, out=None):
    if out is not None:
        return _C.concat(tensors=tensors, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(concat, (tensors, dim), {})
        if _captured is not None:
            return _captured
    return _C.concat(tensors=tensors, dim=dim)



[docs]
def concatenate(tensors, dim=0, *, out=None):
    if out is not None:
        return _C.concatenate(tensors=tensors, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(concatenate, (tensors, dim), {})
        if _captured is not None:
            return _captured
    return _C.concatenate(tensors=tensors, dim=dim)



[docs]
def diagflat(input, offset=0):
    if _capturing():
        _captured = _capture_call(diagflat, (input, offset), {})
        if _captured is not None:
            return _captured
    return _C.diagflat(input, offset)



[docs]
def ger(input, vec2, *, out=None):
    if out is not None:
        return _C.ger(self=input, vec2=vec2, out=out)
    if _capturing():
        _captured = _capture_call(ger, (input, vec2), {})
        if _captured is not None:
            return _captured
    return _C.ger(self=input, vec2=vec2)



[docs]
def kron(input, other, *, out=None):
    if out is not None:
        return _C.kron(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(kron, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.kron(self=input, other=other)



[docs]
def matrix_power(input, n, *, out=None):
    if out is not None:
        return _C.matrix_power(self=input, n=n, out=out)
    if _capturing():
        _captured = _capture_call(matrix_power, (input, n), {})
        if _captured is not None:
            return _captured
    return _C.matrix_power(self=input, n=n)



[docs]
def vander(x, N=None, increasing=False):
    if _capturing():
        _captured = _capture_call(vander, (x, N, increasing), {})
        if _captured is not None:
            return _captured
    return _C.vander(x, N, increasing)



[docs]
def cartesian_prod(*args):
    if _capturing():
        _captured = _capture_call(cartesian_prod, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.cartesian_prod(*args)



[docs]
def silu_mul(gate, up):
    if _capturing():
        _captured = _capture_call(silu_mul, (gate, up), {})
        if _captured is not None:
            return _captured
    return _C.silu_mul(gate, up)



[docs]
def fused_swiglu(gate, up):
    if _capturing():
        _captured = _capture_call(fused_swiglu, (gate, up), {})
        if _captured is not None:
            return _captured
    return _C.fused_swiglu(gate, up)



[docs]
def silu_and_mul(input):
    if _capturing():
        _captured = _capture_call(silu_and_mul, (input,), {})
        if _captured is not None:
            return _captured
    return _C.silu_and_mul(input)



[docs]
def rotary_embedding(input, cos, sin, position_offset=0):
    if _capturing():
        _captured = _capture_call(rotary_embedding, (input, cos, sin, position_offset), {})
        if _captured is not None:
            return _captured
    return _C.rotary_embedding(input, cos, sin, position_offset)



[docs]
def fused_rope(query, key, cos, sin, position_offset=0):
    if _capturing():
        _captured = _capture_call(fused_rope, (query, key, cos, sin, position_offset), {})
        if _captured is not None:
            return _captured
    return _C.fused_rope(query, key, cos, sin, position_offset)



[docs]
def acos_(input):
    if _capturing():
        _captured = _capture_call(acos_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.acos_(input)



[docs]
def acosh_(input):
    if _capturing():
        _captured = _capture_call(acosh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.acosh_(input)



[docs]
def addbmm_(input, batch1, batch2, beta=1, alpha=1):
    if _capturing():
        _captured = _capture_call(addbmm_, (input, batch1, batch2, beta, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(beta, (tensorplay.Scalar, tensorplay.Tensor)):
        beta = tensorplay.Scalar(beta)
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C.addbmm_(input, batch1, batch2, beta=beta, alpha=alpha)



[docs]
def addmm_(input, mat1, mat2, beta=1, alpha=1):
    if _capturing():
        _captured = _capture_call(addmm_, (input, mat1, mat2, beta, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(beta, (tensorplay.Scalar, tensorplay.Tensor)):
        beta = tensorplay.Scalar(beta)
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C.addmm_(input, mat1, mat2, beta=beta, alpha=alpha)



[docs]
def addmv_(input, mat, vec, beta=1, alpha=1):
    if _capturing():
        _captured = _capture_call(addmv_, (input, mat, vec, beta, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(beta, (tensorplay.Scalar, tensorplay.Tensor)):
        beta = tensorplay.Scalar(beta)
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C.addmv_(input, mat, vec, beta=beta, alpha=alpha)



[docs]
def addr_(input, vec1, vec2, beta=1, alpha=1):
    if _capturing():
        _captured = _capture_call(addr_, (input, vec1, vec2, beta, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(beta, (tensorplay.Scalar, tensorplay.Tensor)):
        beta = tensorplay.Scalar(beta)
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C.addr_(input, vec1, vec2, beta=beta, alpha=alpha)



[docs]
def asin_(input):
    if _capturing():
        _captured = _capture_call(asin_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.asin_(input)



[docs]
def asinh_(input):
    if _capturing():
        _captured = _capture_call(asinh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.asinh_(input)



[docs]
def atan2_(input, other):
    if _capturing():
        _captured = _capture_call(atan2_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.atan2_(input, other)



[docs]
def atan_(input):
    if _capturing():
        _captured = _capture_call(atan_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.atan_(input)



[docs]
def atanh_(input):
    if _capturing():
        _captured = _capture_call(atanh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.atanh_(input)



[docs]
def bitwise_not_(input):
    if _capturing():
        _captured = _capture_call(bitwise_not_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.bitwise_not_(input)



[docs]
def ceil_(input):
    if _capturing():
        _captured = _capture_call(ceil_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.ceil_(input)



[docs]
def celu_(input, alpha=1.0):
    if _capturing():
        _captured = _capture_call(celu_, (input, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C.celu_(input, alpha)



[docs]
def clip_(input, min=None, max=None):
    if _capturing():
        _captured = _capture_call(clip_, (input, min, max), {})
        if _captured is not None:
            return _captured
    if min is not None and not isinstance(min, (tensorplay.Scalar, tensorplay.Tensor)):
        min = tensorplay.Scalar(min)
    if max is not None and not isinstance(max, (tensorplay.Scalar, tensorplay.Tensor)):
        max = tensorplay.Scalar(max)
    return _C.clip_(input, min, max)



[docs]
def cos_(input):
    if _capturing():
        _captured = _capture_call(cos_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.cos_(input)



[docs]
def cosh_(input):
    if _capturing():
        _captured = _capture_call(cosh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.cosh_(input)



[docs]
def cumprod_(input, dim, dtype=None):
    if _capturing():
        _captured = _capture_call(cumprod_, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.cumprod_(input, dim, dtype)



[docs]
def cumsum_(input, dim=0, dtype=None):
    if _capturing():
        _captured = _capture_call(cumsum_, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.cumsum_(input, dim, dtype)



[docs]
def deg2rad_(input):
    if _capturing():
        _captured = _capture_call(deg2rad_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.deg2rad_(input)



[docs]
def elu_(input, alpha=1, scale=1, input_scale=1):
    if _capturing():
        _captured = _capture_call(elu_, (input, alpha, scale, input_scale), {})
        if _captured is not None:
            return _captured
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    if not isinstance(scale, (tensorplay.Scalar, tensorplay.Tensor)):
        scale = tensorplay.Scalar(scale)
    if not isinstance(input_scale, (tensorplay.Scalar, tensorplay.Tensor)):
        input_scale = tensorplay.Scalar(input_scale)
    return _C.elu_(input, alpha, scale, input_scale)



[docs]
def erf_(input):
    if _capturing():
        _captured = _capture_call(erf_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.erf_(input)



[docs]
def erfc_(input):
    if _capturing():
        _captured = _capture_call(erfc_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.erfc_(input)



[docs]
def erfinv_(input):
    if _capturing():
        _captured = _capture_call(erfinv_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.erfinv_(input)



[docs]
def exp2_(input):
    if _capturing():
        _captured = _capture_call(exp2_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.exp2_(input)



[docs]
def exp_(input):
    if _capturing():
        _captured = _capture_call(exp_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.exp_(input)



[docs]
def expm1_(input):
    if _capturing():
        _captured = _capture_call(expm1_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.expm1_(input)



[docs]
def floor_(input):
    if _capturing():
        _captured = _capture_call(floor_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.floor_(input)



[docs]
def frac_(input):
    if _capturing():
        _captured = _capture_call(frac_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.frac_(input)



[docs]
def gcd_(input, other):
    if _capturing():
        _captured = _capture_call(gcd_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.gcd_(input, other)



[docs]
def gelu_(input, approximate='none'):
    if _capturing():
        _captured = _capture_call(gelu_, (input, approximate), {})
        if _captured is not None:
            return _captured
    return _C.gelu_(input, approximate)



[docs]
def hardsigmoid_(input):
    if _capturing():
        _captured = _capture_call(hardsigmoid_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.hardsigmoid_(input)



[docs]
def hardswish_(input):
    if _capturing():
        _captured = _capture_call(hardswish_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.hardswish_(input)



[docs]
def hardtanh_(input, min_val=-1, max_val=1):
    if _capturing():
        _captured = _capture_call(hardtanh_, (input, min_val, max_val), {})
        if _captured is not None:
            return _captured
    if not isinstance(min_val, (tensorplay.Scalar, tensorplay.Tensor)):
        min_val = tensorplay.Scalar(min_val)
    if not isinstance(max_val, (tensorplay.Scalar, tensorplay.Tensor)):
        max_val = tensorplay.Scalar(max_val)
    return _C.hardtanh_(input, min_val, max_val)



[docs]
def heaviside_(input, values):
    if _capturing():
        _captured = _capture_call(heaviside_, (input, values), {})
        if _captured is not None:
            return _captured
    return _C.heaviside_(input, values)



[docs]
def hypot_(input, other):
    if _capturing():
        _captured = _capture_call(hypot_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.hypot_(input, other)



[docs]
def index_add_(input, dim, index, source):
    if _capturing():
        _captured = _capture_call(index_add_, (input, dim, index, source), {})
        if _captured is not None:
            return _captured
    return _C.index_add_(input, dim, index, source)



[docs]
def index_copy_(input, dim, index, source):
    if _capturing():
        _captured = _capture_call(index_copy_, (input, dim, index, source), {})
        if _captured is not None:
            return _captured
    return _C.index_copy_(input, dim, index, source)



[docs]
def index_reduce_(input, dim, index, source, reduce, include_self=True):
    if _capturing():
        _captured = _capture_call(index_reduce_, (input, dim, index, source, reduce, include_self), {})
        if _captured is not None:
            return _captured
    return _C.index_reduce_(input, dim, index, source, reduce, include_self=include_self)



[docs]
def lcm_(input, other):
    if _capturing():
        _captured = _capture_call(lcm_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.lcm_(input, other)



[docs]
def leaky_relu_(input, negative_slope=0.01):
    if _capturing():
        _captured = _capture_call(leaky_relu_, (input, negative_slope), {})
        if _captured is not None:
            return _captured
    if not isinstance(negative_slope, (tensorplay.Scalar, tensorplay.Tensor)):
        negative_slope = tensorplay.Scalar(negative_slope)
    return _C.leaky_relu_(input, negative_slope)



[docs]
def lgamma_(input):
    if _capturing():
        _captured = _capture_call(lgamma_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.lgamma_(input)



[docs]
def log10_(input):
    if _capturing():
        _captured = _capture_call(log10_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log10_(input)



[docs]
def log1p_(input):
    if _capturing():
        _captured = _capture_call(log1p_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log1p_(input)



[docs]
def log2_(input):
    if _capturing():
        _captured = _capture_call(log2_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log2_(input)



[docs]
def log_(input):
    if _capturing():
        _captured = _capture_call(log_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log_(input)



[docs]
def logical_and_(input, other):
    if _capturing():
        _captured = _capture_call(logical_and_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.logical_and_(input, other)



[docs]
def logical_not_(input):
    if _capturing():
        _captured = _capture_call(logical_not_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.logical_not_(input)



[docs]
def logical_or_(input, other):
    if _capturing():
        _captured = _capture_call(logical_or_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.logical_or_(input, other)



[docs]
def logical_xor_(input, other):
    if _capturing():
        _captured = _capture_call(logical_xor_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.logical_xor_(input, other)



[docs]
def logit_(input, eps=None):
    if _capturing():
        _captured = _capture_call(logit_, (input, eps), {})
        if _captured is not None:
            return _captured
    if eps is not None and not isinstance(eps, (tensorplay.Scalar, tensorplay.Tensor)):
        eps = tensorplay.Scalar(eps)
    return _C.logit_(input, eps)



[docs]
def masked_scatter_(input, mask, source):
    if _capturing():
        _captured = _capture_call(masked_scatter_, (input, mask, source), {})
        if _captured is not None:
            return _captured
    return _C.masked_scatter_(input, mask, source)



[docs]
def mish_(input):
    if _capturing():
        _captured = _capture_call(mish_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.mish_(input)



[docs]
def nan_to_num_(input, nan=0.0, posinf=None, neginf=None):
    if _capturing():
        _captured = _capture_call(nan_to_num_, (input, nan, posinf, neginf), {})
        if _captured is not None:
            return _captured
    if not isinstance(nan, (tensorplay.Scalar, tensorplay.Tensor)):
        nan = tensorplay.Scalar(nan)
    if posinf is not None and not isinstance(posinf, (tensorplay.Scalar, tensorplay.Tensor)):
        posinf = tensorplay.Scalar(posinf)
    if neginf is not None and not isinstance(neginf, (tensorplay.Scalar, tensorplay.Tensor)):
        neginf = tensorplay.Scalar(neginf)
    return _C.nan_to_num_(input, nan, posinf, neginf)



[docs]
def nextafter_(input, other):
    if _capturing():
        _captured = _capture_call(nextafter_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.nextafter_(input, other)



[docs]
def rad2deg_(input):
    if _capturing():
        _captured = _capture_call(rad2deg_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.rad2deg_(input)



[docs]
def reciprocal_(input):
    if _capturing():
        _captured = _capture_call(reciprocal_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.reciprocal_(input)



[docs]
def relu6_(input):
    if _capturing():
        _captured = _capture_call(relu6_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.relu6_(input)



[docs]
def renorm_(input, p, dim, maxnorm):
    if _capturing():
        _captured = _capture_call(renorm_, (input, p, dim, maxnorm), {})
        if _captured is not None:
            return _captured
    if not isinstance(p, (tensorplay.Scalar, tensorplay.Tensor)):
        p = tensorplay.Scalar(p)
    if not isinstance(maxnorm, (tensorplay.Scalar, tensorplay.Tensor)):
        maxnorm = tensorplay.Scalar(maxnorm)
    return _C.renorm_(input, p, dim, maxnorm)



[docs]
def round_(input):
    if _capturing():
        _captured = _capture_call(round_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.round_(input)



[docs]
def selu_(input):
    if _capturing():
        _captured = _capture_call(selu_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.selu_(input)



[docs]
def sgn_(input):
    if _capturing():
        _captured = _capture_call(sgn_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sgn_(input)



[docs]
def sigmoid_(input):
    if _capturing():
        _captured = _capture_call(sigmoid_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sigmoid_(input)



[docs]
def sign_(input):
    if _capturing():
        _captured = _capture_call(sign_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sign_(input)



[docs]
def silu_(input):
    if _capturing():
        _captured = _capture_call(silu_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.silu_(input)



[docs]
def sin_(input):
    if _capturing():
        _captured = _capture_call(sin_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sin_(input)



[docs]
def sinc_(input):
    if _capturing():
        _captured = _capture_call(sinc_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sinc_(input)



[docs]
def sinh_(input):
    if _capturing():
        _captured = _capture_call(sinh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sinh_(input)



[docs]
def square_(input):
    if _capturing():
        _captured = _capture_call(square_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.square_(input)



[docs]
def tan_(input):
    if _capturing():
        _captured = _capture_call(tan_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.tan_(input)



[docs]
def tanh_(input):
    if _capturing():
        _captured = _capture_call(tanh_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.tanh_(input)



[docs]
def tril_(input, diagonal=0):
    if _capturing():
        _captured = _capture_call(tril_, (input, diagonal), {})
        if _captured is not None:
            return _captured
    return _C.tril_(input, diagonal)



[docs]
def triu_(input, diagonal=0):
    if _capturing():
        _captured = _capture_call(triu_, (input, diagonal), {})
        if _captured is not None:
            return _captured
    return _C.triu_(input, diagonal)



[docs]
def trunc_(input):
    if _capturing():
        _captured = _capture_call(trunc_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.trunc_(input)



[docs]
def threshold_(input, threshold, value):
    if _capturing():
        _captured = _capture_call(threshold_, (input, threshold, value), {})
        if _captured is not None:
            return _captured
    if not isinstance(threshold, (tensorplay.Scalar, tensorplay.Tensor)):
        threshold = tensorplay.Scalar(threshold)
    if not isinstance(value, (tensorplay.Scalar, tensorplay.Tensor)):
        value = tensorplay.Scalar(value)
    return _C.threshold_(input, threshold, value)



[docs]
def i0_(input):
    if _capturing():
        _captured = _capture_call(i0_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.i0_(input)



[docs]
def chain_matmul(*args):
    if _capturing():
        _captured = _capture_call(chain_matmul, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.chain_matmul(*args)



[docs]
def tril_indices(row, col, offset=0, dtype=DType.int64, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(tril_indices, (row, col, offset, dtype, device, pin_memory), {})
        if _captured is not None:
            return _captured
    return _C.tril_indices(row, col, offset, dtype=dtype, device=_ensure_device(device), pin_memory=pin_memory)



[docs]
def triu_indices(row, col, offset=0, dtype=DType.int64, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(triu_indices, (row, col, offset, dtype, device, pin_memory), {})
        if _captured is not None:
            return _captured
    return _C.triu_indices(row, col, offset, dtype=dtype, device=_ensure_device(device), pin_memory=pin_memory)



[docs]
def combinations(input, r=2, with_replacement=False):
    if _capturing():
        _captured = _capture_call(combinations, (input, r, with_replacement), {})
        if _captured is not None:
            return _captured
    return _C.combinations(input, r, with_replacement)



[docs]
def trapz(y, x=None, dx=None, dim=-1):
    if _capturing():
        _captured = _capture_call(trapz, (y, x, dx, dim), {})
        if _captured is not None:
            return _captured
    if x is not None:
        return _C.trapz(y, x, dim=dim)
    if dx is None:
        dx = 1.0
    return _C.trapz(y, dx=dx, dim=dim)



[docs]
def histc(input, bins=100, min=0, max=0, *, out=None):
    if out is not None:
        return _C.histc(self=input, bins=bins, min=min, max=max, out=out)
    if _capturing():
        _captured = _capture_call(histc, (input, bins, min, max), {})
        if _captured is not None:
            return _captured
    return _C.histc(self=input, bins=bins, min=min, max=max)



[docs]
def isin(elements, test_elements, *, assume_unique=False, invert=False, out=None):
    if out is not None:
        return _C.isin(elements, test_elements, assume_unique=assume_unique, invert=invert, out=out)
    if _capturing():
        _captured = _capture_call(isin, (elements, test_elements), {'assume_unique': assume_unique, 'invert': invert})
        if _captured is not None:
            return _captured
    return _C.isin(elements, test_elements, assume_unique=assume_unique, invert=invert)



[docs]
def unique_consecutive(input, return_inverse=False, return_counts=False, dim=None):
    if _capturing():
        _captured = _capture_call(unique_consecutive, (input, return_inverse, return_counts, dim), {})
        if _captured is not None:
            return _captured
    _result = _C.unique_consecutive(input, return_inverse, return_counts, dim)
    if not return_inverse and not return_counts:
        return _result[0]
    if not return_inverse:
        return _result[0], _result[2]
    if not return_counts:
        return _result[0], _result[1]
    return _result



[docs]
def scalar_tensor(s, dtype=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(scalar_tensor, (s, dtype, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if not isinstance(s, (tensorplay.Scalar, tensorplay.Tensor)):
        s = tensorplay.Scalar(s)
    if dtype is None:
            dtype = DType.undefined
    return _C.scalar_tensor(s, dtype=dtype, device=_ensure_device(device), pin_memory=pin_memory)



[docs]
def is_conj(input):
    if _capturing():
        _captured = _capture_call(is_conj, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_conj(input)



[docs]
def is_neg(input):
    if _capturing():
        _captured = _capture_call(is_neg, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_neg(input)



[docs]
def is_nonzero(input):
    if _capturing():
        _captured = _capture_call(is_nonzero, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_nonzero(input)



[docs]
def is_same_size(input, other):
    if _capturing():
        _captured = _capture_call(is_same_size, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.is_same_size(input, other)



[docs]
def get_device(input):
    if _capturing():
        _captured = _capture_call(get_device, (input,), {})
        if _captured is not None:
            return _captured
    return _C.get_device(input)



[docs]
def can_cast(from_, to):
    if _capturing():
        _captured = _capture_call(can_cast, (from_, to), {})
        if _captured is not None:
            return _captured
    return _C.can_cast(from_, to)



[docs]
def promote_types(type1, type2):
    if _capturing():
        _captured = _capture_call(promote_types, (type1, type2), {})
        if _captured is not None:
            return _captured
    return _C.promote_types(type1, type2)



[docs]
def result_type(tensor, other):
    if _capturing():
        _captured = _capture_call(result_type, (tensor, other), {})
        if _captured is not None:
            return _captured
    return _C.result_type(tensor, other)



[docs]
def put(input, index, source, accumulate=False):
    if _capturing():
        _captured = _capture_call(put, (input, index, source, accumulate), {})
        if _captured is not None:
            return _captured
    return _C.put(input, index, source, accumulate)



[docs]
def resolve_conj(input):
    if _capturing():
        _captured = _capture_call(resolve_conj, (input,), {})
        if _captured is not None:
            return _captured
    return _C.resolve_conj(input)



[docs]
def resolve_neg(input):
    if _capturing():
        _captured = _capture_call(resolve_neg, (input,), {})
        if _captured is not None:
            return _captured
    return _C.resolve_neg(input)



[docs]
def alias_copy(input):
    if _capturing():
        _captured = _capture_call(alias_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.alias_copy(input)



[docs]
def t_copy(input):
    if _capturing():
        _captured = _capture_call(t_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.t_copy(input)



[docs]
def permute_copy(input, dims):
    if _capturing():
        _captured = _capture_call(permute_copy, (input, dims), {})
        if _captured is not None:
            return _captured
    if isinstance(dims, int) and not isinstance(dims, bool):
        dims = [dims]
    return _C.permute_copy(input, dims)



[docs]
def transpose_copy(input, dim0, dim1):
    if _capturing():
        _captured = _capture_call(transpose_copy, (input, dim0, dim1), {})
        if _captured is not None:
            return _captured
    return _C.transpose_copy(input, dim0, dim1)



[docs]
def squeeze_copy(input, dim=None):
    if _capturing():
        _captured = _capture_call(squeeze_copy, (input, dim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.squeeze_copy(input)
    if isinstance(dim, (list, tuple)):
        return _C.squeeze_copy(input, list(dim))
    return _C.squeeze_copy(input, dim)



[docs]
def unsqueeze_copy(input, dim):
    if _capturing():
        _captured = _capture_call(unsqueeze_copy, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.unsqueeze_copy(input, dim)



[docs]
def select_copy(input, dim, index):
    if _capturing():
        _captured = _capture_call(select_copy, (input, dim, index), {})
        if _captured is not None:
            return _captured
    return _C.select_copy(input, dim, index)



[docs]
def slice_copy(input, dim=0, start=None, end=None, step=1):
    if _capturing():
        _captured = _capture_call(slice_copy, (input, dim, start, end, step), {})
        if _captured is not None:
            return _captured
    return _C.slice_copy(input, dim, start, end, step)



[docs]
def narrow_copy(input, dim, start, length, *, out=None):
    if out is not None:
        return _C.narrow_copy(self=input, dim=dim, start=start, length=length, out=out)
    if _capturing():
        _captured = _capture_call(narrow_copy, (input, dim, start, length), {})
        if _captured is not None:
            return _captured
    return _C.narrow_copy(self=input, dim=dim, start=start, length=length)



[docs]
def diagonal_copy(input, offset=0, dim1=0, dim2=1):
    if _capturing():
        _captured = _capture_call(diagonal_copy, (input, offset, dim1, dim2), {})
        if _captured is not None:
            return _captured
    return _C.diagonal_copy(input, offset, dim1, dim2)



[docs]
def unbind_copy(input, dim=0, *, out=None):
    if out is not None:
        return _C.unbind_copy(self=input, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(unbind_copy, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.unbind_copy(self=input, dim=dim)



[docs]
def split_copy(input, split_size, dim=0, *, out=None):
    if out is not None:
        return _C.split_copy(input, split_size, dim, out=out)
    if _capturing():
        _captured = _capture_call(split_copy, (input, split_size, dim), {})
        if _captured is not None:
            return _captured
    return _C.split_copy(input, split_size, dim)



[docs]
def view_copy(input, size):
    if _capturing():
        _captured = _capture_call(view_copy, (input, size), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C.view_copy(input, size)



[docs]
def unfold_copy(input, dimension, size, step):
    if _capturing():
        _captured = _capture_call(unfold_copy, (input, dimension, size, step), {})
        if _captured is not None:
            return _captured
    return _C.unfold_copy(input, dimension, size, step)



[docs]
def expand_copy(input, size, implicit=False):
    if _capturing():
        _captured = _capture_call(expand_copy, (input, size, implicit), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C.expand_copy(input, size, implicit=implicit)



[docs]
def reshape_as(input, other):
    if _capturing():
        _captured = _capture_call(reshape_as, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.reshape_as(input, other)



[docs]
def unsafe_chunk(input, chunks, dim=0):
    if _capturing():
        _captured = _capture_call(unsafe_chunk, (input, chunks, dim), {})
        if _captured is not None:
            return _captured
    return _C.unsafe_chunk(input, chunks, dim)



[docs]
def unsafe_split(input, split_size, dim=0):
    if _capturing():
        _captured = _capture_call(unsafe_split, (input, split_size, dim), {})
        if _captured is not None:
            return _captured
    return _C.unsafe_split(input, split_size, dim)



[docs]
def cosine_similarity(x1, x2, dim=1, eps=1e-8):
    if _capturing():
        _captured = _capture_call(cosine_similarity, (x1, x2, dim, eps), {})
        if _captured is not None:
            return _captured
    return _C.cosine_similarity(x1, x2, dim, eps)



[docs]
def dropout(input, p=0.5, train=True):
    if _capturing():
        _captured = _capture_call(dropout, (input, p, train), {})
        if _captured is not None:
            return _captured
    return _C.dropout(input, p, train)



[docs]
def dropout_(input, p=0.5, train=True):
    if _capturing():
        _captured = _capture_call(dropout_, (input, p, train), {})
        if _captured is not None:
            return _captured
    return _C.dropout_(input, p, train)



[docs]
def alpha_dropout(input, p=0.5, train=True):
    if _capturing():
        _captured = _capture_call(alpha_dropout, (input, p, train), {})
        if _captured is not None:
            return _captured
    return _C.alpha_dropout(input, p, train)



[docs]
def alpha_dropout_(input, p=0.5, train=True):
    if _capturing():
        _captured = _capture_call(alpha_dropout_, (input, p, train), {})
        if _captured is not None:
            return _captured
    return _C.alpha_dropout_(input, p, train)



[docs]
def feature_dropout(input, p=0.5, train=True):
    if _capturing():
        _captured = _capture_call(feature_dropout, (input, p, train), {})
        if _captured is not None:
            return _captured
    return _C.feature_dropout(input, p, train)



[docs]
def feature_dropout_(input, p=0.5, train=True):
    if _capturing():
        _captured = _capture_call(feature_dropout_, (input, p, train), {})
        if _captured is not None:
            return _captured
    return _C.feature_dropout_(input, p, train)



[docs]
def feature_alpha_dropout(input, p=0.5, train=True):
    if _capturing():
        _captured = _capture_call(feature_alpha_dropout, (input, p, train), {})
        if _captured is not None:
            return _captured
    return _C.feature_alpha_dropout(input, p, train)



[docs]
def feature_alpha_dropout_(input, p=0.5, train=True):
    if _capturing():
        _captured = _capture_call(feature_alpha_dropout_, (input, p, train), {})
        if _captured is not None:
            return _captured
    return _C.feature_alpha_dropout_(input, p, train)



[docs]
def rrelu(input, lower=0.125, upper=0.3333333333333333, training=False):
    if _capturing():
        _captured = _capture_call(rrelu, (input, lower, upper, training), {})
        if _captured is not None:
            return _captured
    if not isinstance(lower, (tensorplay.Scalar, tensorplay.Tensor)):
        lower = tensorplay.Scalar(lower)
    if not isinstance(upper, (tensorplay.Scalar, tensorplay.Tensor)):
        upper = tensorplay.Scalar(upper)
    return _C.rrelu(input, lower, upper, training)



[docs]
def rrelu_(input, lower=0.125, upper=0.3333333333333333, training=False):
    if _capturing():
        _captured = _capture_call(rrelu_, (input, lower, upper, training), {})
        if _captured is not None:
            return _captured
    if not isinstance(lower, (tensorplay.Scalar, tensorplay.Tensor)):
        lower = tensorplay.Scalar(lower)
    if not isinstance(upper, (tensorplay.Scalar, tensorplay.Tensor)):
        upper = tensorplay.Scalar(upper)
    return _C.rrelu_(input, lower, upper, training)



[docs]
def bilinear(input1, input2, weight, bias=None):
    if _capturing():
        _captured = _capture_call(bilinear, (input1, input2, weight, bias), {})
        if _captured is not None:
            return _captured
    return _C.bilinear(input1, input2, weight, bias)



[docs]
def conv_tbc(input, weight, bias, pad=0):
    if _capturing():
        _captured = _capture_call(conv_tbc, (input, weight, bias, pad), {})
        if _captured is not None:
            return _captured
    return _C.conv_tbc(input, weight, bias, pad)



[docs]
def lstm_cell(input, hx, cx, w_ih, w_hh, b_ih=None, b_hh=None):
    if _capturing():
        _captured = _capture_call(lstm_cell, (input, hx, cx, w_ih, w_hh, b_ih, b_hh), {})
        if _captured is not None:
            return _captured
    return _C.lstm_cell(input, hx, cx, w_ih, w_hh, b_ih, b_hh)



[docs]
def rnn_relu_cell(input, hx, w_ih, w_hh, b_ih=None, b_hh=None):
    if _capturing():
        _captured = _capture_call(rnn_relu_cell, (input, hx, w_ih, w_hh, b_ih, b_hh), {})
        if _captured is not None:
            return _captured
    return _C.rnn_relu_cell(input, hx, w_ih, w_hh, b_ih, b_hh)



[docs]
def rnn_tanh_cell(input, hx, w_ih, w_hh, b_ih=None, b_hh=None):
    if _capturing():
        _captured = _capture_call(rnn_tanh_cell, (input, hx, w_ih, w_hh, b_ih, b_hh), {})
        if _captured is not None:
            return _captured
    return _C.rnn_tanh_cell(input, hx, w_ih, w_hh, b_ih, b_hh)



[docs]
def native_channel_shuffle(input, groups):
    if _capturing():
        _captured = _capture_call(native_channel_shuffle, (input, groups), {})
        if _captured is not None:
            return _captured
    return _C.native_channel_shuffle(input, groups)



[docs]
def kaiser_window(window_length, periodic=True, beta=12.0, *, dtype=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(kaiser_window, (window_length, periodic, beta), {'dtype': dtype, 'device': device, 'pin_memory': pin_memory})
        if _captured is not None:
            return _captured
    if dtype is None:
        dtype = DType.undefined
    return _C.kaiser_window(window_length, periodic, beta, dtype=dtype, device=_ensure_device(device), pin_memory=pin_memory)



[docs]
def fliplr(input):
    if _capturing():
        _captured = _capture_call(fliplr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.fliplr(input)



[docs]
def flipud(input):
    if _capturing():
        _captured = _capture_call(flipud, (input,), {})
        if _captured is not None:
            return _captured
    return _C.flipud(input)



[docs]
def split_with_sizes_copy(input, split_sizes, dim=0, *, out=None):
    if out is not None:
        return _C.split_with_sizes_copy(self=input, split_sizes=split_sizes, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(split_with_sizes_copy, (input, split_sizes, dim), {})
        if _captured is not None:
            return _captured
    return _C.split_with_sizes_copy(self=input, split_sizes=split_sizes, dim=dim)



[docs]
def unsafe_split_with_sizes(input, split_sizes, dim=0):
    if _capturing():
        _captured = _capture_call(unsafe_split_with_sizes, (input, split_sizes, dim), {})
        if _captured is not None:
            return _captured
    if isinstance(split_sizes, int) and not isinstance(split_sizes, bool):
        split_sizes = [split_sizes]
    return _C.unsafe_split_with_sizes(input, split_sizes, dim)



[docs]
def detach_copy(input):
    if _capturing():
        _captured = _capture_call(detach_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.detach_copy(input)



[docs]
def detach_(input):
    if _capturing():
        _captured = _capture_call(detach_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.detach_(input)



[docs]
def resize_as_(input, other, memory_format=None):
    if _capturing():
        _captured = _capture_call(resize_as_, (input, other, memory_format), {})
        if _captured is not None:
            return _captured
    return _C.resize_as_(input, other, memory_format=memory_format)



[docs]
def gru_cell(input, hx, w_ih, w_hh, b_ih=None, b_hh=None):
    if _capturing():
        _captured = _capture_call(gru_cell, (input, hx, w_ih, w_hh, b_ih, b_hh), {})
        if _captured is not None:
            return _captured
    return _C.gru_cell(input, hx, w_ih, w_hh, b_ih, b_hh)



[docs]
def cdist(x1, x2, p=2, compute_mode=None):
    if _capturing():
        _captured = _capture_call(cdist, (x1, x2, p, compute_mode), {})
        if _captured is not None:
            return _captured
    return _C.cdist(x1, x2, p, compute_mode=compute_mode)



[docs]
def xlogy(input, other, *, out=None):
    if out is not None:
        return _C.xlogy(input, other, out=out)
    if _capturing():
        _captured = _capture_call(xlogy, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.xlogy(input, other)



[docs]
def xlogy_(input, other):
    if _capturing():
        _captured = _capture_call(xlogy_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.xlogy_(input, other)



[docs]
def xlog1py(input, other):
    if _capturing():
        _captured = _capture_call(xlog1py, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.xlog1py(input, other)



[docs]
def xlog1py_(input, other):
    if _capturing():
        _captured = _capture_call(xlog1py_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.xlog1py_(input, other)



[docs]
def ldexp(input, other, *, out=None):
    if out is not None:
        return _C.ldexp(input, other, out=out)
    if _capturing():
        _captured = _capture_call(ldexp, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.ldexp(input, other)



[docs]
def ldexp_(input, other):
    if _capturing():
        _captured = _capture_call(ldexp_, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.ldexp_(input, other)



[docs]
def fmax(input, other, *, out=None):
    if out is not None:
        return _C.fmax(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(fmax, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.fmax(self=input, other=other)



[docs]
def fmin(input, other, *, out=None):
    if out is not None:
        return _C.fmin(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(fmin, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.fmin(self=input, other=other)



[docs]
def float_power(input, exponent, *, out=None):
    if out is not None:
        return _C.float_power(input, exponent, out=out)
    if _capturing():
        _captured = _capture_call(float_power, (input, exponent), {})
        if _captured is not None:
            return _captured
    return _C.float_power(input, exponent)



[docs]
def mvlgamma(input, p, *, out=None):
    if out is not None:
        return _C.mvlgamma(self=input, p=p, out=out)
    if _capturing():
        _captured = _capture_call(mvlgamma, (input, p), {})
        if _captured is not None:
            return _captured
    return _C.mvlgamma(self=input, p=p)



[docs]
def conj_physical(input, *, out=None):
    if out is not None:
        return _C.conj_physical(self=input, out=out)
    if _capturing():
        _captured = _capture_call(conj_physical, (input,), {})
        if _captured is not None:
            return _captured
    return _C.conj_physical(self=input)



[docs]
def conj_physical_(input):
    if _capturing():
        _captured = _capture_call(conj_physical_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.conj_physical_(input)



[docs]
def negative_(input):
    if _capturing():
        _captured = _capture_call(negative_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.negative_(input)



[docs]
def range(start, end, step=1, *, dtype=None, device=None, out=None):
    if out is not None:
        return _C.range(start, end, step, dtype=dtype, device=device, out=out)
    if _capturing():
        _captured = _capture_call(range, (start, end, step), {'dtype': dtype, 'device': device})
        if _captured is not None:
            return _captured
    return _C.range(start, end, step, dtype=dtype, device=device)



[docs]
def is_signed(input):
    if _capturing():
        _captured = _capture_call(is_signed, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_signed(input)



[docs]
def nonzero_static(input, *, size=None, fill_value=-1, out=None):
    if out is not None:
        return _C.nonzero_static(self=input, size=size, fill_value=fill_value, out=out)
    if _capturing():
        _captured = _capture_call(nonzero_static, (input,), {'size': size, 'fill_value': fill_value})
        if _captured is not None:
            return _captured
    return _C.nonzero_static(self=input, size=size, fill_value=fill_value)



[docs]
def frexp(input, *, out=None):
    if out is not None:
        return _C.frexp(input, out=out)
    if _capturing():
        _captured = _capture_call(frexp, (input,), {})
        if _captured is not None:
            return _captured
    return _C.frexp(input)



[docs]
def igamma(input, other, *, out=None):
    if out is not None:
        return _C.igamma(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(igamma, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.igamma(self=input, other=other)



[docs]
def igammac(input, other, *, out=None):
    if out is not None:
        return _C.igammac(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(igammac, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.igammac(self=input, other=other)



[docs]
def empty_strided(size, stride, dtype=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(empty_strided, (size, stride, dtype, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if dtype is None:
            dtype = DType.undefined
    return _C.empty_strided(size, stride, dtype=dtype, device=_ensure_device(device), pin_memory=pin_memory)


def _cast_Byte(input, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_cast_Byte, (input, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._cast_Byte(input, non_blocking)

def _cast_Char(input, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_cast_Char, (input, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._cast_Char(input, non_blocking)

def _cast_Double(input, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_cast_Double, (input, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._cast_Double(input, non_blocking)

def _cast_Float(input, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_cast_Float, (input, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._cast_Float(input, non_blocking)

def _cast_Int(input, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_cast_Int, (input, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._cast_Int(input, non_blocking)

def _cast_Long(input, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_cast_Long, (input, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._cast_Long(input, non_blocking)

def _cast_Short(input, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_cast_Short, (input, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._cast_Short(input, non_blocking)

def _cast_Half(input, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_cast_Half, (input, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._cast_Half(input, non_blocking)

def _backward(input, inputs, gradient=None, retain_graph=None, create_graph=False):
    if _capturing():
        _captured = _capture_call(_backward, (input, inputs, gradient, retain_graph, create_graph), {})
        if _captured is not None:
            return _captured
    return input._backward(inputs=inputs, gradient=gradient, retain_graph=retain_graph, create_graph=create_graph)


[docs]
def set_data(input, new_data):
    if _capturing():
        _captured = _capture_call(set_data, (input, new_data), {})
        if _captured is not None:
            return _captured
    return input.set_data(new_data=new_data)



[docs]
def data(input):
    if _capturing():
        _captured = _capture_call(data, (input,), {})
        if _captured is not None:
            return _captured
    return input.data()



[docs]
def is_leaf(input):
    if _capturing():
        _captured = _capture_call(is_leaf, (input,), {})
        if _captured is not None:
            return _captured
    return input.is_leaf()



[docs]
def output_nr(input):
    if _capturing():
        _captured = _capture_call(output_nr, (input,), {})
        if _captured is not None:
            return _captured
    return input.output_nr()


def _version(input):
    if _capturing():
        _captured = _capture_call(_version, (input,), {})
        if _captured is not None:
            return _captured
    return input._version()


[docs]
def requires_grad_(input, requires_grad=True):
    return input.requires_grad_(requires_grad=requires_grad)



[docs]
def retain_grad(input):
    if _capturing():
        _captured = _capture_call(retain_grad, (input,), {})
        if _captured is not None:
            return _captured
    return input.retain_grad()



[docs]
def retains_grad(input):
    if _capturing():
        _captured = _capture_call(retains_grad, (input,), {})
        if _captured is not None:
            return _captured
    return input.retains_grad()


def _fw_primal(input, level):
    if _capturing():
        _captured = _capture_call(_fw_primal, (input, level), {})
        if _captured is not None:
            return _captured
    return input._fw_primal(level=level)

def _make_dual(primal, tangent, level):
    if _capturing():
        _captured = _capture_call(_make_dual, (primal, tangent, level), {})
        if _captured is not None:
            return _captured
    return _C._make_dual(primal, tangent, level)

def _unpack_dual(dual, level):
    if _capturing():
        _captured = _capture_call(_unpack_dual, (dual, level), {})
        if _captured is not None:
            return _captured
    return _C._unpack_dual(dual, level)

def _new_zeros_with_same_feature_meta(input, other, self_num_batch_dims=0):
    if _capturing():
        _captured = _capture_call(_new_zeros_with_same_feature_meta, (input, other, self_num_batch_dims), {})
        if _captured is not None:
            return _captured
    return _C._new_zeros_with_same_feature_meta(input, other, self_num_batch_dims=self_num_batch_dims)

def _has_same_storage_numel(input, other):
    if _capturing():
        _captured = _capture_call(_has_same_storage_numel, (input, other), {})
        if _captured is not None:
            return _captured
    return _C._has_same_storage_numel(input, other)

def _assert_async(input):
    if _capturing():
        _captured = _capture_call(_assert_async, (input,), {})
        if _captured is not None:
            return _captured
    return _C._assert_async(input)

def _assert_scalar(input, assert_msg):
    if _capturing():
        _captured = _capture_call(_assert_scalar, (input, assert_msg), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, (tensorplay.Scalar, tensorplay.Tensor)):
        input = tensorplay.Scalar(input)
    return _C._assert_scalar(input, assert_msg)

def _functional_assert_scalar(input, assert_msg, dep_token):
    if _capturing():
        _captured = _capture_call(_functional_assert_scalar, (input, assert_msg, dep_token), {})
        if _captured is not None:
            return _captured
    if not isinstance(input, (tensorplay.Scalar, tensorplay.Tensor)):
        input = tensorplay.Scalar(input)
    return _C._functional_assert_scalar(input, assert_msg, dep_token)

def _functional_assert_async(input, assert_msg, dep_token):
    if _capturing():
        _captured = _capture_call(_functional_assert_async, (input, assert_msg, dep_token), {})
        if _captured is not None:
            return _captured
    return _C._functional_assert_async(input, assert_msg, dep_token)

def _assert_tensor_metadata(a, size=None, stride=None, dtype=None, device=None, layout=None):
    if _capturing():
        _captured = _capture_call(_assert_tensor_metadata, (a, size, stride, dtype, device, layout), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C._assert_tensor_metadata(a, size, stride, dtype, device=_ensure_device(device), layout=layout)

def _print(s):
    if _capturing():
        _captured = _capture_call(_print, (s,), {})
        if _captured is not None:
            return _captured
    return _C._print(s)


[docs]
def sym_constrain_range(size, min=None, max=None):
    if _capturing():
        _captured = _capture_call(sym_constrain_range, (size, min, max), {})
        if _captured is not None:
            return _captured
    if not isinstance(size, (tensorplay.Scalar, tensorplay.Tensor)):
        size = tensorplay.Scalar(size)
    return _C.sym_constrain_range(size, min=min, max=max)



[docs]
def sym_constrain_range_for_size(size, min=None, max=None):
    if _capturing():
        _captured = _capture_call(sym_constrain_range_for_size, (size, min, max), {})
        if _captured is not None:
            return _captured
    if not isinstance(size, (tensorplay.Scalar, tensorplay.Tensor)):
        size = tensorplay.Scalar(size)
    return _C.sym_constrain_range_for_size(size, min=min, max=max)


def _functional_sym_constrain_range(size, min, max, dep_token):
    if _capturing():
        _captured = _capture_call(_functional_sym_constrain_range, (size, min, max, dep_token), {})
        if _captured is not None:
            return _captured
    if not isinstance(size, (tensorplay.Scalar, tensorplay.Tensor)):
        size = tensorplay.Scalar(size)
    return _C._functional_sym_constrain_range(size, min, max, dep_token)

def _functional_sym_constrain_range_for_size(size, min, max, dep_token):
    if _capturing():
        _captured = _capture_call(_functional_sym_constrain_range_for_size, (size, min, max, dep_token), {})
        if _captured is not None:
            return _captured
    if not isinstance(size, (tensorplay.Scalar, tensorplay.Tensor)):
        size = tensorplay.Scalar(size)
    return _C._functional_sym_constrain_range_for_size(size, min, max, dep_token)

def _make_dep_token(dtype=None, layout=None, device=None, pin_memory=None, memory_format=None):
    if _capturing():
        _captured = _capture_call(_make_dep_token, (dtype, layout, device, pin_memory, memory_format), {})
        if _captured is not None:
            return _captured
    if dtype is None:
            dtype = DType.undefined
    return _C._make_dep_token(dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory, memory_format=memory_format)

def _use_cudnn_ctc_loss(log_probs, targets, input_lengths, target_lengths, blank):
    if _capturing():
        _captured = _capture_call(_use_cudnn_ctc_loss, (log_probs, targets, input_lengths, target_lengths, blank), {})
        if _captured is not None:
            return _captured
    if isinstance(input_lengths, int) and not isinstance(input_lengths, bool):
        input_lengths = [input_lengths]
    if isinstance(target_lengths, int) and not isinstance(target_lengths, bool):
        target_lengths = [target_lengths]
    return _C._use_cudnn_ctc_loss(log_probs, targets, input_lengths, target_lengths, blank)

def _cudnn_ctc_loss(log_probs, targets, input_lengths, target_lengths, blank, deterministic, zero_infinity):
    if _capturing():
        _captured = _capture_call(_cudnn_ctc_loss, (log_probs, targets, input_lengths, target_lengths, blank, deterministic, zero_infinity), {})
        if _captured is not None:
            return _captured
    if isinstance(input_lengths, int) and not isinstance(input_lengths, bool):
        input_lengths = [input_lengths]
    if isinstance(target_lengths, int) and not isinstance(target_lengths, bool):
        target_lengths = [target_lengths]
    return _C._cudnn_ctc_loss(log_probs, targets, input_lengths, target_lengths, blank, deterministic, zero_infinity)

def _use_cudnn_rnn_flatten_weight():
    if _capturing():
        _captured = _capture_call(_use_cudnn_rnn_flatten_weight, (), {})
        if _captured is not None:
            return _captured
    return _C._use_cudnn_rnn_flatten_weight()

def _cudnn_rnn_flatten_weight(weight_arr, weight_stride0, input_size, mode, hidden_size, proj_size, num_layers, batch_first, bidirectional):
    if _capturing():
        _captured = _capture_call(_cudnn_rnn_flatten_weight, (weight_arr, weight_stride0, input_size, mode, hidden_size, proj_size, num_layers, batch_first, bidirectional), {})
        if _captured is not None:
            return _captured
    return _C._cudnn_rnn_flatten_weight(weight_arr, weight_stride0, input_size, mode, hidden_size, proj_size, num_layers, batch_first, bidirectional)

def _cudnn_rnn(input, weight, weight_stride0, weight_buf, hx, cx, mode, hidden_size, proj_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state):
    if _capturing():
        _captured = _capture_call(_cudnn_rnn, (input, weight, weight_stride0, weight_buf, hx, cx, mode, hidden_size, proj_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state), {})
        if _captured is not None:
            return _captured
    if isinstance(batch_sizes, int) and not isinstance(batch_sizes, bool):
        batch_sizes = [batch_sizes]
    return _C._cudnn_rnn(input, weight, weight_stride0, weight_buf, hx, cx, mode, hidden_size, proj_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state)

def _cudnn_rnn_backward(input, weight, weight_stride0, weight_buf, hx, cx, output, grad_output, grad_hy, grad_cy, mode, hidden_size, proj_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state, reserve, output_mask):
    if _capturing():
        _captured = _capture_call(_cudnn_rnn_backward, (input, weight, weight_stride0, weight_buf, hx, cx, output, grad_output, grad_hy, grad_cy, mode, hidden_size, proj_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state, reserve, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(batch_sizes, int) and not isinstance(batch_sizes, bool):
        batch_sizes = [batch_sizes]
    return _C._cudnn_rnn_backward(input, weight, weight_stride0, weight_buf, hx, cx, output, grad_output, grad_hy, grad_cy, mode, hidden_size, proj_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state, reserve, output_mask)

def _cudnn_init_dropout_state(dropout, train, dropout_seed, dtype=None, layout=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(_cudnn_init_dropout_state, (dropout, train, dropout_seed, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if dtype is None:
            dtype = DType.undefined
    return _C._cudnn_init_dropout_state(dropout, train, dropout_seed, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)

def _debug_has_internal_overlap(input):
    if _capturing():
        _captured = _capture_call(_debug_has_internal_overlap, (input,), {})
        if _captured is not None:
            return _captured
    return _C._debug_has_internal_overlap(input)

def _fused_dropout(input, p, generator=None):
    if _capturing():
        _captured = _capture_call(_fused_dropout, (input, p, generator), {})
        if _captured is not None:
            return _captured
    return _C._fused_dropout(input, p, generator)

def _masked_scale(input, mask, scale):
    if _capturing():
        _captured = _capture_call(_masked_scale, (input, mask, scale), {})
        if _captured is not None:
            return _captured
    return _C._masked_scale(input, mask, scale)

def _sobol_engine_draw(quasi, n, sobolstate, dimension, num_generated, dtype):
    if _capturing():
        _captured = _capture_call(_sobol_engine_draw, (quasi, n, sobolstate, dimension, num_generated, dtype), {})
        if _captured is not None:
            return _captured
    return _C._sobol_engine_draw(quasi, n, sobolstate, dimension, num_generated, dtype)

def _sobol_engine_ff_(input, n, sobolstate, dimension, num_generated):
    if _capturing():
        _captured = _capture_call(_sobol_engine_ff_, (input, n, sobolstate, dimension, num_generated), {})
        if _captured is not None:
            return _captured
    return _C._sobol_engine_ff_(input, n, sobolstate, dimension, num_generated)

def _sobol_engine_scramble_(input, ltm, dimension):
    if _capturing():
        _captured = _capture_call(_sobol_engine_scramble_, (input, ltm, dimension), {})
        if _captured is not None:
            return _captured
    return _C._sobol_engine_scramble_(input, ltm, dimension)

def _sobol_engine_initialize_state_(input, dimension):
    if _capturing():
        _captured = _capture_call(_sobol_engine_initialize_state_, (input, dimension), {})
        if _captured is not None:
            return _captured
    return _C._sobol_engine_initialize_state_(input, dimension)

def _reshape_from_tensor(input, shape):
    if _capturing():
        _captured = _capture_call(_reshape_from_tensor, (input, shape), {})
        if _captured is not None:
            return _captured
    return _C._reshape_from_tensor(input, shape)

def _shape_as_tensor(input):
    if _capturing():
        _captured = _capture_call(_shape_as_tensor, (input,), {})
        if _captured is not None:
            return _captured
    return _C._shape_as_tensor(input)

def chalf(input, memory_format=None):
    if _capturing():
        _captured = _capture_call(chalf, (input, memory_format), {})
        if _captured is not None:
            return _captured
    return input.chalf(memory_format=memory_format)

def _conj(input):
    if _capturing():
        _captured = _capture_call(_conj, (input,), {})
        if _captured is not None:
            return _captured
    return _C._conj(input)

def _conj_physical(input):
    if _capturing():
        _captured = _capture_call(_conj_physical, (input,), {})
        if _captured is not None:
            return _captured
    return _C._conj_physical(input)

def _neg_view(input):
    if _capturing():
        _captured = _capture_call(_neg_view, (input,), {})
        if _captured is not None:
            return _captured
    return _C._neg_view(input)

def _add_relu(input, other, *, alpha=1, out=None):
    if out is not None:
        return _C._add_relu(input, other, alpha=alpha, out=out)
    if _capturing():
        _captured = _capture_call(_add_relu, (input, other), {'alpha': alpha})
        if _captured is not None:
            return _captured
    return _C._add_relu(input, other, alpha=alpha)

def _add_relu_(input, other, alpha=1):
    if _capturing():
        _captured = _capture_call(_add_relu_, (input, other, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C._add_relu_(input, other, alpha=alpha)


[docs]
def affine_grid_generator(theta, size, align_corners):
    if _capturing():
        _captured = _capture_call(affine_grid_generator, (theta, size, align_corners), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C.affine_grid_generator(theta, size, align_corners)


def affine_grid_generator_backward(grad, size, align_corners):
    if _capturing():
        _captured = _capture_call(affine_grid_generator_backward, (grad, size, align_corners), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C.affine_grid_generator_backward(grad, size, align_corners)

def _is_all_true(input):
    if _capturing():
        _captured = _capture_call(_is_all_true, (input,), {})
        if _captured is not None:
            return _captured
    return _C._is_all_true(input)

def _is_any_true(input):
    if _capturing():
        _captured = _capture_call(_is_any_true, (input,), {})
        if _captured is not None:
            return _captured
    return _C._is_any_true(input)

def _test_check_tensor(input):
    if _capturing():
        _captured = _capture_call(_test_check_tensor, (input,), {})
        if _captured is not None:
            return _captured
    return _C._test_check_tensor(input)

def _test_functorch_fallback(input, other):
    if _capturing():
        _captured = _capture_call(_test_functorch_fallback, (input, other), {})
        if _captured is not None:
            return _captured
    return _C._test_functorch_fallback(input, other)

def _dim_arange(like, dim):
    if _capturing():
        _captured = _capture_call(_dim_arange, (like, dim), {})
        if _captured is not None:
            return _captured
    return _C._dim_arange(like, dim)


[docs]
def as_strided(input, size, stride, storage_offset=None):
    if _capturing():
        _captured = _capture_call(as_strided, (input, size, stride, storage_offset), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C.as_strided(input, size, stride, storage_offset)



[docs]
def as_strided_(input, size, stride, storage_offset=None):
    if _capturing():
        _captured = _capture_call(as_strided_, (input, size, stride, storage_offset), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C.as_strided_(input, size, stride, storage_offset)



[docs]
def baddbmm_(input, batch1, batch2, beta=1, alpha=1):
    return input.baddbmm_(batch1=batch1, batch2=batch2, beta=beta, alpha=alpha)



[docs]
def quantized_batch_norm(input, weight, bias, mean, var, eps, output_scale, output_zero_point):
    if _capturing():
        _captured = _capture_call(quantized_batch_norm, (input, weight, bias, mean, var, eps, output_scale, output_zero_point), {})
        if _captured is not None:
            return _captured
    return _C.quantized_batch_norm(input, weight, bias, mean, var, eps, output_scale, output_zero_point)


def _batch_norm_impl_index(input, weight, bias, running_mean, running_var, training, momentum, eps, cudnn_enabled):
    if _capturing():
        _captured = _capture_call(_batch_norm_impl_index, (input, weight, bias, running_mean, running_var, training, momentum, eps, cudnn_enabled), {})
        if _captured is not None:
            return _captured
    return _C._batch_norm_impl_index(input, weight, bias, running_mean, running_var, training, momentum, eps, cudnn_enabled)

def _batch_norm_impl_index_backward(impl_index, input, grad_output, weight, running_mean, running_var, save_mean, save_var_transform, train, eps, output_mask, reservedSpace):
    if _capturing():
        _captured = _capture_call(_batch_norm_impl_index_backward, (impl_index, input, grad_output, weight, running_mean, running_var, save_mean, save_var_transform, train, eps, output_mask, reservedSpace), {})
        if _captured is not None:
            return _captured
    return _C._batch_norm_impl_index_backward(impl_index, input, grad_output, weight, running_mean, running_var, save_mean, save_var_transform, train, eps, output_mask, reservedSpace)


[docs]
def copysign_(input, other):
    return input.copysign_(other=other)


def _lazy_clone(input):
    if _capturing():
        _captured = _capture_call(_lazy_clone, (input,), {})
        if _captured is not None:
            return _captured
    return _C._lazy_clone(input)

def _sparse_broadcast_to(input, size):
    if _capturing():
        _captured = _capture_call(_sparse_broadcast_to, (input, size), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._sparse_broadcast_to(input, size)


[docs]
def cudnn_is_acceptable(input):
    if _capturing():
        _captured = _capture_call(cudnn_is_acceptable, (input,), {})
        if _captured is not None:
            return _captured
    return _C.cudnn_is_acceptable(input)


def _convolution(input, weight, bias, stride, padding, dilation, transposed, output_padding, groups, benchmark, deterministic, cudnn_enabled, allow_tf32):
    if _capturing():
        _captured = _capture_call(_convolution, (input, weight, bias, stride, padding, dilation, transposed, output_padding, groups, benchmark, deterministic, cudnn_enabled, allow_tf32), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    return _C._convolution(input, weight, bias, stride, padding, dilation, transposed, output_padding, groups, benchmark, deterministic, cudnn_enabled, allow_tf32)

def _convolution_mode(input, weight, bias, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(_convolution_mode, (input, weight, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C._convolution_mode(input, weight, bias, stride, padding, dilation, groups)

def _convolution_double_backward(ggI, ggW, ggb, gO, weight, input, stride, padding, dilation, transposed, output_padding, groups, output_mask):
    if _capturing():
        _captured = _capture_call(_convolution_double_backward, (ggI, ggW, ggb, gO, weight, input, stride, padding, dilation, transposed, output_padding, groups, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    return _C._convolution_double_backward(ggI, ggW, ggb, gO, weight, input, stride, padding, dilation, transposed, output_padding, groups, output_mask)

def conv_tbc_backward(input, input1, weight, bias, pad):
    if _capturing():
        _captured = _capture_call(conv_tbc_backward, (input, input1, weight, bias, pad), {})
        if _captured is not None:
            return _captured
    return _C.conv_tbc_backward(input, input1, weight, bias, pad)


[docs]
def copy(input, src, non_blocking=False):
    if _capturing():
        _captured = _capture_call(copy, (input, src, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C.copy(input, src, non_blocking)


def _copy_from(input, dst, non_blocking=False):
    if _capturing():
        _captured = _capture_call(_copy_from, (input, dst, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C._copy_from(input, dst, non_blocking)

def _copy_from_and_resize(input, dst):
    if _capturing():
        _captured = _capture_call(_copy_from_and_resize, (input, dst), {})
        if _captured is not None:
            return _captured
    return _C._copy_from_and_resize(input, dst)


[docs]
def cudnn_affine_grid_generator(theta, N, C, H, W):
    if _capturing():
        _captured = _capture_call(cudnn_affine_grid_generator, (theta, N, C, H, W), {})
        if _captured is not None:
            return _captured
    return _C.cudnn_affine_grid_generator(theta, N, C, H, W)


def cudnn_affine_grid_generator_backward(grad, N, C, H, W):
    if _capturing():
        _captured = _capture_call(cudnn_affine_grid_generator_backward, (grad, N, C, H, W), {})
        if _captured is not None:
            return _captured
    return _C.cudnn_affine_grid_generator_backward(grad, N, C, H, W)


[docs]
def cudnn_batch_norm(input, weight, bias, running_mean, running_var, training, exponential_average_factor, epsilon, *, out=None):
    if out is not None:
        return _C.cudnn_batch_norm(input=input, weight=weight, bias=bias, running_mean=running_mean, running_var=running_var, training=training, exponential_average_factor=exponential_average_factor, epsilon=epsilon, out=out)
    if _capturing():
        _captured = _capture_call(cudnn_batch_norm, (input, weight, bias, running_mean, running_var, training, exponential_average_factor, epsilon), {})
        if _captured is not None:
            return _captured
    return _C.cudnn_batch_norm(input=input, weight=weight, bias=bias, running_mean=running_mean, running_var=running_var, training=training, exponential_average_factor=exponential_average_factor, epsilon=epsilon)


def cudnn_batch_norm_backward(input, grad_output, weight, running_mean, running_var, save_mean, save_var, epsilon, reserveSpace):
    if _capturing():
        _captured = _capture_call(cudnn_batch_norm_backward, (input, grad_output, weight, running_mean, running_var, save_mean, save_var, epsilon, reserveSpace), {})
        if _captured is not None:
            return _captured
    return _C.cudnn_batch_norm_backward(input, grad_output, weight, running_mean, running_var, save_mean, save_var, epsilon, reserveSpace)


[docs]
def cudnn_convolution(input, weight, padding, stride, dilation, groups, benchmark, deterministic, allow_tf32, *, out=None):
    if out is not None:
        return _C.cudnn_convolution(self=input, weight=weight, padding=padding, stride=stride, dilation=dilation, groups=groups, benchmark=benchmark, deterministic=deterministic, allow_tf32=allow_tf32, out=out)
    if _capturing():
        _captured = _capture_call(cudnn_convolution, (input, weight, padding, stride, dilation, groups, benchmark, deterministic, allow_tf32), {})
        if _captured is not None:
            return _captured
    return _C.cudnn_convolution(self=input, weight=weight, padding=padding, stride=stride, dilation=dilation, groups=groups, benchmark=benchmark, deterministic=deterministic, allow_tf32=allow_tf32)



[docs]
def cudnn_convolution_transpose(input, weight, padding, output_padding, stride, dilation, groups, benchmark, deterministic, allow_tf32):
    if _capturing():
        _captured = _capture_call(cudnn_convolution_transpose, (input, weight, padding, output_padding, stride, dilation, groups, benchmark, deterministic, allow_tf32), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.cudnn_convolution_transpose(input, weight, padding, output_padding, stride, dilation, groups, benchmark, deterministic, allow_tf32)


def _mps_convolution_transpose(input, weight, padding, output_padding, stride, dilation, groups):
    if _capturing():
        _captured = _capture_call(_mps_convolution_transpose, (input, weight, padding, output_padding, stride, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C._mps_convolution_transpose(input, weight, padding, output_padding, stride, dilation, groups)

def mps_convolution_transpose_backward(input, grad_output, weight, padding, output_padding, stride, dilation, groups, output_mask):
    if _capturing():
        _captured = _capture_call(mps_convolution_transpose_backward, (input, grad_output, weight, padding, output_padding, stride, dilation, groups, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.mps_convolution_transpose_backward(input, grad_output, weight, padding, output_padding, stride, dilation, groups, output_mask)


[docs]
def cudnn_convolution_relu(input, weight, bias, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(cudnn_convolution_relu, (input, weight, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.cudnn_convolution_relu(input, weight, bias, stride, padding, dilation, groups)



[docs]
def cudnn_convolution_add_relu(input, weight, z, alpha, bias, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(cudnn_convolution_add_relu, (input, weight, z, alpha, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if alpha is not None and not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.cudnn_convolution_add_relu(input, weight, z, alpha, bias, stride, padding, dilation, groups)



[docs]
def cudnn_grid_sampler(input, grid):
    if _capturing():
        _captured = _capture_call(cudnn_grid_sampler, (input, grid), {})
        if _captured is not None:
            return _captured
    return _C.cudnn_grid_sampler(input, grid)


def cudnn_grid_sampler_backward(input, grid, grad_output):
    if _capturing():
        _captured = _capture_call(cudnn_grid_sampler_backward, (input, grid, grad_output), {})
        if _captured is not None:
            return _captured
    return _C.cudnn_grid_sampler_backward(input, grid, grad_output)

def _cummax_helper(input, values, indices, dim):
    if _capturing():
        _captured = _capture_call(_cummax_helper, (input, values, indices, dim), {})
        if _captured is not None:
            return _captured
    return _C._cummax_helper(input, values, indices, dim)

def _cummin_helper(input, values, indices, dim):
    if _capturing():
        _captured = _capture_call(_cummin_helper, (input, values, indices, dim), {})
        if _captured is not None:
            return _captured
    return _C._cummin_helper(input, values, indices, dim)

def cummaxmin_backward(grad, input, indices, dim):
    if _capturing():
        _captured = _capture_call(cummaxmin_backward, (grad, input, indices, dim), {})
        if _captured is not None:
            return _captured
    return _C.cummaxmin_backward(grad, input, indices, dim)

def cumprod_backward(grad, input, dim, output):
    if _capturing():
        _captured = _capture_call(cumprod_backward, (grad, input, dim, output), {})
        if _captured is not None:
            return _captured
    return _C.cumprod_backward(grad, input, dim, output)


[docs]
def ctc_loss(log_probs, targets, input_lengths, target_lengths, blank=0, reduction=1, zero_infinity=False):
    if _capturing():
        _captured = _capture_call(ctc_loss, (log_probs, targets, input_lengths, target_lengths, blank, reduction, zero_infinity), {})
        if _captured is not None:
            return _captured
    if isinstance(input_lengths, int) and not isinstance(input_lengths, bool):
        input_lengths = [input_lengths]
    if isinstance(target_lengths, int) and not isinstance(target_lengths, bool):
        target_lengths = [target_lengths]
    return _C.ctc_loss(log_probs, targets, input_lengths, target_lengths, blank, reduction, zero_infinity)



[docs]
def fill_diagonal_(input, fill_value, wrap=False):
    return input.fill_diagonal_(fill_value=fill_value, wrap=wrap)



[docs]
def divide_(input, other, rounding_mode=None):
    if _capturing():
        _captured = _capture_call(divide_, (input, other), {'rounding_mode': rounding_mode})
        if _captured is not None:
            return _captured
    if not isinstance(input, tensorplay.Tensor):
        input = tensorplay.as_tensor(input)
    if rounding_mode is None:
        return input.divide_(other=other)
    return input.divide_(other=other, rounding_mode=rounding_mode)



[docs]
def true_divide_(input, other):
    return input.true_divide_(other=other)


def embedding_backward(grad, indices, num_weights, padding_idx, scale_grad_by_freq, sparse):
    if _capturing():
        _captured = _capture_call(embedding_backward, (grad, indices, num_weights, padding_idx, scale_grad_by_freq, sparse), {})
        if _captured is not None:
            return _captured
    return _C.embedding_backward(grad, indices, num_weights, padding_idx, scale_grad_by_freq, sparse)


[docs]
def embedding_renorm_(input, indices, max_norm, norm_type):
    if _capturing():
        _captured = _capture_call(embedding_renorm_, (input, indices, max_norm, norm_type), {})
        if _captured is not None:
            return _captured
    return _C.embedding_renorm_(input, indices, max_norm, norm_type)


def embedding_sparse_backward(grad, indices, num_weights, padding_idx, scale_grad_by_freq):
    if _capturing():
        _captured = _capture_call(embedding_sparse_backward, (grad, indices, num_weights, padding_idx, scale_grad_by_freq), {})
        if _captured is not None:
            return _captured
    return _C.embedding_sparse_backward(grad, indices, num_weights, padding_idx, scale_grad_by_freq)

def _rowwise_prune(weight, mask, compressed_indices_dtype):
    if _capturing():
        _captured = _capture_call(_rowwise_prune, (weight, mask, compressed_indices_dtype), {})
        if _captured is not None:
            return _captured
    return _C._rowwise_prune(weight, mask, compressed_indices_dtype)


[docs]
def embedding_bag(input, indices=None, offsets=None, scale_grad_by_freq=False, mode=0, sparse=False, per_sample_weights=None, include_last_offset=False, padding_idx=None):
    if _capturing():
        _captured = _capture_call(embedding_bag, (input, indices, offsets, scale_grad_by_freq, mode, sparse, per_sample_weights, include_last_offset, padding_idx), {})
        if _captured is not None:
            return _captured
    if padding_idx is None:
        return _C.embedding_bag(input, indices, offsets, scale_grad_by_freq, mode, sparse, per_sample_weights, include_last_offset)
    return _C.embedding_bag(input, indices, offsets, scale_grad_by_freq, mode, sparse, per_sample_weights, include_last_offset, padding_idx)


def _embedding_bag_backward(grad, indices, offsets, offset2bag, bag_size, maximum_indices, num_weights, scale_grad_by_freq, mode, sparse, per_sample_weights, padding_idx=-1):
    if _capturing():
        _captured = _capture_call(_embedding_bag_backward, (grad, indices, offsets, offset2bag, bag_size, maximum_indices, num_weights, scale_grad_by_freq, mode, sparse, per_sample_weights, padding_idx), {})
        if _captured is not None:
            return _captured
    return _C._embedding_bag_backward(grad, indices, offsets, offset2bag, bag_size, maximum_indices, num_weights, scale_grad_by_freq, mode, sparse, per_sample_weights, padding_idx)

def _embedding_bag_sparse_backward(grad, indices, offsets, offset2bag, bag_size, num_weights, scale_grad_by_freq, mode, per_sample_weights, padding_idx=-1):
    if _capturing():
        _captured = _capture_call(_embedding_bag_sparse_backward, (grad, indices, offsets, offset2bag, bag_size, num_weights, scale_grad_by_freq, mode, per_sample_weights, padding_idx), {})
        if _captured is not None:
            return _captured
    return _C._embedding_bag_sparse_backward(grad, indices, offsets, offset2bag, bag_size, num_weights, scale_grad_by_freq, mode, per_sample_weights, padding_idx)


[docs]
def empty_permuted(size, physical_layout, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(empty_permuted, (size, physical_layout, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(physical_layout, int) and not isinstance(physical_layout, bool):
        physical_layout = [physical_layout]
    if dtype is None:
            dtype = DType.undefined
    return _C.empty_permuted(size, physical_layout, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)



[docs]
def new_empty(input, size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(new_empty, (input, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    return input.new_empty(size=size, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory)



[docs]
def new_empty_strided(input, size, stride, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(new_empty_strided, (input, size, stride, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    return input.new_empty_strided(size=size, stride=stride, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory)



[docs]
def new_full(input, size, fill_value, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(new_full, (input, size, fill_value, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    return input.new_full(size=size, fill_value=fill_value, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory)



[docs]
def new_zeros(input, size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(new_zeros, (input, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    return input.new_zeros(size=size, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory)



[docs]
def new_ones(input, size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(new_ones, (input, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    return input.new_ones(size=size, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory)


def _empty_affine_quantized(size, dtype=None, layout=None, device=None, pin_memory=None, scale=1, zero_point=0, memory_format=tensorplay.contiguous_format):
    if _capturing():
        _captured = _capture_call(_empty_affine_quantized, (size, dtype, layout, device, pin_memory, scale, zero_point, memory_format), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if dtype is None:
            dtype = DType.undefined
    return _C._empty_affine_quantized(size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory, scale=scale, zero_point=zero_point, memory_format=memory_format)

def _empty_per_channel_affine_quantized(size, scales, zero_points, axis, dtype=None, layout=None, device=None, pin_memory=None, memory_format=tensorplay.contiguous_format):
    if _capturing():
        _captured = _capture_call(_empty_per_channel_affine_quantized, (size, scales, zero_points, axis, dtype, layout, device, pin_memory, memory_format), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if dtype is None:
            dtype = DType.undefined
    return _C._empty_per_channel_affine_quantized(size, scales=scales, zero_points=zero_points, axis=axis, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory, memory_format=memory_format)

def _resize_output_(input, size, device):
    if _capturing():
        _captured = _capture_call(_resize_output_, (input, size, device), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._resize_output_(input, size, _ensure_device(device))


[docs]
def empty_quantized(size, qtensor, dtype=None, layout=None, device=None, pin_memory=None, memory_format=None):
    if _capturing():
        _captured = _capture_call(empty_quantized, (size, qtensor, dtype, layout, device, pin_memory, memory_format), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if dtype is None:
            dtype = DType.undefined
    return _C.empty_quantized(size, qtensor, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory, memory_format=memory_format)



[docs]
def floor_divide_(input, other):
    return input.floor_divide_(other=other)



[docs]
def from_file(filename, shared=None, size=0, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(from_file, (filename, shared, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if dtype is None:
            dtype = DType.undefined
    return _C.from_file(filename, shared, size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)



[docs]
def grid_sampler(input, grid, interpolation_mode, padding_mode, align_corners):
    if _capturing():
        _captured = _capture_call(grid_sampler, (input, grid, interpolation_mode, padding_mode, align_corners), {})
        if _captured is not None:
            return _captured
    return _C.grid_sampler(input, grid, interpolation_mode, padding_mode, align_corners)


def _grid_sampler_2d_cpu_fallback(input, grid, interpolation_mode, padding_mode, align_corners):
    if _capturing():
        _captured = _capture_call(_grid_sampler_2d_cpu_fallback, (input, grid, interpolation_mode, padding_mode, align_corners), {})
        if _captured is not None:
            return _captured
    return _C._grid_sampler_2d_cpu_fallback(input, grid, interpolation_mode, padding_mode, align_corners)

def _grid_sampler_2d_cpu_fallback_backward(grad_output, input, grid, interpolation_mode, padding_mode, align_corners):
    if _capturing():
        _captured = _capture_call(_grid_sampler_2d_cpu_fallback_backward, (grad_output, input, grid, interpolation_mode, padding_mode, align_corners), {})
        if _captured is not None:
            return _captured
    return _C._grid_sampler_2d_cpu_fallback_backward(grad_output, input, grid, interpolation_mode, padding_mode, align_corners)


[docs]
def native_group_norm(input, weight, bias, N, C, HxW, group, eps):
    if _capturing():
        _captured = _capture_call(native_group_norm, (input, weight, bias, N, C, HxW, group, eps), {})
        if _captured is not None:
            return _captured
    return _C.native_group_norm(input, weight, bias, N, C, HxW, group, eps)


def native_group_norm_backward(grad_out, input, mean, rstd, weight, N, C, HxW, group, output_mask):
    if _capturing():
        _captured = _capture_call(native_group_norm_backward, (grad_out, input, mean, rstd, weight, N, C, HxW, group, output_mask), {})
        if _captured is not None:
            return _captured
    return _C.native_group_norm_backward(grad_out, input, mean, rstd, weight, N, C, HxW, group, output_mask)

def _fft_r2c(input, dim, normalization, onesided, *, out=None):
    if out is not None:
        return _C._fft_r2c(self=input, dim=dim, normalization=normalization, onesided=onesided, out=out)
    if _capturing():
        _captured = _capture_call(_fft_r2c, (input, dim, normalization, onesided), {})
        if _captured is not None:
            return _captured
    return _C._fft_r2c(self=input, dim=dim, normalization=normalization, onesided=onesided)

def _fft_c2r(input, dim, normalization, last_dim_size, *, out=None):
    if out is not None:
        return _C._fft_c2r(self=input, dim=dim, normalization=normalization, last_dim_size=last_dim_size, out=out)
    if _capturing():
        _captured = _capture_call(_fft_c2r, (input, dim, normalization, last_dim_size), {})
        if _captured is not None:
            return _captured
    return _C._fft_c2r(self=input, dim=dim, normalization=normalization, last_dim_size=last_dim_size)

def _fft_c2c(input, dim, normalization, forward, *, out=None):
    if out is not None:
        return _C._fft_c2c(self=input, dim=dim, normalization=normalization, forward=forward, out=out)
    if _capturing():
        _captured = _capture_call(_fft_c2c, (input, dim, normalization, forward), {})
        if _captured is not None:
            return _captured
    return _C._fft_c2c(self=input, dim=dim, normalization=normalization, forward=forward)

def _validate_compressed_sparse_indices(is_crow, compressed_idx, plain_idx, cdim, dim, nnz):
    if _capturing():
        _captured = _capture_call(_validate_compressed_sparse_indices, (is_crow, compressed_idx, plain_idx, cdim, dim, nnz), {})
        if _captured is not None:
            return _captured
    return _C._validate_compressed_sparse_indices(is_crow, compressed_idx, plain_idx, cdim, dim, nnz)


[docs]
def index(input, indices, *, out=None):
    if out is not None:
        return _C.index(self=input, indices=indices, out=out)
    if _capturing():
        _captured = _capture_call(index, (input, indices), {})
        if _captured is not None:
            return _captured
    return _C.index(self=input, indices=indices)


def _unsafe_index(input, indices):
    if _capturing():
        _captured = _capture_call(_unsafe_index, (input, indices), {})
        if _captured is not None:
            return _captured
    return _C._unsafe_index(input, indices)

def _unsafe_masked_index(input, mask, indices, fill):
    if _capturing():
        _captured = _capture_call(_unsafe_masked_index, (input, mask, indices, fill), {})
        if _captured is not None:
            return _captured
    if not isinstance(fill, (tensorplay.Scalar, tensorplay.Tensor)):
        fill = tensorplay.Scalar(fill)
    return _C._unsafe_masked_index(input, mask, indices, fill)

def _unsafe_masked_index_put_accumulate(input, mask, indices, values):
    if _capturing():
        _captured = _capture_call(_unsafe_masked_index_put_accumulate, (input, mask, indices, values), {})
        if _captured is not None:
            return _captured
    return _C._unsafe_masked_index_put_accumulate(input, mask, indices, values)

def _unsafe_index_put(input, indices, values, accumulate=False):
    if _capturing():
        _captured = _capture_call(_unsafe_index_put, (input, indices, values, accumulate), {})
        if _captured is not None:
            return _captured
    return _C._unsafe_index_put(input, indices, values, accumulate)

def _index_put_impl_(input, indices, values, accumulate=False, unsafe=False):
    if _capturing():
        _captured = _capture_call(_index_put_impl_, (input, indices, values, accumulate, unsafe), {})
        if _captured is not None:
            return _captured
    return _C._index_put_impl_(input, indices, values, accumulate, unsafe)


[docs]
def is_distributed(input):
    if _capturing():
        _captured = _capture_call(is_distributed, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_distributed(input)



[docs]
def is_floating_point(input):
    if _capturing():
        _captured = _capture_call(is_floating_point, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_floating_point(input)


def _is_zerotensor(input):
    if _capturing():
        _captured = _capture_call(_is_zerotensor, (input,), {})
        if _captured is not None:
            return _captured
    return _C._is_zerotensor(input)


[docs]
def is_inference(input):
    if _capturing():
        _captured = _capture_call(is_inference, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_inference(input)



[docs]
def numel(input):
    if _capturing():
        _captured = _capture_call(numel, (input,), {})
        if _captured is not None:
            return _captured
    return input.numel()



[docs]
def dim(input):
    if _capturing():
        _captured = _capture_call(dim, (input,), {})
        if _captured is not None:
            return _captured
    return input.dim()



[docs]
def storage_offset(input):
    if _capturing():
        _captured = _capture_call(storage_offset, (input,), {})
        if _captured is not None:
            return _captured
    return input.storage_offset()



[docs]
def is_contiguous(input):
    if _capturing():
        _captured = _capture_call(is_contiguous, (input,), {})
        if _captured is not None:
            return _captured
    return input.is_contiguous()



[docs]
def native_layer_norm(input, normalized_shape, weight, bias, eps):
    if _capturing():
        _captured = _capture_call(native_layer_norm, (input, normalized_shape, weight, bias, eps), {})
        if _captured is not None:
            return _captured
    if isinstance(normalized_shape, int) and not isinstance(normalized_shape, bool):
        normalized_shape = [normalized_shape]
    return _C.native_layer_norm(input, normalized_shape, weight, bias, eps)


def native_layer_norm_backward(grad_out, input, normalized_shape, mean, rstd, weight, bias, output_mask):
    if _capturing():
        _captured = _capture_call(native_layer_norm_backward, (grad_out, input, normalized_shape, mean, rstd, weight, bias, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(normalized_shape, int) and not isinstance(normalized_shape, bool):
        normalized_shape = [normalized_shape]
    return _C.native_layer_norm_backward(grad_out, input, normalized_shape, mean, rstd, weight, bias, output_mask)

def _fused_rms_norm(input, normalized_shape, weight, eps):
    if _capturing():
        _captured = _capture_call(_fused_rms_norm, (input, normalized_shape, weight, eps), {})
        if _captured is not None:
            return _captured
    if isinstance(normalized_shape, int) and not isinstance(normalized_shape, bool):
        normalized_shape = [normalized_shape]
    return _C._fused_rms_norm(input, normalized_shape, weight, eps)

def _fused_rms_norm_backward(grad_out, input, normalized_shape, rstd, weight, output_mask):
    if _capturing():
        _captured = _capture_call(_fused_rms_norm_backward, (grad_out, input, normalized_shape, rstd, weight, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(normalized_shape, int) and not isinstance(normalized_shape, bool):
        normalized_shape = [normalized_shape]
    return _C._fused_rms_norm_backward(grad_out, input, normalized_shape, rstd, weight, output_mask)

def linear_backward(input, grad_output, weight, output_mask):
    if _capturing():
        _captured = _capture_call(linear_backward, (input, grad_output, weight, output_mask), {})
        if _captured is not None:
            return _captured
    return _C.linear_backward(input, grad_output, weight, output_mask)


[docs]
def mkldnn_linear(input, weight, bias=None):
    if _capturing():
        _captured = _capture_call(mkldnn_linear, (input, weight, bias), {})
        if _captured is not None:
            return _captured
    return _C.mkldnn_linear(input, weight, bias)



[docs]
def mkldnn_linear_backward_input(input_size, grad_output, weight):
    if _capturing():
        _captured = _capture_call(mkldnn_linear_backward_input, (input_size, grad_output, weight), {})
        if _captured is not None:
            return _captured
    if isinstance(input_size, int) and not isinstance(input_size, bool):
        input_size = [input_size]
    return _C.mkldnn_linear_backward_input(input_size, grad_output, weight)



[docs]
def mkldnn_linear_backward_weights(grad_output, input, weight, bias_defined):
    if _capturing():
        _captured = _capture_call(mkldnn_linear_backward_weights, (grad_output, input, weight, bias_defined), {})
        if _captured is not None:
            return _captured
    return _C.mkldnn_linear_backward_weights(grad_output, input, weight, bias_defined)


def mkldnn_linear_backward(input, grad_output, weight, output_mask):
    if _capturing():
        _captured = _capture_call(mkldnn_linear_backward, (input, grad_output, weight, output_mask), {})
        if _captured is not None:
            return _captured
    return _C.mkldnn_linear_backward(input, grad_output, weight, output_mask)

def _cslt_compress(input):
    if _capturing():
        _captured = _capture_call(_cslt_compress, (input,), {})
        if _captured is not None:
            return _captured
    return _C._cslt_compress(input)

def _cslt_sparse_mm(compressed_A, dense_B, bias=None, alpha=None, out_dtype=None, transpose_result=False, alg_id=0, split_k=1, split_k_mode=-1):
    if _capturing():
        _captured = _capture_call(_cslt_sparse_mm, (compressed_A, dense_B, bias, alpha, out_dtype, transpose_result, alg_id, split_k, split_k_mode), {})
        if _captured is not None:
            return _captured
    return _C._cslt_sparse_mm(compressed_A, dense_B, bias, alpha, out_dtype, transpose_result, alg_id, split_k, split_k_mode)

def _cslt_sparse_mm_search(compressed_A, dense_B, bias=None, alpha=None, out_dtype=None, transpose_result=False):
    if _capturing():
        _captured = _capture_call(_cslt_sparse_mm_search, (compressed_A, dense_B, bias, alpha, out_dtype, transpose_result), {})
        if _captured is not None:
            return _captured
    return _C._cslt_sparse_mm_search(compressed_A, dense_B, bias, alpha, out_dtype, transpose_result)

def _sparse_semi_structured_tile(input, algorithm='', use_cutlass=True):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_tile, (input, algorithm, use_cutlass), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_tile(input, algorithm, use_cutlass)

def _sparse_semi_structured_apply(input, thread_masks):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_apply, (input, thread_masks), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_apply(input, thread_masks)

def _sparse_semi_structured_apply_dense(input, thread_masks):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_apply_dense, (input, thread_masks), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_apply_dense(input, thread_masks)

def _sparse_semi_structured_linear(input, weight, meta, bias=None, activation=None, out_dtype=None):
    if _capturing():
        _captured = _capture_call(_sparse_semi_structured_linear, (input, weight, meta, bias, activation, out_dtype), {})
        if _captured is not None:
            return _captured
    return _C._sparse_semi_structured_linear(input, weight, meta, bias=bias, activation=activation, out_dtype=out_dtype)

def _mixed_dtypes_linear(input, weight, scale, bias=None, activation=None):
    if _capturing():
        _captured = _capture_call(_mixed_dtypes_linear, (input, weight, scale, bias, activation), {})
        if _captured is not None:
            return _captured
    return _C._mixed_dtypes_linear(input, weight, scale, bias=bias, activation=activation)


[docs]
def fbgemm_linear_int8_weight_fp32_activation(input, weight, packed, col_offsets, weight_scale, weight_zero_point, bias):
    if _capturing():
        _captured = _capture_call(fbgemm_linear_int8_weight_fp32_activation, (input, weight, packed, col_offsets, weight_scale, weight_zero_point, bias), {})
        if _captured is not None:
            return _captured
    if not isinstance(weight_scale, (tensorplay.Scalar, tensorplay.Tensor)):
        weight_scale = tensorplay.Scalar(weight_scale)
    if not isinstance(weight_zero_point, (tensorplay.Scalar, tensorplay.Tensor)):
        weight_zero_point = tensorplay.Scalar(weight_zero_point)
    return _C.fbgemm_linear_int8_weight_fp32_activation(input, weight, packed, col_offsets, weight_scale, weight_zero_point, bias)



[docs]
def fbgemm_linear_int8_weight(input, weight, packed, col_offsets, weight_scale, weight_zero_point, bias):
    if _capturing():
        _captured = _capture_call(fbgemm_linear_int8_weight, (input, weight, packed, col_offsets, weight_scale, weight_zero_point, bias), {})
        if _captured is not None:
            return _captured
    if not isinstance(weight_scale, (tensorplay.Scalar, tensorplay.Tensor)):
        weight_scale = tensorplay.Scalar(weight_scale)
    if not isinstance(weight_zero_point, (tensorplay.Scalar, tensorplay.Tensor)):
        weight_zero_point = tensorplay.Scalar(weight_zero_point)
    return _C.fbgemm_linear_int8_weight(input, weight, packed, col_offsets, weight_scale, weight_zero_point, bias)



[docs]
def fbgemm_linear_quantize_weight(input):
    if _capturing():
        _captured = _capture_call(fbgemm_linear_quantize_weight, (input,), {})
        if _captured is not None:
            return _captured
    return _C.fbgemm_linear_quantize_weight(input)



[docs]
def fbgemm_pack_gemm_matrix_fp16(input):
    if _capturing():
        _captured = _capture_call(fbgemm_pack_gemm_matrix_fp16, (input,), {})
        if _captured is not None:
            return _captured
    return _C.fbgemm_pack_gemm_matrix_fp16(input)


def _wrapped_linear_prepack(weight, weight_scale, weight_zero_point, bias):
    if _capturing():
        _captured = _capture_call(_wrapped_linear_prepack, (weight, weight_scale, weight_zero_point, bias), {})
        if _captured is not None:
            return _captured
    return _C._wrapped_linear_prepack(weight, weight_scale, weight_zero_point, bias)

def _wrapped_quantized_linear_prepacked(input, input_scale, input_zero_point, packed_weight, output_scale, output_zero_point, out_channel):
    if _capturing():
        _captured = _capture_call(_wrapped_quantized_linear_prepacked, (input, input_scale, input_zero_point, packed_weight, output_scale, output_zero_point, out_channel), {})
        if _captured is not None:
            return _captured
    return _C._wrapped_quantized_linear_prepacked(input, input_scale, input_zero_point, packed_weight, output_scale, output_zero_point, out_channel)


[docs]
def fbgemm_linear_fp16_weight_fp32_activation(input, packed_weight, bias, *, out=None):
    if out is not None:
        return _C.fbgemm_linear_fp16_weight_fp32_activation(input=input, packed_weight=packed_weight, bias=bias, out=out)
    if _capturing():
        _captured = _capture_call(fbgemm_linear_fp16_weight_fp32_activation, (input, packed_weight, bias), {})
        if _captured is not None:
            return _captured
    return _C.fbgemm_linear_fp16_weight_fp32_activation(input=input, packed_weight=packed_weight, bias=bias)



[docs]
def fbgemm_linear_fp16_weight(input, packed_weight, bias, *, out=None):
    if out is not None:
        return _C.fbgemm_linear_fp16_weight(input=input, packed_weight=packed_weight, bias=bias, out=out)
    if _capturing():
        _captured = _capture_call(fbgemm_linear_fp16_weight, (input, packed_weight, bias), {})
        if _captured is not None:
            return _captured
    return _C.fbgemm_linear_fp16_weight(input=input, packed_weight=packed_weight, bias=bias)



[docs]
def fbgemm_pack_quantized_matrix(input, K=None, N=None):
    if _capturing():
        _captured = _capture_call(fbgemm_pack_quantized_matrix, (input, K, N), {})
        if _captured is not None:
            return _captured
    if K is None:
        return _C.fbgemm_pack_quantized_matrix(input)
    return _C.fbgemm_pack_quantized_matrix(input, K, N)


def _log_softmax(input, dim, half_to_float, *, out=None):
    if out is not None:
        return _C._log_softmax(self=input, dim=dim, half_to_float=half_to_float, out=out)
    if _capturing():
        _captured = _capture_call(_log_softmax, (input, dim, half_to_float), {})
        if _captured is not None:
            return _captured
    return _C._log_softmax(self=input, dim=dim, half_to_float=half_to_float)

def _log_softmax_backward_data(grad_output, output, dim, input_dtype, *, out=None):
    if out is not None:
        return _C._log_softmax_backward_data(grad_output=grad_output, output=output, dim=dim, input_dtype=input_dtype, out=out)
    if _capturing():
        _captured = _capture_call(_log_softmax_backward_data, (grad_output, output, dim, input_dtype), {})
        if _captured is not None:
            return _captured
    return _C._log_softmax_backward_data(grad_output=grad_output, output=output, dim=dim, input_dtype=input_dtype)

def _logcumsumexp(input, dim, *, out=None):
    if out is not None:
        return _C._logcumsumexp(self=input, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(_logcumsumexp, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C._logcumsumexp(self=input, dim=dim)

def matmul_backward(grad, input, other, mask):
    if _capturing():
        _captured = _capture_call(matmul_backward, (grad, input, other, mask), {})
        if _captured is not None:
            return _captured
    return _C.matmul_backward(grad, input, other, mask)


[docs]
def matrix_exp(input):
    if _capturing():
        _captured = _capture_call(matrix_exp, (input,), {})
        if _captured is not None:
            return _captured
    return _C.matrix_exp(input)


def matrix_exp_backward(input, grad):
    if _capturing():
        _captured = _capture_call(matrix_exp_backward, (input, grad), {})
        if _captured is not None:
            return _captured
    return _C.matrix_exp_backward(input, grad)

def _aminmax(input, dim=None, keepdim=False):
    if _capturing():
        _captured = _capture_call(_aminmax, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C._aminmax(input)
    return _C._aminmax(input, dim, keepdim)

def _compute_linear_combination(input, coefficients, *, out=None):
    if out is not None:
        return _C._compute_linear_combination(input=input, coefficients=coefficients, out=out)
    if _capturing():
        _captured = _capture_call(_compute_linear_combination, (input, coefficients), {})
        if _captured is not None:
            return _captured
    return _C._compute_linear_combination(input=input, coefficients=coefficients)

def value_selecting_reduction_backward(grad, dim, indices, sizes, keepdim):
    if _capturing():
        _captured = _capture_call(value_selecting_reduction_backward, (grad, dim, indices, sizes, keepdim), {})
        if _captured is not None:
            return _captured
    if isinstance(sizes, int) and not isinstance(sizes, bool):
        sizes = [sizes]
    return _C.value_selecting_reduction_backward(grad, dim, indices, sizes, keepdim)


[docs]
def mkldnn_max_pool2d(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(mkldnn_max_pool2d, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.mkldnn_max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)


def mkldnn_max_pool2d_backward(grad_output, output, input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(mkldnn_max_pool2d_backward, (grad_output, output, input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.mkldnn_max_pool2d_backward(grad_output, output, input, kernel_size, stride, padding, dilation, ceil_mode)


[docs]
def mkldnn_max_pool3d(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(mkldnn_max_pool3d, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.mkldnn_max_pool3d(input, kernel_size, stride, padding, dilation, ceil_mode)


def mkldnn_max_pool3d_backward(grad_output, output, input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(mkldnn_max_pool3d_backward, (grad_output, output, input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.mkldnn_max_pool3d_backward(grad_output, output, input, kernel_size, stride, padding, dilation, ceil_mode)


[docs]
def quantized_max_pool1d(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(quantized_max_pool1d, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.quantized_max_pool1d(input, kernel_size, stride, padding, dilation, ceil_mode)



[docs]
def quantized_max_pool3d(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False):
    if _capturing():
        _captured = _capture_call(quantized_max_pool3d, (input, kernel_size, stride, padding, dilation, ceil_mode), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.quantized_max_pool3d(input, kernel_size, stride, padding, dilation, ceil_mode)


def _mps_convolution(input, weight, bias, padding, stride, dilation, groups):
    if _capturing():
        _captured = _capture_call(_mps_convolution, (input, weight, bias, padding, stride, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C._mps_convolution(input, weight, bias, padding, stride, dilation, groups)

def mps_convolution_backward(input, grad_output, weight, padding, stride, dilation, groups, output_mask):
    if _capturing():
        _captured = _capture_call(mps_convolution_backward, (input, grad_output, weight, padding, stride, dilation, groups, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.mps_convolution_backward(input, grad_output, weight, padding, stride, dilation, groups, output_mask)


[docs]
def mkldnn_convolution(input, weight, bias, padding, stride, dilation, groups):
    if _capturing():
        _captured = _capture_call(mkldnn_convolution, (input, weight, bias, padding, stride, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.mkldnn_convolution(input, weight, bias, padding, stride, dilation, groups)



[docs]
def mkldnn_rnn_layer(input, weight0, weight1, weight2, weight3, hx_, cx_, reverse, batch_sizes, mode, hidden_size, num_layers, has_biases, bidirectional, batch_first, train):
    if _capturing():
        _captured = _capture_call(mkldnn_rnn_layer, (input, weight0, weight1, weight2, weight3, hx_, cx_, reverse, batch_sizes, mode, hidden_size, num_layers, has_biases, bidirectional, batch_first, train), {})
        if _captured is not None:
            return _captured
    if isinstance(batch_sizes, int) and not isinstance(batch_sizes, bool):
        batch_sizes = [batch_sizes]
    return _C.mkldnn_rnn_layer(input, weight0, weight1, weight2, weight3, hx_, cx_, reverse, batch_sizes, mode, hidden_size, num_layers, has_biases, bidirectional, batch_first, train)


def mkldnn_rnn_layer_backward(input, weight1, weight2, weight3, weight4, hx_, cx_tmp, output, hy_, cy_, grad_output, grad_hy, grad_cy, reverse, mode, hidden_size, num_layers, has_biases, train, bidirectional, batch_sizes, batch_first, workspace):
    if _capturing():
        _captured = _capture_call(mkldnn_rnn_layer_backward, (input, weight1, weight2, weight3, weight4, hx_, cx_tmp, output, hy_, cy_, grad_output, grad_hy, grad_cy, reverse, mode, hidden_size, num_layers, has_biases, train, bidirectional, batch_sizes, batch_first, workspace), {})
        if _captured is not None:
            return _captured
    if isinstance(batch_sizes, int) and not isinstance(batch_sizes, bool):
        batch_sizes = [batch_sizes]
    return _C.mkldnn_rnn_layer_backward(input, weight1, weight2, weight3, weight4, hx_, cx_tmp, output, hy_, cy_, grad_output, grad_hy, grad_cy, reverse, mode, hidden_size, num_layers, has_biases, train, bidirectional, batch_sizes, batch_first, workspace)


[docs]
def miopen_batch_norm(input, weight, bias, running_mean, running_var, training, exponential_average_factor, epsilon):
    if _capturing():
        _captured = _capture_call(miopen_batch_norm, (input, weight, bias, running_mean, running_var, training, exponential_average_factor, epsilon), {})
        if _captured is not None:
            return _captured
    return _C.miopen_batch_norm(input, weight, bias, running_mean, running_var, training, exponential_average_factor, epsilon)


def miopen_batch_norm_backward(input, grad_output, weight, running_mean, running_var, save_mean, save_var, epsilon):
    if _capturing():
        _captured = _capture_call(miopen_batch_norm_backward, (input, grad_output, weight, running_mean, running_var, save_mean, save_var, epsilon), {})
        if _captured is not None:
            return _captured
    return _C.miopen_batch_norm_backward(input, grad_output, weight, running_mean, running_var, save_mean, save_var, epsilon)


[docs]
def miopen_convolution(input, weight, bias, padding, stride, dilation, groups, benchmark, deterministic):
    if _capturing():
        _captured = _capture_call(miopen_convolution, (input, weight, bias, padding, stride, dilation, groups, benchmark, deterministic), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.miopen_convolution(input, weight, bias, padding, stride, dilation, groups, benchmark, deterministic)



[docs]
def miopen_convolution_transpose(input, weight, bias, padding, output_padding, stride, dilation, groups, benchmark, deterministic):
    if _capturing():
        _captured = _capture_call(miopen_convolution_transpose, (input, weight, bias, padding, output_padding, stride, dilation, groups, benchmark, deterministic), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(output_padding, int) and not isinstance(output_padding, bool):
        output_padding = [output_padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.miopen_convolution_transpose(input, weight, bias, padding, output_padding, stride, dilation, groups, benchmark, deterministic)



[docs]
def miopen_depthwise_convolution(input, weight, bias, padding, stride, dilation, groups, benchmark, deterministic):
    if _capturing():
        _captured = _capture_call(miopen_depthwise_convolution, (input, weight, bias, padding, stride, dilation, groups, benchmark, deterministic), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.miopen_depthwise_convolution(input, weight, bias, padding, stride, dilation, groups, benchmark, deterministic)



[docs]
def miopen_convolution_relu(input, weight, bias, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(miopen_convolution_relu, (input, weight, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.miopen_convolution_relu(input, weight, bias, stride, padding, dilation, groups)



[docs]
def miopen_convolution_add_relu(input, weight, z, alpha, bias, stride, padding, dilation, groups):
    if _capturing():
        _captured = _capture_call(miopen_convolution_add_relu, (input, weight, z, alpha, bias, stride, padding, dilation, groups), {})
        if _captured is not None:
            return _captured
    if alpha is not None and not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.miopen_convolution_add_relu(input, weight, z, alpha, bias, stride, padding, dilation, groups)



[docs]
def miopen_rnn(input, weight, weight_stride0, hx, cx, mode, hidden_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state):
    if _capturing():
        _captured = _capture_call(miopen_rnn, (input, weight, weight_stride0, hx, cx, mode, hidden_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state), {})
        if _captured is not None:
            return _captured
    if isinstance(batch_sizes, int) and not isinstance(batch_sizes, bool):
        batch_sizes = [batch_sizes]
    return _C.miopen_rnn(input, weight, weight_stride0, hx, cx, mode, hidden_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state)


def miopen_rnn_backward(input, weight, weight_stride0, weight_buf, hx, cx, output, grad_output, grad_hy, grad_cy, mode, hidden_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state, reserve, output_mask):
    if _capturing():
        _captured = _capture_call(miopen_rnn_backward, (input, weight, weight_stride0, weight_buf, hx, cx, output, grad_output, grad_hy, grad_cy, mode, hidden_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state, reserve, output_mask), {})
        if _captured is not None:
            return _captured
    if isinstance(batch_sizes, int) and not isinstance(batch_sizes, bool):
        batch_sizes = [batch_sizes]
    return _C.miopen_rnn_backward(input, weight, weight_stride0, weight_buf, hx, cx, output, grad_output, grad_hy, grad_cy, mode, hidden_size, num_layers, batch_first, dropout, train, bidirectional, batch_sizes, dropout_state, reserve, output_mask)

def _use_miopen_ctc_loss(log_probs, targets, input_lengths, target_lengths, blank):
    if _capturing():
        _captured = _capture_call(_use_miopen_ctc_loss, (log_probs, targets, input_lengths, target_lengths, blank), {})
        if _captured is not None:
            return _captured
    if isinstance(input_lengths, int) and not isinstance(input_lengths, bool):
        input_lengths = [input_lengths]
    if isinstance(target_lengths, int) and not isinstance(target_lengths, bool):
        target_lengths = [target_lengths]
    return _C._use_miopen_ctc_loss(log_probs, targets, input_lengths, target_lengths, blank)


[docs]
def miopen_ctc_loss(log_probs, targets, input_lengths, target_lengths, blank, deterministic, zero_infinity):
    if _capturing():
        _captured = _capture_call(miopen_ctc_loss, (log_probs, targets, input_lengths, target_lengths, blank, deterministic, zero_infinity), {})
        if _captured is not None:
            return _captured
    if isinstance(input_lengths, int) and not isinstance(input_lengths, bool):
        input_lengths = [input_lengths]
    if isinstance(target_lengths, int) and not isinstance(target_lengths, bool):
        target_lengths = [target_lengths]
    return _C.miopen_ctc_loss(log_probs, targets, input_lengths, target_lengths, blank, deterministic, zero_infinity)


def _int_mm(input, mat2, *, out=None):
    if out is not None:
        return _C._int_mm(self=input, mat2=mat2, out=out)
    if _capturing():
        _captured = _capture_call(_int_mm, (input, mat2), {})
        if _captured is not None:
            return _captured
    return _C._int_mm(self=input, mat2=mat2)

def _convert_weight_to_int4pack(input, innerKTiles):
    if _capturing():
        _captured = _capture_call(_convert_weight_to_int4pack, (input, innerKTiles), {})
        if _captured is not None:
            return _captured
    return _C._convert_weight_to_int4pack(input, innerKTiles)

def _weight_int4pack_mm(input, mat2, qGroupSize, qScaleAndZeros):
    if _capturing():
        _captured = _capture_call(_weight_int4pack_mm, (input, mat2, qGroupSize, qScaleAndZeros), {})
        if _captured is not None:
            return _captured
    return _C._weight_int4pack_mm(input, mat2, qGroupSize, qScaleAndZeros)

def _weight_int4pack_mm_with_scales_and_zeros(input, mat2, qGroupSize, qScale, qZeros):
    if _capturing():
        _captured = _capture_call(_weight_int4pack_mm_with_scales_and_zeros, (input, mat2, qGroupSize, qScale, qZeros), {})
        if _captured is not None:
            return _captured
    return _C._weight_int4pack_mm_with_scales_and_zeros(input, mat2, qGroupSize, qScale, qZeros)

def _convert_weight_to_int4pack_for_cpu(input, innerKTiles):
    if _capturing():
        _captured = _capture_call(_convert_weight_to_int4pack_for_cpu, (input, innerKTiles), {})
        if _captured is not None:
            return _captured
    return _C._convert_weight_to_int4pack_for_cpu(input, innerKTiles)

def _weight_int4pack_mm_for_cpu(input, mat2, qGroupSize, qScaleAndZeros):
    if _capturing():
        _captured = _capture_call(_weight_int4pack_mm_for_cpu, (input, mat2, qGroupSize, qScaleAndZeros), {})
        if _captured is not None:
            return _captured
    return _C._weight_int4pack_mm_for_cpu(input, mat2, qGroupSize, qScaleAndZeros)

def _dyn_quant_pack_4bit_weight(weights, scales_zeros, bias, block_size, in_features, out_features):
    if _capturing():
        _captured = _capture_call(_dyn_quant_pack_4bit_weight, (weights, scales_zeros, bias, block_size, in_features, out_features), {})
        if _captured is not None:
            return _captured
    return _C._dyn_quant_pack_4bit_weight(weights, scales_zeros, bias, block_size, in_features, out_features)

def _dyn_quant_matmul_4bit(inp, packed_weights, block_size, in_features, out_features):
    if _capturing():
        _captured = _capture_call(_dyn_quant_matmul_4bit, (inp, packed_weights, block_size, in_features, out_features), {})
        if _captured is not None:
            return _captured
    return _C._dyn_quant_matmul_4bit(inp, packed_weights, block_size, in_features, out_features)

def _weight_int8pack_mm(input, mat2, scales):
    if _capturing():
        _captured = _capture_call(_weight_int8pack_mm, (input, mat2, scales), {})
        if _captured is not None:
            return _captured
    return _C._weight_int8pack_mm(input, mat2, scales)

def _sparse_mm(sparse, dense):
    if _capturing():
        _captured = _capture_call(_sparse_mm, (sparse, dense), {})
        if _captured is not None:
            return _captured
    return _C._sparse_mm(sparse, dense)

def _sparse_sparse_matmul(input, other):
    if _capturing():
        _captured = _capture_call(_sparse_sparse_matmul, (input, other), {})
        if _captured is not None:
            return _captured
    return _C._sparse_sparse_matmul(input, other)


[docs]
def multiply_(input, other):
    return input.multiply_(other=other)



[docs]
def mvlgamma_(input, p):
    return input.mvlgamma_(p=p)



[docs]
def native_batch_norm(input, weight, bias, running_mean, running_var, training, momentum, eps, *, out=None):
    if out is not None:
        return _C.native_batch_norm(input=input, weight=weight, bias=bias, running_mean=running_mean, running_var=running_var, training=training, momentum=momentum, eps=eps, out=out)
    if _capturing():
        _captured = _capture_call(native_batch_norm, (input, weight, bias, running_mean, running_var, training, momentum, eps), {})
        if _captured is not None:
            return _captured
    return _C.native_batch_norm(input=input, weight=weight, bias=bias, running_mean=running_mean, running_var=running_var, training=training, momentum=momentum, eps=eps)


def _native_batch_norm_legit(input, weight, bias, running_mean, running_var, training, momentum, eps, *, out=None):
    if out is not None:
        return _C._native_batch_norm_legit(input, weight, bias, running_mean, running_var, training, momentum, eps, out=out)
    if _capturing():
        _captured = _capture_call(_native_batch_norm_legit, (input, weight, bias, running_mean, running_var, training, momentum, eps), {})
        if _captured is not None:
            return _captured
    return _C._native_batch_norm_legit(input, weight, bias, running_mean, running_var, training, momentum, eps)

def _native_batch_norm_legit_no_training(input, weight, bias, running_mean, running_var, momentum, eps):
    if _capturing():
        _captured = _capture_call(_native_batch_norm_legit_no_training, (input, weight, bias, running_mean, running_var, momentum, eps), {})
        if _captured is not None:
            return _captured
    return _C._native_batch_norm_legit_no_training(input, weight, bias, running_mean, running_var, momentum, eps)


[docs]
def batch_norm_stats(input, eps):
    if _capturing():
        _captured = _capture_call(batch_norm_stats, (input, eps), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm_stats(input, eps)



[docs]
def batch_norm_elemt(input, weight, bias, mean, invstd, eps, *, out=None):
    if out is not None:
        return _C.batch_norm_elemt(input=input, weight=weight, bias=bias, mean=mean, invstd=invstd, eps=eps, out=out)
    if _capturing():
        _captured = _capture_call(batch_norm_elemt, (input, weight, bias, mean, invstd, eps), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm_elemt(input=input, weight=weight, bias=bias, mean=mean, invstd=invstd, eps=eps)



[docs]
def batch_norm_gather_stats(input, mean, invstd, running_mean, running_var, momentum, eps, count):
    if _capturing():
        _captured = _capture_call(batch_norm_gather_stats, (input, mean, invstd, running_mean, running_var, momentum, eps, count), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm_gather_stats(input, mean, invstd, running_mean, running_var, momentum, eps, count)



[docs]
def batch_norm_gather_stats_with_counts(input, mean, invstd, running_mean, running_var, momentum, eps, counts):
    if _capturing():
        _captured = _capture_call(batch_norm_gather_stats_with_counts, (input, mean, invstd, running_mean, running_var, momentum, eps, counts), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm_gather_stats_with_counts(input, mean, invstd, running_mean, running_var, momentum, eps, counts)


def native_batch_norm_backward(grad_out, input, weight, running_mean, running_var, save_mean, save_invstd, train, eps, output_mask):
    if _capturing():
        _captured = _capture_call(native_batch_norm_backward, (grad_out, input, weight, running_mean, running_var, save_mean, save_invstd, train, eps, output_mask), {})
        if _captured is not None:
            return _captured
    return _C.native_batch_norm_backward(grad_out, input, weight, running_mean, running_var, save_mean, save_invstd, train, eps, output_mask)


[docs]
def batch_norm_backward_reduce(grad_out, input, mean, invstd, weight, input_g, weight_g, bias_g):
    if _capturing():
        _captured = _capture_call(batch_norm_backward_reduce, (grad_out, input, mean, invstd, weight, input_g, weight_g, bias_g), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm_backward_reduce(grad_out, input, mean, invstd, weight, input_g, weight_g, bias_g)



[docs]
def batch_norm_backward_elemt(grad_out, input, mean, invstd, weight, sum_dy, sum_dy_xmu, count):
    if _capturing():
        _captured = _capture_call(batch_norm_backward_elemt, (grad_out, input, mean, invstd, weight, sum_dy, sum_dy_xmu, count), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm_backward_elemt(grad_out, input, mean, invstd, weight, sum_dy, sum_dy_xmu, count)



[docs]
def batch_norm_update_stats(input, running_mean, running_var, momentum):
    if _capturing():
        _captured = _capture_call(batch_norm_update_stats, (input, running_mean, running_var, momentum), {})
        if _captured is not None:
            return _captured
    return _C.batch_norm_update_stats(input, running_mean, running_var, momentum)



[docs]
def is_vulkan_available():
    if _capturing():
        _captured = _capture_call(is_vulkan_available, (), {})
        if _captured is not None:
            return _captured
    return _C.is_vulkan_available()


def _nnpack_available():
    if _capturing():
        _captured = _capture_call(_nnpack_available, (), {})
        if _captured is not None:
            return _captured
    return _C._nnpack_available()

def _nnpack_spatial_convolution(input, weight, bias, padding, stride=1):
    if _capturing():
        _captured = _capture_call(_nnpack_spatial_convolution, (input, weight, bias, padding, stride), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C._nnpack_spatial_convolution(input, weight, bias, padding, stride)

def _euclidean_dist(x1, x2):
    if _capturing():
        _captured = _capture_call(_euclidean_dist, (x1, x2), {})
        if _captured is not None:
            return _captured
    return _C._euclidean_dist(x1, x2)

def _cdist_forward(x1, x2, p, compute_mode):
    if _capturing():
        _captured = _capture_call(_cdist_forward, (x1, x2, p, compute_mode), {})
        if _captured is not None:
            return _captured
    return _C._cdist_forward(x1, x2, p, compute_mode)

def _cdist_backward(grad_output, x1, x2, p, cdist):
    if _capturing():
        _captured = _capture_call(_cdist_backward, (grad_output, x1, x2, p, cdist), {})
        if _captured is not None:
            return _captured
    return _C._cdist_backward(grad_output, x1, x2, p, cdist)

def _pdist_forward(input, p=2):
    if _capturing():
        _captured = _capture_call(_pdist_forward, (input, p), {})
        if _captured is not None:
            return _captured
    return _C._pdist_forward(input, p)

def _pdist_backward(grad_output, input, p, pdist):
    if _capturing():
        _captured = _capture_call(_pdist_backward, (grad_output, input, p, pdist), {})
        if _captured is not None:
            return _captured
    return _C._pdist_backward(grad_output, input, p, pdist)


[docs]
def numpy_T(input):
    if _capturing():
        _captured = _capture_call(numpy_T, (input,), {})
        if _captured is not None:
            return _captured
    return input.numpy_T()



[docs]
def matrix_H(input):
    if _capturing():
        _captured = _capture_call(matrix_H, (input,), {})
        if _captured is not None:
            return _captured
    return input.matrix_H()



[docs]
def mT(input):
    if _capturing():
        _captured = _capture_call(mT, (input,), {})
        if _captured is not None:
            return _captured
    return input.mT()



[docs]
def mH(input):
    if _capturing():
        _captured = _capture_call(mH, (input,), {})
        if _captured is not None:
            return _captured
    return input.mH()



[docs]
def is_pinned(input, device=None):
    if _capturing():
        _captured = _capture_call(is_pinned, (input, device), {})
        if _captured is not None:
            return _captured
    return input.is_pinned(device=device)



[docs]
def pin_memory(input, device=None):
    if _capturing():
        _captured = _capture_call(pin_memory, (input, device), {})
        if _captured is not None:
            return _captured
    return input.pin_memory(device=device)


def _pin_memory(input, device=None):
    if _capturing():
        _captured = _capture_call(_pin_memory, (input, device), {})
        if _captured is not None:
            return _captured
    return _C._pin_memory(input, _ensure_device(device))


[docs]
def pinverse(input, rcond=1e-15):
    if _capturing():
        _captured = _capture_call(pinverse, (input, rcond), {})
        if _captured is not None:
            return _captured
    return _C.pinverse(input, rcond)



[docs]
def repeat_interleave(input, repeats=None, dim=None, *, output_size=None):
    if _capturing():
        _captured = _capture_call(repeat_interleave, (input, repeats, dim), {'output_size': output_size})
        if _captured is not None:
            return _captured
    if repeats is None:
        return _C.repeat_interleave(input, output_size=output_size)
    return _C.repeat_interleave(input, repeats, dim, output_size=output_size)


def _reshape_copy(input, size):
    if _capturing():
        _captured = _capture_call(_reshape_copy, (input, size), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._reshape_copy(input, size)

def _reshape_alias(input, size, stride):
    if _capturing():
        _captured = _capture_call(_reshape_alias, (input, size, stride), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C._reshape_alias(input, size, stride)

def _mkldnn_reshape(input, shape):
    if _capturing():
        _captured = _capture_call(_mkldnn_reshape, (input, shape), {})
        if _captured is not None:
            return _captured
    if isinstance(shape, int) and not isinstance(shape, bool):
        shape = [shape]
    return _C._mkldnn_reshape(input, shape)

def _prelu_kernel(input, weight):
    if _capturing():
        _captured = _capture_call(_prelu_kernel, (input, weight), {})
        if _captured is not None:
            return _captured
    return _C._prelu_kernel(input, weight)

def _prelu_kernel_backward(grad_output, input, weight):
    if _capturing():
        _captured = _capture_call(_prelu_kernel_backward, (grad_output, input, weight), {})
        if _captured is not None:
            return _captured
    return _C._prelu_kernel_backward(grad_output, input, weight)

def infinitely_differentiable_gelu_backward(grad, input):
    if _capturing():
        _captured = _capture_call(infinitely_differentiable_gelu_backward, (grad, input), {})
        if _captured is not None:
            return _captured
    return _C.infinitely_differentiable_gelu_backward(grad, input)


[docs]
def select(input, dim, index):
    if _capturing():
        _captured = _capture_call(select, (input, dim, index), {})
        if _captured is not None:
            return _captured
    return _C.select(input, dim, index)


def _nested_select_backward(grad_output, input, dim, index):
    if _capturing():
        _captured = _capture_call(_nested_select_backward, (grad_output, input, dim, index), {})
        if _captured is not None:
            return _captured
    return _C._nested_select_backward(grad_output, input, dim, index)


[docs]
def detach(input):
    if _capturing():
        _captured = _capture_call(detach, (input,), {})
        if _captured is not None:
            return _captured
    return _C.detach(input)



[docs]
def size(input, dim):
    if _capturing():
        _captured = _capture_call(size, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.size(input, dim)



[docs]
def sym_size(input, dim):
    if _capturing():
        _captured = _capture_call(sym_size, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.sym_size(input, dim)



[docs]
def sym_is_contiguous(input, memory_format=tensorplay.contiguous_format):
    if _capturing():
        _captured = _capture_call(sym_is_contiguous, (input, memory_format), {})
        if _captured is not None:
            return _captured
    return _C.sym_is_contiguous(input, memory_format)



[docs]
def sym_numel(input):
    if _capturing():
        _captured = _capture_call(sym_numel, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sym_numel(input)



[docs]
def sym_storage_offset(input):
    if _capturing():
        _captured = _capture_call(sym_storage_offset, (input,), {})
        if _captured is not None:
            return _captured
    return _C.sym_storage_offset(input)



[docs]
def slice_inverse(input, src, dim=0, start=None, end=None, step=1):
    if _capturing():
        _captured = _capture_call(slice_inverse, (input, src, dim, start, end, step), {})
        if _captured is not None:
            return _captured
    return _C.slice_inverse(input, src, dim, start, end, step)



[docs]
def as_strided_scatter(input, src, size, stride, storage_offset=None):
    if _capturing():
        _captured = _capture_call(as_strided_scatter, (input, src, size, stride, storage_offset), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C.as_strided_scatter(input, src, size, stride, storage_offset)



[docs]
def smm(input, mat2):
    if _capturing():
        _captured = _capture_call(smm, (input, mat2), {})
        if _captured is not None:
            return _captured
    return _C.smm(input, mat2)


def _softmax(input, dim, half_to_float, *, out=None):
    if out is not None:
        return _C._softmax(self=input, dim=dim, half_to_float=half_to_float, out=out)
    if _capturing():
        _captured = _capture_call(_softmax, (input, dim, half_to_float), {})
        if _captured is not None:
            return _captured
    return _C._softmax(self=input, dim=dim, half_to_float=half_to_float)

def _softmax_backward_data(grad_output, output, dim, input_dtype, *, out=None):
    if out is not None:
        return _C._softmax_backward_data(grad_output=grad_output, output=output, dim=dim, input_dtype=input_dtype, out=out)
    if _capturing():
        _captured = _capture_call(_softmax_backward_data, (grad_output, output, dim, input_dtype), {})
        if _captured is not None:
            return _captured
    return _C._softmax_backward_data(grad_output=grad_output, output=output, dim=dim, input_dtype=input_dtype)


[docs]
def squeeze_(input):
    return input.squeeze_()



[docs]
def sspaddmm(input, mat1, mat2, *, beta=1, alpha=1, out=None):
    if out is not None:
        return _C.sspaddmm(self=input, mat1=mat1, mat2=mat2, beta=beta, alpha=alpha, out=out)
    if _capturing():
        _captured = _capture_call(sspaddmm, (input, mat1, mat2), {'beta': beta, 'alpha': alpha})
        if _captured is not None:
            return _captured
    return _C.sspaddmm(self=input, mat1=mat1, mat2=mat2, beta=beta, alpha=alpha)


def _chunk_cat(tensors, dim, num_chunks, *, out=None):
    if out is not None:
        return _C._chunk_cat(tensors=tensors, dim=dim, num_chunks=num_chunks, out=out)
    if _capturing():
        _captured = _capture_call(_chunk_cat, (tensors, dim, num_chunks), {})
        if _captured is not None:
            return _captured
    return _C._chunk_cat(tensors=tensors, dim=dim, num_chunks=num_chunks)

def _stack(tensors, dim=0, *, out=None):
    if out is not None:
        return _C._stack(tensors=tensors, dim=dim, out=out)
    if _capturing():
        _captured = _capture_call(_stack, (tensors, dim), {})
        if _captured is not None:
            return _captured
    return _C._stack(tensors=tensors, dim=dim)


[docs]
def stride(input, dim):
    if _capturing():
        _captured = _capture_call(stride, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.stride(input, dim)



[docs]
def sym_stride(input, dim):
    if _capturing():
        _captured = _capture_call(sym_stride, (input, dim), {})
        if _captured is not None:
            return _captured
    return _C.sym_stride(input, dim)


def _nested_sum_backward(grad, input, dim, keepdim=False):
    if _capturing():
        _captured = _capture_call(_nested_sum_backward, (grad, input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C._nested_sum_backward(grad, input, dim, keepdim)


[docs]
def hash_tensor(input, dim=[], *, keepdim=False, mode=0, out=None):
    if out is not None:
        return _C.hash_tensor(self=input, dim=dim, keepdim=keepdim, mode=mode, out=out)
    if _capturing():
        _captured = _capture_call(hash_tensor, (input, dim), {'keepdim': keepdim, 'mode': mode})
        if _captured is not None:
            return _captured
    return _C.hash_tensor(self=input, dim=dim, keepdim=keepdim, mode=mode)



[docs]
def sum_to_size(input, size):
    if _capturing():
        _captured = _capture_call(sum_to_size, (input, size), {})
        if _captured is not None:
            return _captured
    return input.sum_to_size(size=size)



[docs]
def t_(input):
    return input.t_()


def tensordot(input, other, dims_self, dims_other, *, out=None):
    if out is not None:
        return _C.tensordot(self=input, other=other, dims_self=dims_self, dims_other=dims_other, out=out)
    if _capturing():
        _captured = _capture_call(tensordot, (input, other, dims_self, dims_other), {})
        if _captured is not None:
            return _captured
    return _C.tensordot(self=input, other=other, dims_self=dims_self, dims_other=dims_other)

def _mkldnn_transpose(input, dim0, dim1):
    if _capturing():
        _captured = _capture_call(_mkldnn_transpose, (input, dim0, dim1), {})
        if _captured is not None:
            return _captured
    return _C._mkldnn_transpose(input, dim0, dim1)


[docs]
def transpose_(input, dim0, dim1):
    return input.transpose_(dim0=dim0, dim1=dim1)


def _mkldnn_transpose_(input, dim0, dim1):
    if _capturing():
        _captured = _capture_call(_mkldnn_transpose_, (input, dim0, dim1), {})
        if _captured is not None:
            return _captured
    return _C._mkldnn_transpose_(input, dim0, dim1)

def _transform_bias_rescale_qkv(qkv, qkv_bias, num_heads):
    if _capturing():
        _captured = _capture_call(_transform_bias_rescale_qkv, (qkv, qkv_bias, num_heads), {})
        if _captured is not None:
            return _captured
    return _C._transform_bias_rescale_qkv(qkv, qkv_bias, num_heads)

def _nested_tensor_from_mask(t, mask, mask_check=True):
    if _capturing():
        _captured = _capture_call(_nested_tensor_from_mask, (t, mask, mask_check), {})
        if _captured is not None:
            return _captured
    return _C._nested_tensor_from_mask(t, mask, mask_check)

def _nested_tensor_from_mask_left_aligned(t, mask):
    if _capturing():
        _captured = _capture_call(_nested_tensor_from_mask_left_aligned, (t, mask), {})
        if _captured is not None:
            return _captured
    return _C._nested_tensor_from_mask_left_aligned(t, mask)

def _nested_from_padded(padded, cpu_nested_shape_example, fuse_transform_0213=False):
    if _capturing():
        _captured = _capture_call(_nested_from_padded, (padded, cpu_nested_shape_example, fuse_transform_0213), {})
        if _captured is not None:
            return _captured
    return _C._nested_from_padded(padded, cpu_nested_shape_example, fuse_transform_0213)

def _nested_tensor_size(input):
    if _capturing():
        _captured = _capture_call(_nested_tensor_size, (input,), {})
        if _captured is not None:
            return _captured
    return input._nested_tensor_size()

def _nested_tensor_strides(input):
    if _capturing():
        _captured = _capture_call(_nested_tensor_strides, (input,), {})
        if _captured is not None:
            return _captured
    return input._nested_tensor_strides()

def _nested_tensor_storage_offsets(input):
    if _capturing():
        _captured = _capture_call(_nested_tensor_storage_offsets, (input,), {})
        if _captured is not None:
            return _captured
    return input._nested_tensor_storage_offsets()

def _nested_from_padded_and_nested_example(padded, nt_example):
    if _capturing():
        _captured = _capture_call(_nested_from_padded_and_nested_example, (padded, nt_example), {})
        if _captured is not None:
            return _captured
    return _C._nested_from_padded_and_nested_example(padded, nt_example)

def _nested_view_from_buffer(input, nested_size, nested_strides, offsets):
    if _capturing():
        _captured = _capture_call(_nested_view_from_buffer, (input, nested_size, nested_strides, offsets), {})
        if _captured is not None:
            return _captured
    return _C._nested_view_from_buffer(input, nested_size, nested_strides, offsets)

def _nested_view_from_buffer_copy(input, nested_size, nested_strides, offsets):
    if _capturing():
        _captured = _capture_call(_nested_view_from_buffer_copy, (input, nested_size, nested_strides, offsets), {})
        if _captured is not None:
            return _captured
    return _C._nested_view_from_buffer_copy(input, nested_size, nested_strides, offsets)

def _nested_view_from_jagged(input, offsets, dummy, lengths=None, ragged_idx=1, min_seqlen=None, max_seqlen=None):
    if _capturing():
        _captured = _capture_call(_nested_view_from_jagged, (input, offsets, dummy, lengths, ragged_idx, min_seqlen, max_seqlen), {})
        if _captured is not None:
            return _captured
    return _C._nested_view_from_jagged(input, offsets, dummy, lengths, ragged_idx, min_seqlen, max_seqlen)

def _nested_view_from_jagged_copy(input, offsets, dummy, lengths=None, ragged_idx=1, min_seqlen=None, max_seqlen=None):
    if _capturing():
        _captured = _capture_call(_nested_view_from_jagged_copy, (input, offsets, dummy, lengths, ragged_idx, min_seqlen, max_seqlen), {})
        if _captured is not None:
            return _captured
    return _C._nested_view_from_jagged_copy(input, offsets, dummy, lengths, ragged_idx, min_seqlen, max_seqlen)

def _nested_get_values(input):
    if _capturing():
        _captured = _capture_call(_nested_get_values, (input,), {})
        if _captured is not None:
            return _captured
    return _C._nested_get_values(input)

def _nested_get_values_copy(input):
    if _capturing():
        _captured = _capture_call(_nested_get_values_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C._nested_get_values_copy(input)

def _nested_get_offsets(input):
    if _capturing():
        _captured = _capture_call(_nested_get_offsets, (input,), {})
        if _captured is not None:
            return _captured
    return _C._nested_get_offsets(input)

def _nested_get_lengths(input):
    if _capturing():
        _captured = _capture_call(_nested_get_lengths, (input,), {})
        if _captured is not None:
            return _captured
    return _C._nested_get_lengths(input)

def _nested_get_ragged_idx(input):
    if _capturing():
        _captured = _capture_call(_nested_get_ragged_idx, (input,), {})
        if _captured is not None:
            return _captured
    return _C._nested_get_ragged_idx(input)

def _nested_get_min_seqlen(input):
    if _capturing():
        _captured = _capture_call(_nested_get_min_seqlen, (input,), {})
        if _captured is not None:
            return _captured
    return _C._nested_get_min_seqlen(input)

def _nested_get_max_seqlen(input):
    if _capturing():
        _captured = _capture_call(_nested_get_max_seqlen, (input,), {})
        if _captured is not None:
            return _captured
    return _C._nested_get_max_seqlen(input)

def _nested_get_jagged_dummy(any):
    if _capturing():
        _captured = _capture_call(_nested_get_jagged_dummy, (any,), {})
        if _captured is not None:
            return _captured
    return _C._nested_get_jagged_dummy(any)

def _nested_compute_contiguous_strides_offsets(nested_size):
    if _capturing():
        _captured = _capture_call(_nested_compute_contiguous_strides_offsets, (nested_size,), {})
        if _captured is not None:
            return _captured
    return _C._nested_compute_contiguous_strides_offsets(nested_size)

def _trilinear(i1, i2, i3, expand1, expand2, expand3, sumdim, unroll_dim=1):
    if _capturing():
        _captured = _capture_call(_trilinear, (i1, i2, i3, expand1, expand2, expand3, sumdim, unroll_dim), {})
        if _captured is not None:
            return _captured
    if isinstance(expand1, int) and not isinstance(expand1, bool):
        expand1 = [expand1]
    if isinstance(expand2, int) and not isinstance(expand2, bool):
        expand2 = [expand2]
    if isinstance(expand3, int) and not isinstance(expand3, bool):
        expand3 = [expand3]
    if isinstance(sumdim, int) and not isinstance(sumdim, bool):
        sumdim = [sumdim]
    return _C._trilinear(i1, i2, i3, expand1, expand2, expand3, sumdim, unroll_dim)


[docs]
def fix_(input):
    if _capturing():
        _captured = _capture_call(fix_, (input,), {})
        if _captured is not None:
            return _captured
    return _C.fix_(input)



[docs]
def type_as(input, other):
    if _capturing():
        _captured = _capture_call(type_as, (input, other), {})
        if _captured is not None:
            return _captured
    return input.type_as(other=other)


def _has_compatible_shallow_copy_type(input, from_):
    if _capturing():
        _captured = _capture_call(_has_compatible_shallow_copy_type, (input, from_), {})
        if _captured is not None:
            return _captured
    return _C._has_compatible_shallow_copy_type(input, from_)

def _unique(input, sorted=True, return_inverse=False):
    if _capturing():
        _captured = _capture_call(_unique, (input, sorted, return_inverse), {})
        if _captured is not None:
            return _captured
    return _C._unique(input, sorted, return_inverse)


[docs]
def unique_dim(input, dim, sorted=True, return_inverse=False, return_counts=False):
    if _capturing():
        _captured = _capture_call(unique_dim, (input, dim, sorted, return_inverse, return_counts), {})
        if _captured is not None:
            return _captured
    return _C.unique_dim(input, dim, sorted, return_inverse, return_counts)



[docs]
def unique_dim_consecutive(input, dim, return_inverse=False, return_counts=False):
    if _capturing():
        _captured = _capture_call(unique_dim_consecutive, (input, dim, return_inverse, return_counts), {})
        if _captured is not None:
            return _captured
    return _C.unique_dim_consecutive(input, dim, return_inverse, return_counts)


def _unique2(input, sorted=True, return_inverse=False, return_counts=False):
    if _capturing():
        _captured = _capture_call(_unique2, (input, sorted, return_inverse, return_counts), {})
        if _captured is not None:
            return _captured
    return _C._unique2(input, sorted, return_inverse, return_counts)

def _unsafe_view(input, size):
    if _capturing():
        _captured = _capture_call(_unsafe_view, (input, size), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._unsafe_view(input, size)


[docs]
def unsqueeze_(input, dim):
    return input.unsqueeze_(dim=dim)



[docs]
def view_as(input, other):
    if _capturing():
        _captured = _capture_call(view_as, (input, other), {})
        if _captured is not None:
            return _captured
    return input.view_as(other=other)



[docs]
def norm_except_dim(v, pow=2, dim=0):
    if _capturing():
        _captured = _capture_call(norm_except_dim, (v, pow, dim), {})
        if _captured is not None:
            return _captured
    return _C.norm_except_dim(v, pow, dim)


def _weight_norm(v, g, dim=0):
    if _capturing():
        _captured = _capture_call(_weight_norm, (v, g, dim), {})
        if _captured is not None:
            return _captured
    return _C._weight_norm(v, g, dim)

def _weight_norm_interface(v, g, dim=0):
    if _capturing():
        _captured = _capture_call(_weight_norm_interface, (v, g, dim), {})
        if _captured is not None:
            return _captured
    return _C._weight_norm_interface(v, g, dim)

def _weight_norm_interface_backward(grad_w, saved_v, saved_g, saved_norms, dim):
    if _capturing():
        _captured = _capture_call(_weight_norm_interface_backward, (grad_w, saved_v, saved_g, saved_norms, dim), {})
        if _captured is not None:
            return _captured
    return _C._weight_norm_interface_backward(grad_w, saved_v, saved_g, saved_norms, dim)

def _weight_norm_differentiable_backward(grad_w, saved_v, saved_g, saved_norms, dim):
    if _capturing():
        _captured = _capture_call(_weight_norm_differentiable_backward, (grad_w, saved_v, saved_g, saved_norms, dim), {})
        if _captured is not None:
            return _captured
    return _C._weight_norm_differentiable_backward(grad_w, saved_v, saved_g, saved_norms, dim)

def _efficientzerotensor(size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(_efficientzerotensor, (size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if dtype is None:
            dtype = DType.undefined
    return _C._efficientzerotensor(size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)

def _standard_gamma_grad(input, output):
    if _capturing():
        _captured = _capture_call(_standard_gamma_grad, (input, output), {})
        if _captured is not None:
            return _captured
    return _C._standard_gamma_grad(input, output)

def _standard_gamma(input, generator=None):
    if _capturing():
        _captured = _capture_call(_standard_gamma, (input, generator), {})
        if _captured is not None:
            return _captured
    return _C._standard_gamma(input, generator)

def _philox_key_split(key, num_splits):
    if _capturing():
        _captured = _capture_call(_philox_key_split, (key, num_splits), {})
        if _captured is not None:
            return _captured
    return _C._philox_key_split(key, num_splits)

def _philox_key_fold_in(key, data):
    if _capturing():
        _captured = _capture_call(_philox_key_fold_in, (key, data), {})
        if _captured is not None:
            return _captured
    return _C._philox_key_fold_in(key, data)

def _philox_normal_(input, key, mean=0, std=1):
    if _capturing():
        _captured = _capture_call(_philox_normal_, (input, key, mean, std), {})
        if _captured is not None:
            return _captured
    return _C._philox_normal_(input, key, mean, std)

def _philox_uniform_(input, key, low=0, high=1):
    if _capturing():
        _captured = _capture_call(_philox_uniform_, (input, key, low, high), {})
        if _captured is not None:
            return _captured
    return _C._philox_uniform_(input, key, low, high)

def _dirichlet_grad(x, alpha, total):
    if _capturing():
        _captured = _capture_call(_dirichlet_grad, (x, alpha, total), {})
        if _captured is not None:
            return _captured
    return _C._dirichlet_grad(x, alpha, total)

def _sample_dirichlet(input, generator=None):
    if _capturing():
        _captured = _capture_call(_sample_dirichlet, (input, generator), {})
        if _captured is not None:
            return _captured
    return _C._sample_dirichlet(input, generator)


[docs]
def binomial(count, prob, generator=None):
    if _capturing():
        _captured = _capture_call(binomial, (count, prob, generator), {})
        if _captured is not None:
            return _captured
    return _C.binomial(count, prob, generator)



[docs]
def native_norm(input, p=2):
    if _capturing():
        _captured = _capture_call(native_norm, (input, p), {})
        if _captured is not None:
            return _captured
    if not isinstance(p, (tensorplay.Scalar, tensorplay.Tensor)):
        p = tensorplay.Scalar(p)
    return _C.native_norm(input, p)


def _batch_norm_with_update(input, weight, bias, running_mean, running_var, momentum, eps, *, out=None):
    if out is not None:
        return _C._batch_norm_with_update(input=input, weight=weight, bias=bias, running_mean=running_mean, running_var=running_var, momentum=momentum, eps=eps, out=out)
    if _capturing():
        _captured = _capture_call(_batch_norm_with_update, (input, weight, bias, running_mean, running_var, momentum, eps), {})
        if _captured is not None:
            return _captured
    return _C._batch_norm_with_update(input=input, weight=weight, bias=bias, running_mean=running_mean, running_var=running_var, momentum=momentum, eps=eps)

def _batch_norm_no_update(input, weight, bias, running_mean, running_var, momentum, eps):
    if _capturing():
        _captured = _capture_call(_batch_norm_no_update, (input, weight, bias, running_mean, running_var, momentum, eps), {})
        if _captured is not None:
            return _captured
    return _C._batch_norm_no_update(input, weight, bias, running_mean, running_var, momentum, eps)

def _sparse_sum(input, dim=None):
    if _capturing():
        _captured = _capture_call(_sparse_sum, (input, dim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C._sparse_sum(input)
    return _C._sparse_sum(input, dim)

def _sparse_sum_backward(grad, input, dim):
    if _capturing():
        _captured = _capture_call(_sparse_sum_backward, (grad, input, dim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C._sparse_sum_backward(grad, input, dim)

def _sparse_csr_sum(input, dim, keepdim=False, dtype=None):
    if _capturing():
        _captured = _capture_call(_sparse_csr_sum, (input, dim, keepdim, dtype), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C._sparse_csr_sum(input, dim, keepdim, dtype=dtype)

def _sparse_csr_prod(input, dim, keepdim=False, dtype=None):
    if _capturing():
        _captured = _capture_call(_sparse_csr_prod, (input, dim, keepdim, dtype), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C._sparse_csr_prod(input, dim, keepdim, dtype=dtype)

def _sparse_softmax(input, dim, dtype=None):
    if _capturing():
        _captured = _capture_call(_sparse_softmax, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C._sparse_softmax(input, dim, dtype)

def _sparse_softmax_backward_data(grad_output, output, dim, input):
    if _capturing():
        _captured = _capture_call(_sparse_softmax_backward_data, (grad_output, output, dim, input), {})
        if _captured is not None:
            return _captured
    return _C._sparse_softmax_backward_data(grad_output, output, dim, input)

def _sparse_log_softmax(input, dim, dtype=None):
    if _capturing():
        _captured = _capture_call(_sparse_log_softmax, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C._sparse_log_softmax(input, dim, dtype)

def _sparse_log_softmax_backward_data(grad_output, output, dim, input):
    if _capturing():
        _captured = _capture_call(_sparse_log_softmax_backward_data, (grad_output, output, dim, input), {})
        if _captured is not None:
            return _captured
    return _C._sparse_log_softmax_backward_data(grad_output, output, dim, input)

def _spdiags(diagonals, offsets, shape, layout=None):
    if _capturing():
        _captured = _capture_call(_spdiags, (diagonals, offsets, shape, layout), {})
        if _captured is not None:
            return _captured
    if isinstance(shape, int) and not isinstance(shape, bool):
        shape = [shape]
    return _C._spdiags(diagonals, offsets, shape, layout)


[docs]
def frobenius_norm(input, dim, keepdim=False, *, out=None):
    if out is not None:
        return _C.frobenius_norm(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(frobenius_norm, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.frobenius_norm(self=input, dim=dim, keepdim=keepdim)



[docs]
def nuclear_norm(input, keepdim=False, dim=None):
    if _capturing():
        _captured = _capture_call(nuclear_norm, (input, keepdim, dim), {})
        if _captured is not None:
            return _captured
    if dim is None:
        return _C.nuclear_norm(input, keepdim)
    return _C.nuclear_norm(input, dim, keepdim)



[docs]
def resize_as_sparse_(input, the_template):
    if _capturing():
        _captured = _capture_call(resize_as_sparse_, (input, the_template), {})
        if _captured is not None:
            return _captured
    return _C.resize_as_sparse_(input, the_template)



[docs]
def subtract_(input, other, alpha=1):
    return input.subtract_(other=other, alpha=alpha)


def _sparse_addmm(input, mat1, mat2, beta=1, alpha=1):
    if _capturing():
        _captured = _capture_call(_sparse_addmm, (input, mat1, mat2, beta, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(beta, (tensorplay.Scalar, tensorplay.Tensor)):
        beta = tensorplay.Scalar(beta)
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C._sparse_addmm(input, mat1, mat2, beta=beta, alpha=alpha)


[docs]
def sparse_sampled_addmm(input, mat1, mat2, *, beta=1, alpha=1, out=None):
    if out is not None:
        return _C.sparse_sampled_addmm(self=input, mat1=mat1, mat2=mat2, beta=beta, alpha=alpha, out=out)
    if _capturing():
        _captured = _capture_call(sparse_sampled_addmm, (input, mat1, mat2), {'beta': beta, 'alpha': alpha})
        if _captured is not None:
            return _captured
    return _C.sparse_sampled_addmm(self=input, mat1=mat1, mat2=mat2, beta=beta, alpha=alpha)


def _sparse_mm_reduce_impl(input, other, reduce):
    if _capturing():
        _captured = _capture_call(_sparse_mm_reduce_impl, (input, other, reduce), {})
        if _captured is not None:
            return _captured
    return _C._sparse_mm_reduce_impl(input, other, reduce)

def _sparse_mm_reduce_impl_backward(input, grad_out, weight, reduce, arg_out, output_mask):
    if _capturing():
        _captured = _capture_call(_sparse_mm_reduce_impl_backward, (input, grad_out, weight, reduce, arg_out, output_mask), {})
        if _captured is not None:
            return _captured
    return _C._sparse_mm_reduce_impl_backward(input, grad_out, weight, reduce, arg_out, output_mask)

def _addmm_activation(input, mat1, mat2, *, beta=1, alpha=1, use_gelu=False, out=None):
    if out is not None:
        return _C._addmm_activation(self=input, mat1=mat1, mat2=mat2, beta=beta, alpha=alpha, use_gelu=use_gelu, out=out)
    if _capturing():
        _captured = _capture_call(_addmm_activation, (input, mat1, mat2), {'beta': beta, 'alpha': alpha, 'use_gelu': use_gelu})
        if _captured is not None:
            return _captured
    return _C._addmm_activation(self=input, mat1=mat1, mat2=mat2, beta=beta, alpha=alpha, use_gelu=use_gelu)

def _scaled_mm(input, mat2, scale_a, scale_b, bias=None, scale_result=None, out_dtype=None, use_fast_accum=False, *, out=None):
    if out is not None:
        return _C._scaled_mm(self=input, mat2=mat2, scale_a=scale_a, scale_b=scale_b, bias=bias, scale_result=scale_result, out_dtype=out_dtype, use_fast_accum=use_fast_accum, out=out)
    if _capturing():
        _captured = _capture_call(_scaled_mm, (input, mat2, scale_a, scale_b, bias, scale_result, out_dtype, use_fast_accum), {})
        if _captured is not None:
            return _captured
    return _C._scaled_mm(self=input, mat2=mat2, scale_a=scale_a, scale_b=scale_b, bias=bias, scale_result=scale_result, out_dtype=out_dtype, use_fast_accum=use_fast_accum)

def _scaled_mm_v2(input, mat2, scale_a, recipe_a, swizzle_a, scale_b, recipe_b, swizzle_b, bias, out_dtype, contraction_dim=[], use_fast_accum=False, *, out=None):
    if out is not None:
        return _C._scaled_mm_v2(self=input, mat2=mat2, scale_a=scale_a, recipe_a=recipe_a, swizzle_a=swizzle_a, scale_b=scale_b, recipe_b=recipe_b, swizzle_b=swizzle_b, bias=bias, out_dtype=out_dtype, contraction_dim=contraction_dim, use_fast_accum=use_fast_accum, out=out)
    if _capturing():
        _captured = _capture_call(_scaled_mm_v2, (input, mat2, scale_a, recipe_a, swizzle_a, scale_b, recipe_b, swizzle_b, bias, out_dtype, contraction_dim, use_fast_accum), {})
        if _captured is not None:
            return _captured
    return _C._scaled_mm_v2(self=input, mat2=mat2, scale_a=scale_a, recipe_a=recipe_a, swizzle_a=swizzle_a, scale_b=scale_b, recipe_b=recipe_b, swizzle_b=swizzle_b, bias=bias, out_dtype=out_dtype, contraction_dim=contraction_dim, use_fast_accum=use_fast_accum)

def _scaled_grouped_mm(input, mat2, scale_a, scale_b, offs=None, bias=None, scale_result=None, out_dtype=None, use_fast_accum=False):
    if _capturing():
        _captured = _capture_call(_scaled_grouped_mm, (input, mat2, scale_a, scale_b, offs, bias, scale_result, out_dtype, use_fast_accum), {})
        if _captured is not None:
            return _captured
    return _C._scaled_grouped_mm(input, mat2, scale_a, scale_b, offs, bias, scale_result, out_dtype, use_fast_accum)

def _scaled_grouped_mm_v2(input, mat2, scale_a, recipe_a, swizzle_a, scale_b, recipe_b, swizzle_b, offs=None, bias=None, out_dtype=None, contraction_dim=[], use_fast_accum=False, *, out=None):
    if out is not None:
        return _C._scaled_grouped_mm_v2(self=input, mat2=mat2, scale_a=scale_a, recipe_a=recipe_a, swizzle_a=swizzle_a, scale_b=scale_b, recipe_b=recipe_b, swizzle_b=swizzle_b, offs=offs, bias=bias, out_dtype=out_dtype, contraction_dim=contraction_dim, use_fast_accum=use_fast_accum, out=out)
    if _capturing():
        _captured = _capture_call(_scaled_grouped_mm_v2, (input, mat2, scale_a, recipe_a, swizzle_a, scale_b, recipe_b, swizzle_b, offs, bias, out_dtype, contraction_dim, use_fast_accum), {})
        if _captured is not None:
            return _captured
    return _C._scaled_grouped_mm_v2(self=input, mat2=mat2, scale_a=scale_a, recipe_a=recipe_a, swizzle_a=swizzle_a, scale_b=scale_b, recipe_b=recipe_b, swizzle_b=swizzle_b, offs=offs, bias=bias, out_dtype=out_dtype, contraction_dim=contraction_dim, use_fast_accum=use_fast_accum)

def _grouped_mm(input, mat2, offs=None, bias=None, out_dtype=None):
    if _capturing():
        _captured = _capture_call(_grouped_mm, (input, mat2, offs, bias, out_dtype), {})
        if _captured is not None:
            return _captured
    return _C._grouped_mm(input, mat2, offs, bias, out_dtype)

def _sparse_compressed_tensor_with_dims(nnz, dense_dim, size, blocksize, index_dtype, dtype=None, layout=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(_sparse_compressed_tensor_with_dims, (nnz, dense_dim, size, blocksize, index_dtype, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(blocksize, int) and not isinstance(blocksize, bool):
        blocksize = [blocksize]
    if dtype is None:
            dtype = DType.undefined
    return _C._sparse_compressed_tensor_with_dims(nnz, dense_dim, size, blocksize, index_dtype, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)


[docs]
def sparse_compressed_tensor(compressed_indices, plain_indices, values, size=None, *, dtype=None, layout=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(sparse_compressed_tensor, (compressed_indices, plain_indices, values, size), {'dtype': dtype, 'layout': layout, 'device': device, 'pin_memory': pin_memory})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    _device = _ensure_device(device)
    if size is None:
        return _C.sparse_compressed_tensor(compressed_indices, plain_indices, values, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)
    return _C.sparse_compressed_tensor(compressed_indices, plain_indices, values, size, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)



[docs]
def sparse_csr_tensor(crow_indices, col_indices, values, size=None, *, dtype=None, layout=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(sparse_csr_tensor, (crow_indices, col_indices, values, size), {'dtype': dtype, 'layout': layout, 'device': device, 'pin_memory': pin_memory})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    _device = _ensure_device(device)
    if size is None:
        return _C.sparse_csr_tensor(crow_indices, col_indices, values, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)
    return _C.sparse_csr_tensor(crow_indices, col_indices, values, size, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)



[docs]
def sparse_csc_tensor(ccol_indices, row_indices, values, size=None, *, dtype=None, layout=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(sparse_csc_tensor, (ccol_indices, row_indices, values, size), {'dtype': dtype, 'layout': layout, 'device': device, 'pin_memory': pin_memory})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    _device = _ensure_device(device)
    if size is None:
        return _C.sparse_csc_tensor(ccol_indices, row_indices, values, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)
    return _C.sparse_csc_tensor(ccol_indices, row_indices, values, size, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)



[docs]
def sparse_bsr_tensor(crow_indices, col_indices, values, size=None, *, dtype=None, layout=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(sparse_bsr_tensor, (crow_indices, col_indices, values, size), {'dtype': dtype, 'layout': layout, 'device': device, 'pin_memory': pin_memory})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    _device = _ensure_device(device)
    if size is None:
        return _C.sparse_bsr_tensor(crow_indices, col_indices, values, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)
    return _C.sparse_bsr_tensor(crow_indices, col_indices, values, size, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)



[docs]
def sparse_bsc_tensor(ccol_indices, row_indices, values, size=None, *, dtype=None, layout=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(sparse_bsc_tensor, (ccol_indices, row_indices, values, size), {'dtype': dtype, 'layout': layout, 'device': device, 'pin_memory': pin_memory})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    _device = _ensure_device(device)
    if size is None:
        return _C.sparse_bsc_tensor(ccol_indices, row_indices, values, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)
    return _C.sparse_bsc_tensor(ccol_indices, row_indices, values, size, dtype=dtype, layout=layout, device=_device, pin_memory=pin_memory)


def _sparse_compressed_tensor_unsafe(compressed_indices, plain_indices, values, size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(_sparse_compressed_tensor_unsafe, (compressed_indices, plain_indices, values, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._sparse_compressed_tensor_unsafe(compressed_indices, plain_indices, values, size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)

def _sparse_csr_tensor_unsafe(crow_indices, col_indices, values, size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(_sparse_csr_tensor_unsafe, (crow_indices, col_indices, values, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._sparse_csr_tensor_unsafe(crow_indices, col_indices, values, size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)

def _sparse_csc_tensor_unsafe(ccol_indices, row_indices, values, size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(_sparse_csc_tensor_unsafe, (ccol_indices, row_indices, values, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._sparse_csc_tensor_unsafe(ccol_indices, row_indices, values, size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)

def _sparse_bsr_tensor_unsafe(crow_indices, col_indices, values, size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(_sparse_bsr_tensor_unsafe, (crow_indices, col_indices, values, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._sparse_bsr_tensor_unsafe(crow_indices, col_indices, values, size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)

def _sparse_bsc_tensor_unsafe(ccol_indices, row_indices, values, size, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(_sparse_bsc_tensor_unsafe, (ccol_indices, row_indices, values, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._sparse_bsc_tensor_unsafe(ccol_indices, row_indices, values, size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)

def _sparse_coo_tensor_unsafe(indices, values, size, dtype=None, layout=None, device=None, pin_memory=None, is_coalesced=None):
    if _capturing():
        _captured = _capture_call(_sparse_coo_tensor_unsafe, (indices, values, size, dtype, layout, device, pin_memory, is_coalesced), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._sparse_coo_tensor_unsafe(indices, values, size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory, is_coalesced=is_coalesced)

def _validate_sparse_coo_tensor_args(indices, values, size, is_coalesced=None, check_pinning=None):
    if _capturing():
        _captured = _capture_call(_validate_sparse_coo_tensor_args, (indices, values, size, is_coalesced, check_pinning), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._validate_sparse_coo_tensor_args(indices, values, size, is_coalesced, check_pinning)

def _validate_sparse_compressed_tensor_args(compressed_indices, plain_indices, values, size, layout, check_pinning=None):
    if _capturing():
        _captured = _capture_call(_validate_sparse_compressed_tensor_args, (compressed_indices, plain_indices, values, size, layout, check_pinning), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._validate_sparse_compressed_tensor_args(compressed_indices, plain_indices, values, size, layout, check_pinning)

def _validate_sparse_csr_tensor_args(crow_indices, col_indices, values, size, check_pinning=None):
    if _capturing():
        _captured = _capture_call(_validate_sparse_csr_tensor_args, (crow_indices, col_indices, values, size, check_pinning), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._validate_sparse_csr_tensor_args(crow_indices, col_indices, values, size, check_pinning)

def _validate_sparse_csc_tensor_args(ccol_indices, row_indices, values, size, check_pinning=None):
    if _capturing():
        _captured = _capture_call(_validate_sparse_csc_tensor_args, (ccol_indices, row_indices, values, size, check_pinning), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._validate_sparse_csc_tensor_args(ccol_indices, row_indices, values, size, check_pinning)

def _validate_sparse_bsr_tensor_args(crow_indices, col_indices, values, size, check_pinning=None):
    if _capturing():
        _captured = _capture_call(_validate_sparse_bsr_tensor_args, (crow_indices, col_indices, values, size, check_pinning), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._validate_sparse_bsr_tensor_args(crow_indices, col_indices, values, size, check_pinning)

def _validate_sparse_bsc_tensor_args(ccol_indices, row_indices, values, size, check_pinning=None):
    if _capturing():
        _captured = _capture_call(_validate_sparse_bsc_tensor_args, (ccol_indices, row_indices, values, size, check_pinning), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._validate_sparse_bsc_tensor_args(ccol_indices, row_indices, values, size, check_pinning)

def _sparse_coo_tensor_with_dims(sparse_dim, dense_dim, size, dtype=None, layout=None, device=None, pin_memory=False):
    if _capturing():
        _captured = _capture_call(_sparse_coo_tensor_with_dims, (sparse_dim, dense_dim, size, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if dtype is None:
            dtype = DType.undefined
    return _C._sparse_coo_tensor_with_dims(sparse_dim, dense_dim, size, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory)

def _sparse_coo_tensor_with_dims_and_tensors(sparse_dim, dense_dim, size, indices, values, dtype=None, layout=None, device=None, pin_memory=False, is_coalesced=None):
    if _capturing():
        _captured = _capture_call(_sparse_coo_tensor_with_dims_and_tensors, (sparse_dim, dense_dim, size, indices, values, dtype, layout, device, pin_memory, is_coalesced), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if dtype is None:
            dtype = DType.undefined
    return _C._sparse_coo_tensor_with_dims_and_tensors(sparse_dim, dense_dim, size, indices, values, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory, is_coalesced=is_coalesced)


[docs]
def sparse_resize_(input, size, sparse_dim, dense_dim):
    return input.sparse_resize_(size=size, sparse_dim=sparse_dim, dense_dim=dense_dim)



[docs]
def sparse_resize_and_clear_(input, size, sparse_dim, dense_dim):
    return input.sparse_resize_and_clear_(size=size, sparse_dim=sparse_dim, dense_dim=dense_dim)



[docs]
def sparse_mask(input, mask):
    if _capturing():
        _captured = _capture_call(sparse_mask, (input, mask), {})
        if _captured is not None:
            return _captured
    return input.sparse_mask(mask=mask)


def _sparse_mask_projection(input, mask, accumulate_matches=False):
    if _capturing():
        _captured = _capture_call(_sparse_mask_projection, (input, mask, accumulate_matches), {})
        if _captured is not None:
            return _captured
    return input._sparse_mask_projection(mask=mask, accumulate_matches=accumulate_matches)

def _to_cpu(*args):
    if _capturing():
        _captured = _capture_call(_to_cpu, (*args,), {})
        if _captured is not None:
            return _captured
    return _C._to_cpu(*args)

def _to_dense(input, dtype=None, masked_grad=None):
    if _capturing():
        _captured = _capture_call(_to_dense, (input, dtype, masked_grad), {})
        if _captured is not None:
            return _captured
    return input._to_dense(dtype=dtype, masked_grad=masked_grad)

def to_dense_backward(grad, input, masked_grad=None):
    if _capturing():
        _captured = _capture_call(to_dense_backward, (grad, input, masked_grad), {})
        if _captured is not None:
            return _captured
    return _C.to_dense_backward(grad, input, masked_grad)


[docs]
def sparse_dim(input):
    if _capturing():
        _captured = _capture_call(sparse_dim, (input,), {})
        if _captured is not None:
            return _captured
    return input.sparse_dim()


def _dimI(input):
    if _capturing():
        _captured = _capture_call(_dimI, (input,), {})
        if _captured is not None:
            return _captured
    return input._dimI()


[docs]
def dense_dim(input):
    if _capturing():
        _captured = _capture_call(dense_dim, (input,), {})
        if _captured is not None:
            return _captured
    return input.dense_dim()


def _dimV(input):
    if _capturing():
        _captured = _capture_call(_dimV, (input,), {})
        if _captured is not None:
            return _captured
    return input._dimV()


[docs]
def coalesce(input):
    if _capturing():
        _captured = _capture_call(coalesce, (input,), {})
        if _captured is not None:
            return _captured
    return input.coalesce()


def _coalesce(input):
    if _capturing():
        _captured = _capture_call(_coalesce, (input,), {})
        if _captured is not None:
            return _captured
    return _C._coalesce(input)


[docs]
def is_coalesced(input):
    if _capturing():
        _captured = _capture_call(is_coalesced, (input,), {})
        if _captured is not None:
            return _captured
    return input.is_coalesced()


def _indices(input):
    if _capturing():
        _captured = _capture_call(_indices, (input,), {})
        if _captured is not None:
            return _captured
    return input._indices()

def _values(input):
    if _capturing():
        _captured = _capture_call(_values, (input,), {})
        if _captured is not None:
            return _captured
    return input._values()

def _coalesced_(input, coalesced):
    return input._coalesced_(coalesced=coalesced)


[docs]
def indices(input):
    if _capturing():
        _captured = _capture_call(indices, (input,), {})
        if _captured is not None:
            return _captured
    return input.indices()



[docs]
def values(input):
    if _capturing():
        _captured = _capture_call(values, (input,), {})
        if _captured is not None:
            return _captured
    return input.values()



[docs]
def crow_indices(input):
    if _capturing():
        _captured = _capture_call(crow_indices, (input,), {})
        if _captured is not None:
            return _captured
    return input.crow_indices()



[docs]
def col_indices(input):
    if _capturing():
        _captured = _capture_call(col_indices, (input,), {})
        if _captured is not None:
            return _captured
    return input.col_indices()



[docs]
def ccol_indices(input):
    if _capturing():
        _captured = _capture_call(ccol_indices, (input,), {})
        if _captured is not None:
            return _captured
    return input.ccol_indices()



[docs]
def row_indices(input):
    if _capturing():
        _captured = _capture_call(row_indices, (input,), {})
        if _captured is not None:
            return _captured
    return input.row_indices()



[docs]
def hspmm(mat1, mat2, *, out=None):
    if out is not None:
        return _C.hspmm(mat1=mat1, mat2=mat2, out=out)
    if _capturing():
        _captured = _capture_call(hspmm, (mat1, mat2), {})
        if _captured is not None:
            return _captured
    return _C.hspmm(mat1=mat1, mat2=mat2)



[docs]
def copy_sparse_to_sparse_(input, src, non_blocking=False):
    if _capturing():
        _captured = _capture_call(copy_sparse_to_sparse_, (input, src, non_blocking), {})
        if _captured is not None:
            return _captured
    return _C.copy_sparse_to_sparse_(input, src, non_blocking)


def _to_sparse(input, sparse_dim):
    if _capturing():
        _captured = _capture_call(_to_sparse, (input, sparse_dim), {})
        if _captured is not None:
            return _captured
    return input._to_sparse(sparse_dim=sparse_dim)

def _to_sparse_csr(input, dense_dim=None):
    if _capturing():
        _captured = _capture_call(_to_sparse_csr, (input, dense_dim), {})
        if _captured is not None:
            return _captured
    return input._to_sparse_csr(dense_dim=dense_dim)


[docs]
def to_sparse_csc(input, dense_dim=None):
    if _capturing():
        _captured = _capture_call(to_sparse_csc, (input, dense_dim), {})
        if _captured is not None:
            return _captured
    return input.to_sparse_csc(dense_dim=dense_dim)


def _to_sparse_csc(input, dense_dim=None):
    if _capturing():
        _captured = _capture_call(_to_sparse_csc, (input, dense_dim), {})
        if _captured is not None:
            return _captured
    return input._to_sparse_csc(dense_dim=dense_dim)


[docs]
def to_sparse_bsr(input, blocksize, dense_dim=None):
    if _capturing():
        _captured = _capture_call(to_sparse_bsr, (input, blocksize, dense_dim), {})
        if _captured is not None:
            return _captured
    return input.to_sparse_bsr(blocksize=blocksize, dense_dim=dense_dim)


def _to_sparse_bsr(input, blocksize, dense_dim=None):
    if _capturing():
        _captured = _capture_call(_to_sparse_bsr, (input, blocksize, dense_dim), {})
        if _captured is not None:
            return _captured
    return input._to_sparse_bsr(blocksize=blocksize, dense_dim=dense_dim)


[docs]
def to_sparse_bsc(input, blocksize, dense_dim=None):
    if _capturing():
        _captured = _capture_call(to_sparse_bsc, (input, blocksize, dense_dim), {})
        if _captured is not None:
            return _captured
    return input.to_sparse_bsc(blocksize=blocksize, dense_dim=dense_dim)


def _to_sparse_bsc(input, blocksize, dense_dim=None):
    if _capturing():
        _captured = _capture_call(_to_sparse_bsc, (input, blocksize, dense_dim), {})
        if _captured is not None:
            return _captured
    return input._to_sparse_bsc(blocksize=blocksize, dense_dim=dense_dim)


[docs]
def to_mkldnn(input, dtype=None):
    if _capturing():
        _captured = _capture_call(to_mkldnn, (input, dtype), {})
        if _captured is not None:
            return _captured
    return input.to_mkldnn(dtype=dtype)



[docs]
def mkldnn_reorder_conv2d_weight(input, padding=0, stride=1, dilation=1, groups=1, input_size=None):
    if _capturing():
        _captured = _capture_call(mkldnn_reorder_conv2d_weight, (input, padding, stride, dilation, groups, input_size), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(input_size, int) and not isinstance(input_size, bool):
        input_size = [input_size]
    return _C.mkldnn_reorder_conv2d_weight(input, padding, stride, dilation, groups, input_size)



[docs]
def mkldnn_reorder_conv3d_weight(input, padding=0, stride=1, dilation=1, groups=1, input_size=None):
    if _capturing():
        _captured = _capture_call(mkldnn_reorder_conv3d_weight, (input, padding, stride, dilation, groups, input_size), {})
        if _captured is not None:
            return _captured
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    if isinstance(input_size, int) and not isinstance(input_size, bool):
        input_size = [input_size]
    return _C.mkldnn_reorder_conv3d_weight(input, padding, stride, dilation, groups, input_size)


def to_mkldnn_backward(grad, input):
    if _capturing():
        _captured = _capture_call(to_mkldnn_backward, (grad, input), {})
        if _captured is not None:
            return _captured
    return _C.to_mkldnn_backward(grad, input)


[docs]
def q_scale(input):
    if _capturing():
        _captured = _capture_call(q_scale, (input,), {})
        if _captured is not None:
            return _captured
    return _C.q_scale(input)



[docs]
def q_zero_point(input):
    if _capturing():
        _captured = _capture_call(q_zero_point, (input,), {})
        if _captured is not None:
            return _captured
    return _C.q_zero_point(input)



[docs]
def q_per_channel_scales(input):
    if _capturing():
        _captured = _capture_call(q_per_channel_scales, (input,), {})
        if _captured is not None:
            return _captured
    return _C.q_per_channel_scales(input)



[docs]
def q_per_channel_zero_points(input):
    if _capturing():
        _captured = _capture_call(q_per_channel_zero_points, (input,), {})
        if _captured is not None:
            return _captured
    return _C.q_per_channel_zero_points(input)



[docs]
def q_per_channel_axis(input):
    if _capturing():
        _captured = _capture_call(q_per_channel_axis, (input,), {})
        if _captured is not None:
            return _captured
    return _C.q_per_channel_axis(input)



[docs]
def is_quantized(input):
    if _capturing():
        _captured = _capture_call(is_quantized, (input,), {})
        if _captured is not None:
            return _captured
    return _C.is_quantized(input)



[docs]
def qscheme(input):
    if _capturing():
        _captured = _capture_call(qscheme, (input,), {})
        if _captured is not None:
            return _captured
    return _C.qscheme(input)



[docs]
def int_repr(input):
    if _capturing():
        _captured = _capture_call(int_repr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.int_repr(input)


def _make_per_tensor_quantized_tensor(input, scale, zero_point):
    if _capturing():
        _captured = _capture_call(_make_per_tensor_quantized_tensor, (input, scale, zero_point), {})
        if _captured is not None:
            return _captured
    return _C._make_per_tensor_quantized_tensor(input, scale, zero_point)

def _make_per_channel_quantized_tensor(input, scale, zero_point, axis):
    if _capturing():
        _captured = _capture_call(_make_per_channel_quantized_tensor, (input, scale, zero_point, axis), {})
        if _captured is not None:
            return _captured
    return _C._make_per_channel_quantized_tensor(input, scale, zero_point, axis)


[docs]
def fake_quantize_per_tensor_affine(input, scale, zero_point, quant_min, quant_max):
    if _capturing():
        _captured = _capture_call(fake_quantize_per_tensor_affine, (input, scale, zero_point, quant_min, quant_max), {})
        if _captured is not None:
            return _captured
    return _C.fake_quantize_per_tensor_affine(input, scale, zero_point, quant_min, quant_max)



[docs]
def fake_quantize_per_tensor_affine_cachemask(input, scale, zero_point, quant_min, quant_max):
    if _capturing():
        _captured = _capture_call(fake_quantize_per_tensor_affine_cachemask, (input, scale, zero_point, quant_min, quant_max), {})
        if _captured is not None:
            return _captured
    return _C.fake_quantize_per_tensor_affine_cachemask(input, scale, zero_point, quant_min, quant_max)


def _fake_quantize_per_tensor_affine_cachemask_tensor_qparams(input, scale, zero_point, fake_quant_enabled, quant_min, quant_max):
    if _capturing():
        _captured = _capture_call(_fake_quantize_per_tensor_affine_cachemask_tensor_qparams, (input, scale, zero_point, fake_quant_enabled, quant_min, quant_max), {})
        if _captured is not None:
            return _captured
    return _C._fake_quantize_per_tensor_affine_cachemask_tensor_qparams(input, scale, zero_point, fake_quant_enabled, quant_min, quant_max)

def fake_quantize_per_tensor_affine_cachemask_backward(grad, mask):
    if _capturing():
        _captured = _capture_call(fake_quantize_per_tensor_affine_cachemask_backward, (grad, mask), {})
        if _captured is not None:
            return _captured
    return _C.fake_quantize_per_tensor_affine_cachemask_backward(grad, mask)

def _fake_quantize_learnable_per_tensor_affine(input, scale, zero_point, quant_min, quant_max, grad_factor=1.0):
    if _capturing():
        _captured = _capture_call(_fake_quantize_learnable_per_tensor_affine, (input, scale, zero_point, quant_min, quant_max, grad_factor), {})
        if _captured is not None:
            return _captured
    return _C._fake_quantize_learnable_per_tensor_affine(input, scale, zero_point, quant_min, quant_max, grad_factor)

def _fake_quantize_learnable_per_tensor_affine_backward(grad, input, scale, zero_point, quant_min, quant_max, grad_factor=1.0):
    if _capturing():
        _captured = _capture_call(_fake_quantize_learnable_per_tensor_affine_backward, (grad, input, scale, zero_point, quant_min, quant_max, grad_factor), {})
        if _captured is not None:
            return _captured
    return _C._fake_quantize_learnable_per_tensor_affine_backward(grad, input, scale, zero_point, quant_min, quant_max, grad_factor)


[docs]
def fake_quantize_per_channel_affine(input, scale, zero_point, axis, quant_min, quant_max):
    if _capturing():
        _captured = _capture_call(fake_quantize_per_channel_affine, (input, scale, zero_point, axis, quant_min, quant_max), {})
        if _captured is not None:
            return _captured
    return _C.fake_quantize_per_channel_affine(input, scale, zero_point, axis, quant_min, quant_max)



[docs]
def fake_quantize_per_channel_affine_cachemask(input, scale, zero_point, axis, quant_min, quant_max):
    if _capturing():
        _captured = _capture_call(fake_quantize_per_channel_affine_cachemask, (input, scale, zero_point, axis, quant_min, quant_max), {})
        if _captured is not None:
            return _captured
    return _C.fake_quantize_per_channel_affine_cachemask(input, scale, zero_point, axis, quant_min, quant_max)


def fake_quantize_per_channel_affine_cachemask_backward(grad, mask):
    if _capturing():
        _captured = _capture_call(fake_quantize_per_channel_affine_cachemask_backward, (grad, mask), {})
        if _captured is not None:
            return _captured
    return _C.fake_quantize_per_channel_affine_cachemask_backward(grad, mask)

def _fake_quantize_learnable_per_channel_affine(input, scale, zero_point, axis, quant_min, quant_max, grad_factor=1.0):
    if _capturing():
        _captured = _capture_call(_fake_quantize_learnable_per_channel_affine, (input, scale, zero_point, axis, quant_min, quant_max, grad_factor), {})
        if _captured is not None:
            return _captured
    return _C._fake_quantize_learnable_per_channel_affine(input, scale, zero_point, axis, quant_min, quant_max, grad_factor)

def _fake_quantize_learnable_per_channel_affine_backward(grad, input, scale, zero_point, axis, quant_min, quant_max, grad_factor=1.0):
    if _capturing():
        _captured = _capture_call(_fake_quantize_learnable_per_channel_affine_backward, (grad, input, scale, zero_point, axis, quant_min, quant_max, grad_factor), {})
        if _captured is not None:
            return _captured
    return _C._fake_quantize_learnable_per_channel_affine_backward(grad, input, scale, zero_point, axis, quant_min, quant_max, grad_factor)


[docs]
def fused_moving_avg_obs_fake_quant(input, observer_on, fake_quant_on, running_min, running_max, scale, zero_point, averaging_const, quant_min, quant_max, ch_axis, per_row_fake_quant=False, symmetric_quant=False):
    if _capturing():
        _captured = _capture_call(fused_moving_avg_obs_fake_quant, (input, observer_on, fake_quant_on, running_min, running_max, scale, zero_point, averaging_const, quant_min, quant_max, ch_axis, per_row_fake_quant, symmetric_quant), {})
        if _captured is not None:
            return _captured
    return _C.fused_moving_avg_obs_fake_quant(input, observer_on, fake_quant_on, running_min, running_max, scale, zero_point, averaging_const, quant_min, quant_max, ch_axis, per_row_fake_quant, symmetric_quant)


def _fused_moving_avg_obs_fq_helper(input, observer_on, fake_quant_on, running_min, running_max, scale, zero_point, averaging_const, quant_min, quant_max, ch_axis, per_row_fake_quant=False, symmetric_quant=False):
    if _capturing():
        _captured = _capture_call(_fused_moving_avg_obs_fq_helper, (input, observer_on, fake_quant_on, running_min, running_max, scale, zero_point, averaging_const, quant_min, quant_max, ch_axis, per_row_fake_quant, symmetric_quant), {})
        if _captured is not None:
            return _captured
    return _C._fused_moving_avg_obs_fq_helper(input, observer_on, fake_quant_on, running_min, running_max, scale, zero_point, averaging_const, quant_min, quant_max, ch_axis, per_row_fake_quant, symmetric_quant)

def _choose_qparams_per_tensor(input, reduce_range=False):
    if _capturing():
        _captured = _capture_call(_choose_qparams_per_tensor, (input, reduce_range), {})
        if _captured is not None:
            return _captured
    return _C._choose_qparams_per_tensor(input, reduce_range)

def _saturate_weight_to_fp16(weight):
    if _capturing():
        _captured = _capture_call(_saturate_weight_to_fp16, (weight,), {})
        if _captured is not None:
            return _captured
    return _C._saturate_weight_to_fp16(weight)


[docs]
def choose_qparams_optimized(input, numel, n_bins, ratio, bit_width):
    if _capturing():
        _captured = _capture_call(choose_qparams_optimized, (input, numel, n_bins, ratio, bit_width), {})
        if _captured is not None:
            return _captured
    return _C.choose_qparams_optimized(input, numel, n_bins, ratio, bit_width)


def _autocast_to_reduced_precision(input, cuda_enabled, cpu_enabled, cuda_dtype, cpu_dtype):
    if _capturing():
        _captured = _capture_call(_autocast_to_reduced_precision, (input, cuda_enabled, cpu_enabled, cuda_dtype, cpu_dtype), {})
        if _captured is not None:
            return _captured
    return input._autocast_to_reduced_precision(cuda_enabled=cuda_enabled, cpu_enabled=cpu_enabled, cuda_dtype=cuda_dtype, cpu_dtype=cpu_dtype)

def _autocast_to_full_precision(input, cuda_enabled, cpu_enabled):
    if _capturing():
        _captured = _capture_call(_autocast_to_full_precision, (input, cuda_enabled, cpu_enabled), {})
        if _captured is not None:
            return _captured
    return input._autocast_to_full_precision(cuda_enabled=cuda_enabled, cpu_enabled=cpu_enabled)

def _to_copy(input, dtype=None, layout=None, device=None, pin_memory=None, non_blocking=False, memory_format=None):
    if _capturing():
        _captured = _capture_call(_to_copy, (input, dtype, layout, device, pin_memory, non_blocking, memory_format), {})
        if _captured is not None:
            return _captured
    return _C._to_copy(input, dtype=dtype, layout=layout, device=_ensure_device(device), pin_memory=pin_memory, non_blocking=non_blocking, memory_format=memory_format)


[docs]
def to(input, dtype=None, layout=None, device=None, pin_memory=None, non_blocking=False, copy=False, memory_format=None):
    if _capturing():
        _captured = _capture_call(to, (input, dtype, layout, device, pin_memory, non_blocking, copy, memory_format), {})
        if _captured is not None:
            return _captured
    return input.to(dtype=dtype, layout=layout, device=device, pin_memory=pin_memory, non_blocking=non_blocking, copy=copy, memory_format=memory_format)


def _local_scalar_dense(input):
    if _capturing():
        _captured = _capture_call(_local_scalar_dense, (input,), {})
        if _captured is not None:
            return _captured
    return _C._local_scalar_dense(input)

def _lstm_mps(input, hx, params, has_biases, num_layers, dropout, train, bidirectional, batch_first):
    if _capturing():
        _captured = _capture_call(_lstm_mps, (input, hx, params, has_biases, num_layers, dropout, train, bidirectional, batch_first), {})
        if _captured is not None:
            return _captured
    return _C._lstm_mps(input, hx, params, has_biases, num_layers, dropout, train, bidirectional, batch_first)

def lstm_mps_backward(grad_y, grad_hy, grad_cy, z_state, cell_state_fwd, input, layersOutputs, hx, params, has_biases, num_layers, dropout, train, bidirectional, batch_first):
    if _capturing():
        _captured = _capture_call(lstm_mps_backward, (grad_y, grad_hy, grad_cy, z_state, cell_state_fwd, input, layersOutputs, hx, params, has_biases, num_layers, dropout, train, bidirectional, batch_first), {})
        if _captured is not None:
            return _captured
    return _C.lstm_mps_backward(grad_y, grad_hy, grad_cy, z_state, cell_state_fwd, input, layersOutputs, hx, params, has_biases, num_layers, dropout, train, bidirectional, batch_first)

def _thnn_fused_lstm_cell(input_gates, hidden_gates, cx, input_bias=None, hidden_bias=None):
    if _capturing():
        _captured = _capture_call(_thnn_fused_lstm_cell, (input_gates, hidden_gates, cx, input_bias, hidden_bias), {})
        if _captured is not None:
            return _captured
    return _C._thnn_fused_lstm_cell(input_gates, hidden_gates, cx, input_bias, hidden_bias)

def _thnn_fused_lstm_cell_backward_impl(grad_hy, grad_cy, cx, cy, workspace, has_bias):
    if _capturing():
        _captured = _capture_call(_thnn_fused_lstm_cell_backward_impl, (grad_hy, grad_cy, cx, cy, workspace, has_bias), {})
        if _captured is not None:
            return _captured
    return _C._thnn_fused_lstm_cell_backward_impl(grad_hy, grad_cy, cx, cy, workspace, has_bias)

def _thnn_fused_lstm_cell_backward(grad_hy, grad_cy, cx, cy, workspace, has_bias):
    if _capturing():
        _captured = _capture_call(_thnn_fused_lstm_cell_backward, (grad_hy, grad_cy, cx, cy, workspace, has_bias), {})
        if _captured is not None:
            return _captured
    return _C._thnn_fused_lstm_cell_backward(grad_hy, grad_cy, cx, cy, workspace, has_bias)

def _thnn_differentiable_lstm_cell_backward(grad_hy, grad_cy, input_gates, hidden_gates, input_bias, hidden_bias, cx, cy):
    if _capturing():
        _captured = _capture_call(_thnn_differentiable_lstm_cell_backward, (grad_hy, grad_cy, input_gates, hidden_gates, input_bias, hidden_bias, cx, cy), {})
        if _captured is not None:
            return _captured
    return _C._thnn_differentiable_lstm_cell_backward(grad_hy, grad_cy, input_gates, hidden_gates, input_bias, hidden_bias, cx, cy)

def _thnn_fused_gru_cell(input_gates, hidden_gates, hx, input_bias=None, hidden_bias=None):
    if _capturing():
        _captured = _capture_call(_thnn_fused_gru_cell, (input_gates, hidden_gates, hx, input_bias, hidden_bias), {})
        if _captured is not None:
            return _captured
    return _C._thnn_fused_gru_cell(input_gates, hidden_gates, hx, input_bias, hidden_bias)

def _thnn_fused_gru_cell_backward(grad_hy, workspace, has_bias):
    if _capturing():
        _captured = _capture_call(_thnn_fused_gru_cell_backward, (grad_hy, workspace, has_bias), {})
        if _captured is not None:
            return _captured
    return _C._thnn_fused_gru_cell_backward(grad_hy, workspace, has_bias)

def _thnn_differentiable_gru_cell_backward(grad_hy, input_gates, hidden_gates, hx, input_bias, hidden_bias):
    if _capturing():
        _captured = _capture_call(_thnn_differentiable_gru_cell_backward, (grad_hy, input_gates, hidden_gates, hx, input_bias, hidden_bias), {})
        if _captured is not None:
            return _captured
    return _C._thnn_differentiable_gru_cell_backward(grad_hy, input_gates, hidden_gates, hx, input_bias, hidden_bias)


[docs]
def quantized_lstm_cell(input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh):
    if _capturing():
        _captured = _capture_call(quantized_lstm_cell, (input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh), {})
        if _captured is not None:
            return _captured
    if not isinstance(scale_ih, (tensorplay.Scalar, tensorplay.Tensor)):
        scale_ih = tensorplay.Scalar(scale_ih)
    if not isinstance(scale_hh, (tensorplay.Scalar, tensorplay.Tensor)):
        scale_hh = tensorplay.Scalar(scale_hh)
    if not isinstance(zero_point_ih, (tensorplay.Scalar, tensorplay.Tensor)):
        zero_point_ih = tensorplay.Scalar(zero_point_ih)
    if not isinstance(zero_point_hh, (tensorplay.Scalar, tensorplay.Tensor)):
        zero_point_hh = tensorplay.Scalar(zero_point_hh)
    return _C.quantized_lstm_cell(input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh)



[docs]
def quantized_gru_cell(input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh):
    if _capturing():
        _captured = _capture_call(quantized_gru_cell, (input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh), {})
        if _captured is not None:
            return _captured
    if not isinstance(scale_ih, (tensorplay.Scalar, tensorplay.Tensor)):
        scale_ih = tensorplay.Scalar(scale_ih)
    if not isinstance(scale_hh, (tensorplay.Scalar, tensorplay.Tensor)):
        scale_hh = tensorplay.Scalar(scale_hh)
    if not isinstance(zero_point_ih, (tensorplay.Scalar, tensorplay.Tensor)):
        zero_point_ih = tensorplay.Scalar(zero_point_ih)
    if not isinstance(zero_point_hh, (tensorplay.Scalar, tensorplay.Tensor)):
        zero_point_hh = tensorplay.Scalar(zero_point_hh)
    return _C.quantized_gru_cell(input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh)



[docs]
def quantized_rnn_relu_cell(input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh):
    if _capturing():
        _captured = _capture_call(quantized_rnn_relu_cell, (input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh), {})
        if _captured is not None:
            return _captured
    if not isinstance(scale_ih, (tensorplay.Scalar, tensorplay.Tensor)):
        scale_ih = tensorplay.Scalar(scale_ih)
    if not isinstance(scale_hh, (tensorplay.Scalar, tensorplay.Tensor)):
        scale_hh = tensorplay.Scalar(scale_hh)
    if not isinstance(zero_point_ih, (tensorplay.Scalar, tensorplay.Tensor)):
        zero_point_ih = tensorplay.Scalar(zero_point_ih)
    if not isinstance(zero_point_hh, (tensorplay.Scalar, tensorplay.Tensor)):
        zero_point_hh = tensorplay.Scalar(zero_point_hh)
    return _C.quantized_rnn_relu_cell(input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh)



[docs]
def quantized_rnn_tanh_cell(input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh):
    if _capturing():
        _captured = _capture_call(quantized_rnn_tanh_cell, (input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh), {})
        if _captured is not None:
            return _captured
    if not isinstance(scale_ih, (tensorplay.Scalar, tensorplay.Tensor)):
        scale_ih = tensorplay.Scalar(scale_ih)
    if not isinstance(scale_hh, (tensorplay.Scalar, tensorplay.Tensor)):
        scale_hh = tensorplay.Scalar(scale_hh)
    if not isinstance(zero_point_ih, (tensorplay.Scalar, tensorplay.Tensor)):
        zero_point_ih = tensorplay.Scalar(zero_point_ih)
    if not isinstance(zero_point_hh, (tensorplay.Scalar, tensorplay.Tensor)):
        zero_point_hh = tensorplay.Scalar(zero_point_hh)
    return _C.quantized_rnn_tanh_cell(input, hx, w_ih, w_hh, b_ih, b_hh, packed_ih, packed_hh, col_offsets_ih, col_offsets_hh, scale_ih, scale_hh, zero_point_ih, zero_point_hh)


def _pack_padded_sequence(input, lengths, batch_first):
    if _capturing():
        _captured = _capture_call(_pack_padded_sequence, (input, lengths, batch_first), {})
        if _captured is not None:
            return _captured
    return _C._pack_padded_sequence(input, lengths, batch_first)

def _pack_padded_sequence_backward(grad, input_size, batch_sizes, batch_first):
    if _capturing():
        _captured = _capture_call(_pack_padded_sequence_backward, (grad, input_size, batch_sizes, batch_first), {})
        if _captured is not None:
            return _captured
    if isinstance(input_size, int) and not isinstance(input_size, bool):
        input_size = [input_size]
    return _C._pack_padded_sequence_backward(grad, input_size, batch_sizes, batch_first)

def _pad_packed_sequence(data, batch_sizes, batch_first, padding_value, total_length):
    if _capturing():
        _captured = _capture_call(_pad_packed_sequence, (data, batch_sizes, batch_first, padding_value, total_length), {})
        if _captured is not None:
            return _captured
    if not isinstance(padding_value, (tensorplay.Scalar, tensorplay.Tensor)):
        padding_value = tensorplay.Scalar(padding_value)
    return _C._pad_packed_sequence(data, batch_sizes, batch_first, padding_value, total_length)


[docs]
def set_(input, source):
    return input.set_(source=source)



[docs]
def lift(input):
    if _capturing():
        _captured = _capture_call(lift, (input,), {})
        if _captured is not None:
            return _captured
    return _C.lift(input)



[docs]
def lift_fresh(input):
    if _capturing():
        _captured = _capture_call(lift_fresh, (input,), {})
        if _captured is not None:
            return _captured
    return _C.lift_fresh(input)



[docs]
def lift_fresh_copy(input):
    if _capturing():
        _captured = _capture_call(lift_fresh_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.lift_fresh_copy(input)



[docs]
def is_set_to(input, tensor):
    if _capturing():
        _captured = _capture_call(is_set_to, (input, tensor), {})
        if _captured is not None:
            return _captured
    return input.is_set_to(tensor=tensor)


def masked_scatter_backward(grad_output, mask, sizes):
    if _capturing():
        _captured = _capture_call(masked_scatter_backward, (grad_output, mask, sizes), {})
        if _captured is not None:
            return _captured
    if isinstance(sizes, int) and not isinstance(sizes, bool):
        sizes = [sizes]
    return _C.masked_scatter_backward(grad_output, mask, sizes)

def _masked_softmax(input, mask, dim=None, mask_type=None):
    if _capturing():
        _captured = _capture_call(_masked_softmax, (input, mask, dim, mask_type), {})
        if _captured is not None:
            return _captured
    return _C._masked_softmax(input, mask, dim, mask_type)

def _masked_softmax_backward(grad_output, output, mask, dim=None):
    if _capturing():
        _captured = _capture_call(_masked_softmax_backward, (grad_output, output, mask, dim), {})
        if _captured is not None:
            return _captured
    return _C._masked_softmax_backward(grad_output, output, mask, dim)


[docs]
def put_(input, index, source, accumulate=False):
    return input.put_(index=index, source=source, accumulate=accumulate)



[docs]
def scatter_reduce_(input, dim, index, src, reduce, include_self=True):
    return input.scatter_reduce_(dim=dim, index=index, src=src, reduce=reduce, include_self=include_self)



[docs]
def eq_(input, other):
    return input.eq_(other=other)



[docs]
def bitwise_and_(input, other):
    return input.bitwise_and_(other=other)


def __and__(input, other):
    if _capturing():
        _captured = _capture_call(__and__, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(other, (tensorplay.Scalar, tensorplay.Tensor)):
        other = tensorplay.Scalar(other)
    return _C.__and__(input, other)

def __iand__(input, other):
    return input.__iand__(other=other)


[docs]
def bitwise_or_(input, other):
    return input.bitwise_or_(other=other)


def __or__(input, other):
    if _capturing():
        _captured = _capture_call(__or__, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(other, (tensorplay.Scalar, tensorplay.Tensor)):
        other = tensorplay.Scalar(other)
    return _C.__or__(input, other)

def __ior__(input, other):
    return input.__ior__(other=other)


[docs]
def bitwise_xor_(input, other):
    return input.bitwise_xor_(other=other)


def __xor__(input, other):
    if _capturing():
        _captured = _capture_call(__xor__, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(other, (tensorplay.Scalar, tensorplay.Tensor)):
        other = tensorplay.Scalar(other)
    return _C.__xor__(input, other)

def __ixor__(input, other):
    return input.__ixor__(other=other)

def __lshift__(input, other):
    if _capturing():
        _captured = _capture_call(__lshift__, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(other, (tensorplay.Scalar, tensorplay.Tensor)):
        other = tensorplay.Scalar(other)
    return _C.__lshift__(input, other)

def __ilshift__(input, other):
    return input.__ilshift__(other=other)


[docs]
def bitwise_left_shift_(input, other):
    return input.bitwise_left_shift_(other=other)


def __rshift__(input, other):
    if _capturing():
        _captured = _capture_call(__rshift__, (input, other), {})
        if _captured is not None:
            return _captured
    if not isinstance(other, (tensorplay.Scalar, tensorplay.Tensor)):
        other = tensorplay.Scalar(other)
    return _C.__rshift__(input, other)

def __irshift__(input, other):
    return input.__irshift__(other=other)


[docs]
def bitwise_right_shift_(input, other):
    return input.bitwise_right_shift_(other=other)



[docs]
def digamma_(input):
    return input.digamma_()


def trace_backward(grad, sizes):
    if _capturing():
        _captured = _capture_call(trace_backward, (grad, sizes), {})
        if _captured is not None:
            return _captured
    if isinstance(sizes, int) and not isinstance(sizes, bool):
        sizes = [sizes]
    return _C.trace_backward(grad, sizes)


[docs]
def ne_(input, other):
    return input.ne_(other=other)



[docs]
def not_equal_(input, other):
    return input.not_equal_(other=other)



[docs]
def ge_(input, other):
    return input.ge_(other=other)



[docs]
def greater_equal_(input, other):
    return input.greater_equal_(other=other)



[docs]
def le_(input, other):
    return input.le_(other=other)



[docs]
def less_equal_(input, other):
    return input.less_equal_(other=other)



[docs]
def gt_(input, other):
    return input.gt_(other=other)



[docs]
def greater_(input, other):
    return input.greater_(other=other)



[docs]
def lt_(input, other):
    return input.lt_(other=other)



[docs]
def less_(input, other):
    return input.less_(other=other)


def index_select_backward(grad, self_sizes, dim, index):
    if _capturing():
        _captured = _capture_call(index_select_backward, (grad, self_sizes, dim, index), {})
        if _captured is not None:
            return _captured
    if isinstance(self_sizes, int) and not isinstance(self_sizes, bool):
        self_sizes = [self_sizes]
    return _C.index_select_backward(grad, self_sizes, dim, index)

def masked_select_backward(grad, input, mask):
    if _capturing():
        _captured = _capture_call(masked_select_backward, (grad, input, mask), {})
        if _captured is not None:
            return _captured
    return _C.masked_select_backward(grad, input, mask)


[docs]
def nonzero_numpy(input):
    if _capturing():
        _captured = _capture_call(nonzero_numpy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.nonzero_numpy(input)


def gather_backward(grad, input, dim, index, sparse_grad):
    if _capturing():
        _captured = _capture_call(gather_backward, (grad, input, dim, index, sparse_grad), {})
        if _captured is not None:
            return _captured
    return _C.gather_backward(grad, input, dim, index, sparse_grad)

def _gather_sparse_backward(input, dim, index, grad):
    if _capturing():
        _captured = _capture_call(_gather_sparse_backward, (input, dim, index, grad), {})
        if _captured is not None:
            return _captured
    return _C._gather_sparse_backward(input, dim, index, grad)


[docs]
def cross_entropy_loss(input, target, weight=None, reduction=1, ignore_index=-100, label_smoothing=0.0):
    if _capturing():
        _captured = _capture_call(cross_entropy_loss, (input, target, weight, reduction, ignore_index, label_smoothing), {})
        if _captured is not None:
            return _captured
    return _C.cross_entropy_loss(input, target, weight, reduction, ignore_index, label_smoothing)


def _linalg_check_errors(info, api_name, is_matrix):
    if _capturing():
        _captured = _capture_call(_linalg_check_errors, (info, api_name, is_matrix), {})
        if _captured is not None:
            return _captured
    return _C._linalg_check_errors(info, api_name, is_matrix=is_matrix)


[docs]
def swapaxes_(input, axis0, axis1):
    return input.swapaxes_(axis0=axis0, axis1=axis1)



[docs]
def swapdims_(input, dim0, dim1):
    return input.swapdims_(dim0=dim0, dim1=dim1)


def _cholesky_solve_helper(input, A, upper):
    if _capturing():
        _captured = _capture_call(_cholesky_solve_helper, (input, A, upper), {})
        if _captured is not None:
            return _captured
    return _C._cholesky_solve_helper(input, A, upper)


[docs]
def geqrf(input, *, out=None):
    if out is not None:
        return _C.geqrf(self=input, out=out)
    if _capturing():
        _captured = _capture_call(geqrf, (input,), {})
        if _captured is not None:
            return _captured
    return _C.geqrf(self=input)



[docs]
def orgqr(input, input2, *, out=None):
    if out is not None:
        return _C.orgqr(self=input, input2=input2, out=out)
    if _capturing():
        _captured = _capture_call(orgqr, (input, input2), {})
        if _captured is not None:
            return _captured
    return _C.orgqr(self=input, input2=input2)



[docs]
def ormqr(input, input2, input3, left=True, transpose=False, *, out=None):
    if out is not None:
        return _C.ormqr(self=input, input2=input2, input3=input3, left=left, transpose=transpose, out=out)
    if _capturing():
        _captured = _capture_call(ormqr, (input, input2, input3, left, transpose), {})
        if _captured is not None:
            return _captured
    return _C.ormqr(self=input, input2=input2, input3=input3, left=left, transpose=transpose)


def _lu_with_info(input, pivot=True, check_errors=True):
    if _capturing():
        _captured = _capture_call(_lu_with_info, (input, pivot, check_errors), {})
        if _captured is not None:
            return _captured
    return _C._lu_with_info(input, pivot, check_errors)


[docs]
def lu_solve(input, LU_data, LU_pivots, *, out=None):
    if out is not None:
        return _C.lu_solve(self=input, LU_data=LU_data, LU_pivots=LU_pivots, out=out)
    if _capturing():
        _captured = _capture_call(lu_solve, (input, LU_data, LU_pivots), {})
        if _captured is not None:
            return _captured
    return _C.lu_solve(self=input, LU_data=LU_data, LU_pivots=LU_pivots)



[docs]
def lu_unpack(LU_data, LU_pivots, unpack_data=True, unpack_pivots=True, *, out=None):
    if out is not None:
        return _C.lu_unpack(LU_data=LU_data, LU_pivots=LU_pivots, unpack_data=unpack_data, unpack_pivots=unpack_pivots, out=out)
    if _capturing():
        _captured = _capture_call(lu_unpack, (LU_data, LU_pivots, unpack_data, unpack_pivots), {})
        if _captured is not None:
            return _captured
    return _C.lu_unpack(LU_data=LU_data, LU_pivots=LU_pivots, unpack_data=unpack_data, unpack_pivots=unpack_pivots)



[docs]
def polygamma_(input, n):
    return input.polygamma_(n=n)



[docs]
def arctan2(input, other, *, out=None):
    if out is not None:
        return _C.arctan2(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(arctan2, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.arctan2(self=input, other=other)



[docs]
def arctan2_(input, other):
    return input.arctan2_(other=other)


def _histogramdd_bin_edges(input, bins, range=None, weight=None, density=False):
    if _capturing():
        _captured = _capture_call(_histogramdd_bin_edges, (input, bins, range, weight, density), {})
        if _captured is not None:
            return _captured
    if isinstance(bins, int) and not isinstance(bins, bool):
        bins = [bins]
    return _C._histogramdd_bin_edges(input, bins, range=range, weight=weight, density=density)

def _histogramdd_from_bin_cts(input, bins, range=None, weight=None, density=False):
    if _capturing():
        _captured = _capture_call(_histogramdd_from_bin_cts, (input, bins, range, weight, density), {})
        if _captured is not None:
            return _captured
    if isinstance(bins, int) and not isinstance(bins, bool):
        bins = [bins]
    return _C._histogramdd_from_bin_cts(input, bins, range=range, weight=weight, density=density)

def _histogramdd_from_bin_tensors(input, bins, weight=None, density=False):
    if _capturing():
        _captured = _capture_call(_histogramdd_from_bin_tensors, (input, bins, weight, density), {})
        if _captured is not None:
            return _captured
    return _C._histogramdd_from_bin_tensors(input, bins, weight=weight, density=density)


[docs]
def histogramdd(input, bins, range=None, weight=None, density=False):
    if _capturing():
        _captured = _capture_call(histogramdd, (input, bins, range, weight, density), {})
        if _captured is not None:
            return _captured
    if isinstance(bins, int) and not isinstance(bins, bool):
        bins = [bins]
    return _C.histogramdd(input, bins, range, weight, density)



[docs]
def fmod_(input, other):
    return input.fmod_(other=other)



[docs]
def igamma_(input, other):
    return input.igamma_(other=other)



[docs]
def igammac_(input, other):
    return input.igammac_(other=other)



[docs]
def remainder_(input, other):
    return input.remainder_(other=other)



[docs]
def pow_(input, exponent):
    return input.pow_(exponent=exponent)



[docs]
def float_power_(input, exponent):
    return input.float_power_(exponent=exponent)



[docs]
def normal_functional(input, mean=0, std=1, generator=None):
    if _capturing():
        _captured = _capture_call(normal_functional, (input, mean, std, generator), {})
        if _captured is not None:
            return _captured
    return _C.normal_functional(input, mean, std, generator=generator)



[docs]
def alias(input):
    if _capturing():
        _captured = _capture_call(alias, (input,), {})
        if _captured is not None:
            return _captured
    return _C.alias(input)


def _foreach_acos(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_acos, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_acos(input, *args, **kwargs)

def _foreach_acos_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_acos_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_acos_(input, *args, **kwargs)

def _foreach_asin(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_asin, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_asin(input, *args, **kwargs)

def _foreach_asin_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_asin_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_asin_(input, *args, **kwargs)

def _foreach_atan(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_atan, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_atan(input, *args, **kwargs)

def _foreach_atan_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_atan_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_atan_(input, *args, **kwargs)

def _foreach_ceil(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_ceil, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_ceil(input, *args, **kwargs)

def _foreach_ceil_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_ceil_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_ceil_(input, *args, **kwargs)

def _foreach_cos(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_cos, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_cos(input, *args, **kwargs)

def _foreach_cos_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_cos_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_cos_(input, *args, **kwargs)

def _foreach_cosh(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_cosh, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_cosh(input, *args, **kwargs)

def _foreach_cosh_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_cosh_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_cosh_(input, *args, **kwargs)

def _foreach_erf(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_erf, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_erf(input, *args, **kwargs)

def _foreach_erf_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_erf_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_erf_(input, *args, **kwargs)

def _foreach_erfc(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_erfc, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_erfc(input, *args, **kwargs)

def _foreach_erfc_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_erfc_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_erfc_(input, *args, **kwargs)

def _foreach_exp(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_exp, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_exp(input, *args, **kwargs)

def _foreach_exp_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_exp_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_exp_(input, *args, **kwargs)

def _foreach_expm1(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_expm1, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_expm1(input, *args, **kwargs)

def _foreach_expm1_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_expm1_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_expm1_(input, *args, **kwargs)

def _foreach_floor(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_floor, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_floor(input, *args, **kwargs)

def _foreach_floor_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_floor_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_floor_(input, *args, **kwargs)

def _foreach_frac(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_frac, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_frac(input, *args, **kwargs)

def _foreach_frac_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_frac_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_frac_(input, *args, **kwargs)

def _foreach_lgamma(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_lgamma, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_lgamma(input, *args, **kwargs)

def _foreach_lgamma_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_lgamma_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_lgamma_(input, *args, **kwargs)

def _foreach_log(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_log, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_log(input, *args, **kwargs)

def _foreach_log_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_log_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_log_(input, *args, **kwargs)

def _foreach_log10(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_log10, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_log10(input, *args, **kwargs)

def _foreach_log10_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_log10_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_log10_(input, *args, **kwargs)

def _foreach_log1p(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_log1p, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_log1p(input, *args, **kwargs)

def _foreach_log1p_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_log1p_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_log1p_(input, *args, **kwargs)

def _foreach_log2(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_log2, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_log2(input, *args, **kwargs)

def _foreach_log2_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_log2_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_log2_(input, *args, **kwargs)

def _foreach_max(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_max, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_max(input, *args, **kwargs)

def _foreach_norm(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_norm, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_norm(input, *args, **kwargs)

def _foreach_powsum(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_powsum, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_powsum(input, *args, **kwargs)

def _foreach_round(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_round, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_round(input, *args, **kwargs)

def _foreach_round_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_round_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_round_(input, *args, **kwargs)

def _foreach_sigmoid(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sigmoid, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sigmoid(input, *args, **kwargs)

def _foreach_sigmoid_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sigmoid_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sigmoid_(input, *args, **kwargs)

def _foreach_sin(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sin, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sin(input, *args, **kwargs)

def _foreach_sin_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sin_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sin_(input, *args, **kwargs)

def _foreach_sinh(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sinh, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sinh(input, *args, **kwargs)

def _foreach_sinh_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_sinh_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_sinh_(input, *args, **kwargs)

def _foreach_tan(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_tan, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_tan(input, *args, **kwargs)

def _foreach_tan_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_tan_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_tan_(input, *args, **kwargs)

def _foreach_tanh(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_tanh, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_tanh(input, *args, **kwargs)

def _foreach_tanh_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_tanh_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_tanh_(input, *args, **kwargs)

def _foreach_trunc(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_trunc, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_trunc(input, *args, **kwargs)

def _foreach_trunc_(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_trunc_, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_trunc_(input, *args, **kwargs)

def _foreach_clone(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_clone, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_clone(input, *args, **kwargs)

def _foreach_copy(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_copy, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_copy(input, *args, **kwargs)

def _foreach_mm(input, *args, **kwargs):
    if _capturing():
        _captured = _capture_call(_foreach_mm, (input, *args), kwargs)
        if _captured is not None:
            return _captured
    return _C._foreach_mm(input, *args, **kwargs)

def _convert_indices_from_coo_to_csr(input, size, *, out_int32=False, out=None):
    if out is not None:
        return _C._convert_indices_from_coo_to_csr(self=input, size=size, out_int32=out_int32, out=out)
    if _capturing():
        _captured = _capture_call(_convert_indices_from_coo_to_csr, (input, size), {'out_int32': out_int32})
        if _captured is not None:
            return _captured
    return _C._convert_indices_from_coo_to_csr(self=input, size=size, out_int32=out_int32)

def _convert_indices_from_csr_to_coo(crow_indices, col_indices, *, out_int32=False, transpose=False, out=None):
    if out is not None:
        return _C._convert_indices_from_csr_to_coo(crow_indices=crow_indices, col_indices=col_indices, out_int32=out_int32, transpose=transpose, out=out)
    if _capturing():
        _captured = _capture_call(_convert_indices_from_csr_to_coo, (crow_indices, col_indices), {'out_int32': out_int32, 'transpose': transpose})
        if _captured is not None:
            return _captured
    return _C._convert_indices_from_csr_to_coo(crow_indices=crow_indices, col_indices=col_indices, out_int32=out_int32, transpose=transpose)


[docs]
def nll_loss_nd(input, target, weight=None, reduction=1, ignore_index=-100):
    if _capturing():
        _captured = _capture_call(nll_loss_nd, (input, target, weight, reduction, ignore_index), {})
        if _captured is not None:
            return _captured
    return _C.nll_loss_nd(input, target, weight, reduction, ignore_index)



[docs]
def nll_loss_forward(input, target, weight, reduction, ignore_index, *, out=None):
    if out is not None:
        return _C.nll_loss_forward(self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index, out=out)
    if _capturing():
        _captured = _capture_call(nll_loss_forward, (input, target, weight, reduction, ignore_index), {})
        if _captured is not None:
            return _captured
    return _C.nll_loss_forward(self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index)



[docs]
def nll_loss2d_forward(input, target, weight, reduction, ignore_index, *, out=None):
    if out is not None:
        return _C.nll_loss2d_forward(self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index, out=out)
    if _capturing():
        _captured = _capture_call(nll_loss2d_forward, (input, target, weight, reduction, ignore_index), {})
        if _captured is not None:
            return _captured
    return _C.nll_loss2d_forward(self=input, target=target, weight=weight, reduction=reduction, ignore_index=ignore_index)


def soft_margin_loss_backward(grad_output, input, target, reduction, *, out=None):
    if out is not None:
        return _C.soft_margin_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction, out=out)
    if _capturing():
        _captured = _capture_call(soft_margin_loss_backward, (grad_output, input, target, reduction), {})
        if _captured is not None:
            return _captured
    return _C.soft_margin_loss_backward(grad_output=grad_output, self=input, target=target, reduction=reduction)


[docs]
def glu_jvp(glu, x, dx, dim):
    if _capturing():
        _captured = _capture_call(glu_jvp, (glu, x, dx, dim), {})
        if _captured is not None:
            return _captured
    return _C.glu_jvp(glu, x, dx, dim)



[docs]
def glu_backward_jvp(grad_x, grad_glu, x, dgrad_glu, dx, dim):
    if _capturing():
        _captured = _capture_call(glu_backward_jvp, (grad_x, grad_glu, x, dgrad_glu, dx, dim), {})
        if _captured is not None:
            return _captured
    return _C.glu_backward_jvp(grad_x, grad_glu, x, dgrad_glu, dx, dim)



[docs]
def log_sigmoid_forward(input, *, out=None):
    if out is not None:
        return _C.log_sigmoid_forward(self=input, out=out)
    if _capturing():
        _captured = _capture_call(log_sigmoid_forward, (input,), {})
        if _captured is not None:
            return _captured
    return _C.log_sigmoid_forward(self=input)



[docs]
def rrelu_with_noise_(input, noise, lower=0.125, upper=0.3333333333333333, training=False, generator=None):
    if _capturing():
        _captured = _capture_call(rrelu_with_noise_, (input, noise, lower, upper, training, generator), {})
        if _captured is not None:
            return _captured
    if not isinstance(lower, (tensorplay.Scalar, tensorplay.Tensor)):
        lower = tensorplay.Scalar(lower)
    if not isinstance(upper, (tensorplay.Scalar, tensorplay.Tensor)):
        upper = tensorplay.Scalar(upper)
    return _C.rrelu_with_noise_(input, noise, lower, upper, training, generator)



[docs]
def mkldnn_adaptive_avg_pool2d(input, output_size, *, out=None):
    if out is not None:
        return _C.mkldnn_adaptive_avg_pool2d(self=input, output_size=output_size, out=out)
    if _capturing():
        _captured = _capture_call(mkldnn_adaptive_avg_pool2d, (input, output_size), {})
        if _captured is not None:
            return _captured
    return _C.mkldnn_adaptive_avg_pool2d(self=input, output_size=output_size)


def mkldnn_adaptive_avg_pool2d_backward(grad_output, input):
    if _capturing():
        _captured = _capture_call(mkldnn_adaptive_avg_pool2d_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C.mkldnn_adaptive_avg_pool2d_backward(grad_output, input)

def _adaptive_avg_pool2d(input, output_size):
    if _capturing():
        _captured = _capture_call(_adaptive_avg_pool2d, (input, output_size), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C._adaptive_avg_pool2d(input, output_size)

def _adaptive_avg_pool2d_backward(grad_output, input):
    if _capturing():
        _captured = _capture_call(_adaptive_avg_pool2d_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C._adaptive_avg_pool2d_backward(grad_output, input)

def _adaptive_avg_pool3d(input, output_size):
    if _capturing():
        _captured = _capture_call(_adaptive_avg_pool3d, (input, output_size), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C._adaptive_avg_pool3d(input, output_size)

def _adaptive_avg_pool3d_backward(grad_output, input):
    if _capturing():
        _captured = _capture_call(_adaptive_avg_pool3d_backward, (grad_output, input), {})
        if _captured is not None:
            return _captured
    return _C._adaptive_avg_pool3d_backward(grad_output, input)


[docs]
def reflection_pad1d(input, padding, *, out=None):
    if out is not None:
        return _C.reflection_pad1d(self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(reflection_pad1d, (input, padding), {})
        if _captured is not None:
            return _captured
    return _C.reflection_pad1d(self=input, padding=padding)


def reflection_pad1d_backward(grad_output, input, padding, *, out=None):
    if out is not None:
        return _C.reflection_pad1d_backward(grad_output=grad_output, self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(reflection_pad1d_backward, (grad_output, input, padding), {})
        if _captured is not None:
            return _captured
    return _C.reflection_pad1d_backward(grad_output=grad_output, self=input, padding=padding)


[docs]
def reflection_pad2d(input, padding, *, out=None):
    if out is not None:
        return _C.reflection_pad2d(self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(reflection_pad2d, (input, padding), {})
        if _captured is not None:
            return _captured
    return _C.reflection_pad2d(self=input, padding=padding)


def reflection_pad2d_backward(grad_output, input, padding, *, out=None):
    if out is not None:
        return _C.reflection_pad2d_backward(grad_output=grad_output, self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(reflection_pad2d_backward, (grad_output, input, padding), {})
        if _captured is not None:
            return _captured
    return _C.reflection_pad2d_backward(grad_output=grad_output, self=input, padding=padding)


[docs]
def reflection_pad3d(input, padding, *, out=None):
    if out is not None:
        return _C.reflection_pad3d(self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(reflection_pad3d, (input, padding), {})
        if _captured is not None:
            return _captured
    return _C.reflection_pad3d(self=input, padding=padding)


def reflection_pad3d_backward(grad_output, input, padding, *, out=None):
    if out is not None:
        return _C.reflection_pad3d_backward(grad_output=grad_output, self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(reflection_pad3d_backward, (grad_output, input, padding), {})
        if _captured is not None:
            return _captured
    return _C.reflection_pad3d_backward(grad_output=grad_output, self=input, padding=padding)


[docs]
def replication_pad1d(input, padding, *, out=None):
    if out is not None:
        return _C.replication_pad1d(self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(replication_pad1d, (input, padding), {})
        if _captured is not None:
            return _captured
    return _C.replication_pad1d(self=input, padding=padding)


def replication_pad1d_backward(grad_output, input, padding, *, out=None):
    if out is not None:
        return _C.replication_pad1d_backward(grad_output=grad_output, self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(replication_pad1d_backward, (grad_output, input, padding), {})
        if _captured is not None:
            return _captured
    return _C.replication_pad1d_backward(grad_output=grad_output, self=input, padding=padding)


[docs]
def replication_pad2d(input, padding, *, out=None):
    if out is not None:
        return _C.replication_pad2d(self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(replication_pad2d, (input, padding), {})
        if _captured is not None:
            return _captured
    return _C.replication_pad2d(self=input, padding=padding)


def replication_pad2d_backward(grad_output, input, padding, *, out=None):
    if out is not None:
        return _C.replication_pad2d_backward(grad_output=grad_output, self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(replication_pad2d_backward, (grad_output, input, padding), {})
        if _captured is not None:
            return _captured
    return _C.replication_pad2d_backward(grad_output=grad_output, self=input, padding=padding)


[docs]
def replication_pad3d(input, padding, *, out=None):
    if out is not None:
        return _C.replication_pad3d(self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(replication_pad3d, (input, padding), {})
        if _captured is not None:
            return _captured
    return _C.replication_pad3d(self=input, padding=padding)


def replication_pad3d_backward(grad_output, input, padding, *, out=None):
    if out is not None:
        return _C.replication_pad3d_backward(grad_output=grad_output, self=input, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(replication_pad3d_backward, (grad_output, input, padding), {})
        if _captured is not None:
            return _captured
    return _C.replication_pad3d_backward(grad_output=grad_output, self=input, padding=padding)

def _pad_circular(input, pad):
    if _capturing():
        _captured = _capture_call(_pad_circular, (input, pad), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C._pad_circular(input, pad)

def _pad_enum(input, pad, mode, value=None):
    if _capturing():
        _captured = _capture_call(_pad_enum, (input, pad, mode, value), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C._pad_enum(input, pad, mode, value)


[docs]
def pad(input, pad, mode='constant', value=None):
    if _capturing():
        _captured = _capture_call(pad, (input, pad, mode, value), {})
        if _captured is not None:
            return _captured
    if isinstance(pad, int) and not isinstance(pad, bool):
        pad = [pad]
    return _C.pad(input, pad, mode, value)


def _upsample_bilinear2d_aa(input, output_size, align_corners, scale_factors, *, out=None):
    if out is not None:
        return _C._upsample_bilinear2d_aa(input, output_size, align_corners, scale_factors, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_bilinear2d_aa, (input, output_size, align_corners, scale_factors), {})
        if _captured is not None:
            return _captured
    return _C._upsample_bilinear2d_aa(input, output_size, align_corners, scale_factors)

def _upsample_bicubic2d_aa(input, output_size, align_corners, scale_factors, *, out=None):
    if out is not None:
        return _C._upsample_bicubic2d_aa(input, output_size, align_corners, scale_factors, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_bicubic2d_aa, (input, output_size, align_corners, scale_factors), {})
        if _captured is not None:
            return _captured
    return _C._upsample_bicubic2d_aa(input, output_size, align_corners, scale_factors)

def _upsample_lanczos2d_aa(input, output_size, align_corners, scale_factors, *, out=None):
    if out is not None:
        return _C._upsample_lanczos2d_aa(input, output_size, align_corners, scale_factors, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_lanczos2d_aa, (input, output_size, align_corners, scale_factors), {})
        if _captured is not None:
            return _captured
    return _C._upsample_lanczos2d_aa(input, output_size, align_corners, scale_factors)

def _upsample_nearest_exact1d(input, output_size, scale_factors, *, out=None):
    if out is not None:
        return _C._upsample_nearest_exact1d(input, output_size, scale_factors, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_nearest_exact1d, (input, output_size, scale_factors), {})
        if _captured is not None:
            return _captured
    return _C._upsample_nearest_exact1d(input, output_size, scale_factors)

def _upsample_nearest_exact2d(input, output_size, scale_factors, *, out=None):
    if out is not None:
        return _C._upsample_nearest_exact2d(input, output_size, scale_factors, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_nearest_exact2d, (input, output_size, scale_factors), {})
        if _captured is not None:
            return _captured
    return _C._upsample_nearest_exact2d(input, output_size, scale_factors)

def _upsample_nearest_exact3d(input, output_size, scale_factors, *, out=None):
    if out is not None:
        return _C._upsample_nearest_exact3d(input, output_size, scale_factors, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_nearest_exact3d, (input, output_size, scale_factors), {})
        if _captured is not None:
            return _captured
    return _C._upsample_nearest_exact3d(input, output_size, scale_factors)

def _upsample_bilinear2d_aa_backward(grad_output, output_size, input_size, align_corners, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C._upsample_bilinear2d_aa_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_bilinear2d_aa_backward, (grad_output, output_size, input_size, align_corners, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C._upsample_bilinear2d_aa_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w)

def _upsample_bicubic2d_aa_backward(grad_output, output_size, input_size, align_corners, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C._upsample_bicubic2d_aa_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_bicubic2d_aa_backward, (grad_output, output_size, input_size, align_corners, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C._upsample_bicubic2d_aa_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w)

def _upsample_lanczos2d_aa_backward(grad_output, output_size, input_size, align_corners, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C._upsample_lanczos2d_aa_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_lanczos2d_aa_backward, (grad_output, output_size, input_size, align_corners, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C._upsample_lanczos2d_aa_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, align_corners=align_corners, scales_h=scales_h, scales_w=scales_w)

def _upsample_nearest_exact1d_backward(grad_output, output_size, input_size, scales=None, *, out=None):
    if out is not None:
        return _C._upsample_nearest_exact1d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales=scales, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_nearest_exact1d_backward, (grad_output, output_size, input_size, scales), {})
        if _captured is not None:
            return _captured
    return _C._upsample_nearest_exact1d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales=scales)

def _upsample_nearest_exact2d_backward(grad_output, output_size, input_size, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C._upsample_nearest_exact2d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_nearest_exact2d_backward, (grad_output, output_size, input_size, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C._upsample_nearest_exact2d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales_h=scales_h, scales_w=scales_w)

def _upsample_nearest_exact3d_backward(grad_output, output_size, input_size, scales_d=None, scales_h=None, scales_w=None, *, out=None):
    if out is not None:
        return _C._upsample_nearest_exact3d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales_d=scales_d, scales_h=scales_h, scales_w=scales_w, out=out)
    if _capturing():
        _captured = _capture_call(_upsample_nearest_exact3d_backward, (grad_output, output_size, input_size, scales_d, scales_h, scales_w), {})
        if _captured is not None:
            return _captured
    return _C._upsample_nearest_exact3d_backward(grad_output=grad_output, output_size=output_size, input_size=input_size, scales_d=scales_d, scales_h=scales_h, scales_w=scales_w)


[docs]
def slow_conv_transpose2d(input, weight, kernel_size, bias=None, stride=1, padding=0, output_padding=0, dilation=1, *, out=None):
    if out is not None:
        return _C.slow_conv_transpose2d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, output_padding=output_padding, dilation=dilation, out=out)
    if _capturing():
        _captured = _capture_call(slow_conv_transpose2d, (input, weight, kernel_size, bias, stride, padding, output_padding, dilation), {})
        if _captured is not None:
            return _captured
    return _C.slow_conv_transpose2d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, output_padding=output_padding, dilation=dilation)



[docs]
def slow_conv_transpose3d(input, weight, kernel_size, bias=None, stride=1, padding=0, output_padding=0, dilation=1, *, out=None):
    if out is not None:
        return _C.slow_conv_transpose3d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, output_padding=output_padding, dilation=dilation, out=out)
    if _capturing():
        _captured = _capture_call(slow_conv_transpose3d, (input, weight, kernel_size, bias, stride, padding, output_padding, dilation), {})
        if _captured is not None:
            return _captured
    return _C.slow_conv_transpose3d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, output_padding=output_padding, dilation=dilation)



[docs]
def thnn_conv2d(input, weight, kernel_size, bias=None, stride=1, padding=0, *, out=None):
    if out is not None:
        return _C.thnn_conv2d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(thnn_conv2d, (input, weight, kernel_size, bias, stride, padding), {})
        if _captured is not None:
            return _captured
    return _C.thnn_conv2d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding)


def _slow_conv2d_forward(input, weight, kernel_size, bias, stride, padding, *, out=None):
    if out is not None:
        return _C._slow_conv2d_forward(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(_slow_conv2d_forward, (input, weight, kernel_size, bias, stride, padding), {})
        if _captured is not None:
            return _captured
    return _C._slow_conv2d_forward(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding)

def _slow_conv2d_backward(grad_output, input, weight, kernel_size, stride, padding, output_mask, *, out=None):
    if out is not None:
        return _C._slow_conv2d_backward(grad_output=grad_output, self=input, weight=weight, kernel_size=kernel_size, stride=stride, padding=padding, output_mask=output_mask, out=out)
    if _capturing():
        _captured = _capture_call(_slow_conv2d_backward, (grad_output, input, weight, kernel_size, stride, padding, output_mask), {})
        if _captured is not None:
            return _captured
    return _C._slow_conv2d_backward(grad_output=grad_output, self=input, weight=weight, kernel_size=kernel_size, stride=stride, padding=padding, output_mask=output_mask)

def _conv_depthwise2d(input, weight, kernel_size, bias, stride, padding, dilation, *, out=None):
    if out is not None:
        return _C._conv_depthwise2d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, dilation=dilation, out=out)
    if _capturing():
        _captured = _capture_call(_conv_depthwise2d, (input, weight, kernel_size, bias, stride, padding, dilation), {})
        if _captured is not None:
            return _captured
    return _C._conv_depthwise2d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, dilation=dilation)


[docs]
def conv_depthwise3d(input, weight, kernel_size, bias, stride, padding, dilation):
    if _capturing():
        _captured = _capture_call(conv_depthwise3d, (input, weight, kernel_size, bias, stride, padding, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.conv_depthwise3d(input, weight, kernel_size, bias, stride, padding, dilation)



[docs]
def slow_conv3d(input, weight, kernel_size, bias=None, stride=1, padding=0, *, out=None):
    if out is not None:
        return _C.slow_conv3d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(slow_conv3d, (input, weight, kernel_size, bias, stride, padding), {})
        if _captured is not None:
            return _captured
    return _C.slow_conv3d(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding)



[docs]
def slow_conv3d_forward(input, weight, kernel_size, bias, stride, padding, *, out=None):
    if out is not None:
        return _C.slow_conv3d_forward(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding, out=out)
    if _capturing():
        _captured = _capture_call(slow_conv3d_forward, (input, weight, kernel_size, bias, stride, padding), {})
        if _captured is not None:
            return _captured
    return _C.slow_conv3d_forward(self=input, weight=weight, kernel_size=kernel_size, bias=bias, stride=stride, padding=padding)



[docs]
def slow_conv_dilated2d(input, weight, kernel_size, bias=None, stride=1, padding=0, dilation=1):
    if _capturing():
        _captured = _capture_call(slow_conv_dilated2d, (input, weight, kernel_size, bias, stride, padding, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.slow_conv_dilated2d(input, weight, kernel_size, bias, stride, padding, dilation)



[docs]
def slow_conv_dilated3d(input, weight, kernel_size, bias=None, stride=1, padding=0, dilation=1):
    if _capturing():
        _captured = _capture_call(slow_conv_dilated3d, (input, weight, kernel_size, bias, stride, padding, dilation), {})
        if _captured is not None:
            return _captured
    if isinstance(kernel_size, int) and not isinstance(kernel_size, bool):
        kernel_size = [kernel_size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    if isinstance(padding, int) and not isinstance(padding, bool):
        padding = [padding]
    if isinstance(dilation, int) and not isinstance(dilation, bool):
        dilation = [dilation]
    return _C.slow_conv_dilated3d(input, weight, kernel_size, bias, stride, padding, dilation)


def _add_batch_dim(input, batch_dim, level):
    if _capturing():
        _captured = _capture_call(_add_batch_dim, (input, batch_dim, level), {})
        if _captured is not None:
            return _captured
    return _C._add_batch_dim(input, batch_dim, level)

def _remove_batch_dim(input, level, batch_size, out_dim):
    if _capturing():
        _captured = _capture_call(_remove_batch_dim, (input, level, batch_size, out_dim), {})
        if _captured is not None:
            return _captured
    return _C._remove_batch_dim(input, level, batch_size, out_dim)


[docs]
def special_entr(input, *, out=None):
    if out is not None:
        return _C.special_entr(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_entr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_entr(self=input)



[docs]
def special_ndtri(input, *, out=None):
    if out is not None:
        return _C.special_ndtri(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_ndtri, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_ndtri(self=input)



[docs]
def special_log_ndtr(input, *, out=None):
    if out is not None:
        return _C.special_log_ndtr(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_log_ndtr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_log_ndtr(self=input)



[docs]
def special_expm1(input, *, out=None):
    if out is not None:
        return _C.special_expm1(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_expm1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_expm1(self=input)



[docs]
def special_exp2(input, *, out=None):
    if out is not None:
        return _C.special_exp2(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_exp2, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_exp2(self=input)



[docs]
def special_psi(input, *, out=None):
    if out is not None:
        return _C.special_psi(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_psi, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_psi(self=input)



[docs]
def special_digamma(input, *, out=None):
    if out is not None:
        return _C.special_digamma(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_digamma, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_digamma(self=input)



[docs]
def special_gammaln(input, *, out=None):
    if out is not None:
        return _C.special_gammaln(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_gammaln, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_gammaln(self=input)



[docs]
def special_erf(input, *, out=None):
    if out is not None:
        return _C.special_erf(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_erf, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_erf(self=input)



[docs]
def special_erfc(input, *, out=None):
    if out is not None:
        return _C.special_erfc(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_erfc, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_erfc(self=input)



[docs]
def special_erfcx(input, *, out=None):
    if out is not None:
        return _C.special_erfcx(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_erfcx, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_erfcx(self=input)



[docs]
def special_erfinv(input, *, out=None):
    if out is not None:
        return _C.special_erfinv(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_erfinv, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_erfinv(self=input)



[docs]
def special_ndtr(input, *, out=None):
    if out is not None:
        return _C.special_ndtr(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_ndtr, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_ndtr(self=input)



[docs]
def special_xlog1py(input, other, *, out=None):
    if out is not None:
        return _C.special_xlog1py(input, other, out=out)
    if _capturing():
        _captured = _capture_call(special_xlog1py, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.special_xlog1py(input, other)



[docs]
def special_xlogy(input, other, *, out=None):
    if out is not None:
        return _C.special_xlogy(input, other, out=out)
    if _capturing():
        _captured = _capture_call(special_xlogy, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.special_xlogy(input, other)



[docs]
def special_zeta(input, other, *, out=None):
    if out is not None:
        return _C.special_zeta(input, other, out=out)
    if _capturing():
        _captured = _capture_call(special_zeta, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.special_zeta(input, other)



[docs]
def special_i0(input, *, out=None):
    if out is not None:
        return _C.special_i0(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_i0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_i0(self=input)



[docs]
def special_i0e(input, *, out=None):
    if out is not None:
        return _C.special_i0e(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_i0e, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_i0e(self=input)



[docs]
def special_i1(input, *, out=None):
    if out is not None:
        return _C.special_i1(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_i1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_i1(self=input)



[docs]
def special_i1e(input, *, out=None):
    if out is not None:
        return _C.special_i1e(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_i1e, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_i1e(self=input)



[docs]
def special_logit(input, eps=None, *, out=None):
    if out is not None:
        return _C.special_logit(self=input, eps=eps, out=out)
    if _capturing():
        _captured = _capture_call(special_logit, (input, eps), {})
        if _captured is not None:
            return _captured
    return _C.special_logit(self=input, eps=eps)



[docs]
def special_polygamma(n, input, *, out=None):
    if out is not None:
        return _C.special_polygamma(n=n, self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_polygamma, (n, input), {})
        if _captured is not None:
            return _captured
    return _C.special_polygamma(n=n, self=input)



[docs]
def special_logsumexp(input, dim, keepdim=False, *, out=None):
    if out is not None:
        return _C.special_logsumexp(self=input, dim=dim, keepdim=keepdim, out=out)
    if _capturing():
        _captured = _capture_call(special_logsumexp, (input, dim, keepdim), {})
        if _captured is not None:
            return _captured
    return _C.special_logsumexp(self=input, dim=dim, keepdim=keepdim)



[docs]
def special_expit(input, *, out=None):
    if out is not None:
        return _C.special_expit(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_expit, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_expit(self=input)



[docs]
def special_sinc(input, *, out=None):
    if out is not None:
        return _C.special_sinc(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_sinc, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_sinc(self=input)



[docs]
def special_round(input, *, decimals=0, out=None):
    if out is not None:
        return _C.special_round(self=input, decimals=decimals, out=out)
    if _capturing():
        _captured = _capture_call(special_round, (input,), {'decimals': decimals})
        if _captured is not None:
            return _captured
    return _C.special_round(self=input, decimals=decimals)



[docs]
def special_log1p(input, *, out=None):
    if out is not None:
        return _C.special_log1p(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_log1p, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_log1p(self=input)



[docs]
def special_log_softmax(input, dim, dtype=None):
    if _capturing():
        _captured = _capture_call(special_log_softmax, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.special_log_softmax(input, dim, dtype=dtype)



[docs]
def special_gammainc(input, other, *, out=None):
    if out is not None:
        return _C.special_gammainc(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(special_gammainc, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.special_gammainc(self=input, other=other)



[docs]
def special_gammaincc(input, other, *, out=None):
    if out is not None:
        return _C.special_gammaincc(self=input, other=other, out=out)
    if _capturing():
        _captured = _capture_call(special_gammaincc, (input, other), {})
        if _captured is not None:
            return _captured
    return _C.special_gammaincc(self=input, other=other)



[docs]
def special_multigammaln(input, p, *, out=None):
    if out is not None:
        return _C.special_multigammaln(self=input, p=p, out=out)
    if _capturing():
        _captured = _capture_call(special_multigammaln, (input, p), {})
        if _captured is not None:
            return _captured
    return _C.special_multigammaln(self=input, p=p)



[docs]
def special_softmax(input, dim, dtype=None):
    if _capturing():
        _captured = _capture_call(special_softmax, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C.special_softmax(input, dim, dtype)



[docs]
def fft_hfft(input, n=None, dim=-1, norm=None, *, out=None):
    if out is not None:
        return _C.fft_hfft(self=input, n=n, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_hfft, (input, n, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_hfft(self=input, n=n, dim=dim, norm=norm)



[docs]
def fft_ihfft(input, n=None, dim=-1, norm=None, *, out=None):
    if out is not None:
        return _C.fft_ihfft(self=input, n=n, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_ihfft, (input, n, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_ihfft(self=input, n=n, dim=dim, norm=norm)



[docs]
def fft_hfft2(input, s=None, dim=[-2,-1], norm=None, *, out=None):
    if out is not None:
        return _C.fft_hfft2(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_hfft2, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_hfft2(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_ihfft2(input, s=None, dim=[-2,-1], norm=None, *, out=None):
    if out is not None:
        return _C.fft_ihfft2(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_ihfft2, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_ihfft2(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_fftn(input, s=None, dim=None, norm=None, *, out=None):
    if out is not None:
        return _C.fft_fftn(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_fftn, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_fftn(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_ifftn(input, s=None, dim=None, norm=None, *, out=None):
    if out is not None:
        return _C.fft_ifftn(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_ifftn, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_ifftn(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_rfftn(input, s=None, dim=None, norm=None, *, out=None):
    if out is not None:
        return _C.fft_rfftn(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_rfftn, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_rfftn(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_irfftn(input, s=None, dim=None, norm=None, *, out=None):
    if out is not None:
        return _C.fft_irfftn(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_irfftn, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_irfftn(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_hfftn(input, s=None, dim=None, norm=None, *, out=None):
    if out is not None:
        return _C.fft_hfftn(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_hfftn, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_hfftn(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_ihfftn(input, s=None, dim=None, norm=None, *, out=None):
    if out is not None:
        return _C.fft_ihfftn(self=input, s=s, dim=dim, norm=norm, out=out)
    if _capturing():
        _captured = _capture_call(fft_ihfftn, (input, s, dim, norm), {})
        if _captured is not None:
            return _captured
    return _C.fft_ihfftn(self=input, s=s, dim=dim, norm=norm)



[docs]
def fft_fftfreq(n, d=1.0, *, dtype=None, layout=None, device=None, pin_memory=None, out=None):
    if out is not None:
        return _C.fft_fftfreq(n=n, d=d, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory, out=out)
    if _capturing():
        _captured = _capture_call(fft_fftfreq, (n, d), {'dtype': dtype, 'layout': layout, 'device': device, 'pin_memory': pin_memory})
        if _captured is not None:
            return _captured
    return _C.fft_fftfreq(n=n, d=d, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory)



[docs]
def fft_rfftfreq(n, d=1.0, *, dtype=None, layout=None, device=None, pin_memory=None, out=None):
    if out is not None:
        return _C.fft_rfftfreq(n=n, d=d, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory, out=out)
    if _capturing():
        _captured = _capture_call(fft_rfftfreq, (n, d), {'dtype': dtype, 'layout': layout, 'device': device, 'pin_memory': pin_memory})
        if _captured is not None:
            return _captured
    return _C.fft_rfftfreq(n=n, d=d, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory)



[docs]
def fft_fftshift(input, dim=None):
    if _capturing():
        _captured = _capture_call(fft_fftshift, (input, dim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.fft_fftshift(input, dim)



[docs]
def fft_ifftshift(input, dim=None):
    if _capturing():
        _captured = _capture_call(fft_ifftshift, (input, dim), {})
        if _captured is not None:
            return _captured
    if isinstance(dim, int) and not isinstance(dim, bool):
        dim = [dim]
    return _C.fft_ifftshift(input, dim)


def _linalg_det(A, *, out=None):
    if out is not None:
        return _C._linalg_det(A=A, out=out)
    if _capturing():
        _captured = _capture_call(_linalg_det, (A,), {})
        if _captured is not None:
            return _captured
    return _C._linalg_det(A=A)


[docs]
def det(input):
    if _capturing():
        _captured = _capture_call(det, (input,), {})
        if _captured is not None:
            return _captured
    return _C.det(input)


def _linalg_slogdet(A, *, out=None):
    if out is not None:
        return _C._linalg_slogdet(A=A, out=out)
    if _capturing():
        _captured = _capture_call(_linalg_slogdet, (A,), {})
        if _captured is not None:
            return _captured
    return _C._linalg_slogdet(A=A)


[docs]
def slogdet(input, *, out=None):
    if out is not None:
        return _C.slogdet(self=input, out=out)
    if _capturing():
        _captured = _capture_call(slogdet, (input,), {})
        if _captured is not None:
            return _captured
    return _C.slogdet(self=input)



[docs]
def logdet(input):
    if _capturing():
        _captured = _capture_call(logdet, (input,), {})
        if _captured is not None:
            return _captured
    return _C.logdet(input)


def _linalg_eigvals(input):
    if _capturing():
        _captured = _capture_call(_linalg_eigvals, (input,), {})
        if _captured is not None:
            return _captured
    return _C._linalg_eigvals(input)

def _linalg_eigh(A, UPLO='L', compute_v=True, *, out=None):
    if out is not None:
        return _C._linalg_eigh(A=A, UPLO=UPLO, compute_v=compute_v, out=out)
    if _capturing():
        _captured = _capture_call(_linalg_eigh, (A, UPLO, compute_v), {})
        if _captured is not None:
            return _captured
    return _C._linalg_eigh(A=A, UPLO=UPLO, compute_v=compute_v)


[docs]
def inverse(input, *, out=None):
    if out is not None:
        return _C.inverse(self=input, out=out)
    if _capturing():
        _captured = _capture_call(inverse, (input,), {})
        if _captured is not None:
            return _captured
    return _C.inverse(self=input)


def _linalg_svd(A, full_matrices=False, compute_uv=True, *, driver=None, out=None):
    if out is not None:
        return _C._linalg_svd(A=A, full_matrices=full_matrices, compute_uv=compute_uv, driver=driver, out=out)
    if _capturing():
        _captured = _capture_call(_linalg_svd, (A, full_matrices, compute_uv), {'driver': driver})
        if _captured is not None:
            return _captured
    return _C._linalg_svd(A=A, full_matrices=full_matrices, compute_uv=compute_uv, driver=driver)

def _linalg_solve_ex(A, B, *, left=True, check_errors=False, out=None):
    if out is not None:
        return _C._linalg_solve_ex(A=A, B=B, left=left, check_errors=check_errors, out=out)
    if _capturing():
        _captured = _capture_call(_linalg_solve_ex, (A, B), {'left': left, 'check_errors': check_errors})
        if _captured is not None:
            return _captured
    return _C._linalg_solve_ex(A=A, B=B, left=left, check_errors=check_errors)

def _spsolve(A, B, left=True):
    if _capturing():
        _captured = _capture_call(_spsolve, (A, B, left), {})
        if _captured is not None:
            return _captured
    return _C._spsolve(A, B, left=left)


[docs]
def nested_to_padded_tensor(input, padding, output_size=None):
    if _capturing():
        _captured = _capture_call(nested_to_padded_tensor, (input, padding, output_size), {})
        if _captured is not None:
            return _captured
    if isinstance(output_size, int) and not isinstance(output_size, bool):
        output_size = [output_size]
    return _C.nested_to_padded_tensor(input, padding, output_size)


def _test_serialization_subcmul(input, other, alpha=1):
    if _capturing():
        _captured = _capture_call(_test_serialization_subcmul, (input, other, alpha), {})
        if _captured is not None:
            return _captured
    if not isinstance(alpha, (tensorplay.Scalar, tensorplay.Tensor)):
        alpha = tensorplay.Scalar(alpha)
    return _C._test_serialization_subcmul(input, other, alpha)

def _test_parallel_materialize(input, num_parallel, skip_first=False):
    if _capturing():
        _captured = _capture_call(_test_parallel_materialize, (input, num_parallel, skip_first), {})
        if _captured is not None:
            return _captured
    return _C._test_parallel_materialize(input, num_parallel, skip_first)

def _test_optional_intlist(values, addends):
    if _capturing():
        _captured = _capture_call(_test_optional_intlist, (values, addends), {})
        if _captured is not None:
            return _captured
    if isinstance(addends, int) and not isinstance(addends, bool):
        addends = [addends]
    return _C._test_optional_intlist(values, addends)

def _test_optional_filled_intlist(values, addends):
    if _capturing():
        _captured = _capture_call(_test_optional_filled_intlist, (values, addends), {})
        if _captured is not None:
            return _captured
    if isinstance(addends, int) and not isinstance(addends, bool):
        addends = [addends]
    return _C._test_optional_filled_intlist(values, addends)

def _test_optional_floatlist(values, addends):
    if _capturing():
        _captured = _capture_call(_test_optional_floatlist, (values, addends), {})
        if _captured is not None:
            return _captured
    return _C._test_optional_floatlist(values, addends)

def _test_string_default(dummy, a='"\'\\', b='"\'\\'):
    if _capturing():
        _captured = _capture_call(_test_string_default, (dummy, a, b), {})
        if _captured is not None:
            return _captured
    return _C._test_string_default(dummy, a, b)

def _test_ambiguous_defaults(dummy, a=1, b=1):
    if _capturing():
        _captured = _capture_call(_test_ambiguous_defaults, (dummy, a, b), {})
        if _captured is not None:
            return _captured
    return _C._test_ambiguous_defaults(dummy, a, b)

def _test_warn_in_autograd(input):
    if _capturing():
        _captured = _capture_call(_test_warn_in_autograd, (input,), {})
        if _captured is not None:
            return _captured
    return _C._test_warn_in_autograd(input)

def _test_autograd_multiple_dispatch(input):
    if _capturing():
        _captured = _capture_call(_test_autograd_multiple_dispatch, (input,), {})
        if _captured is not None:
            return _captured
    return _C._test_autograd_multiple_dispatch(input)

def _test_autograd_multiple_dispatch_view(input):
    if _capturing():
        _captured = _capture_call(_test_autograd_multiple_dispatch_view, (input,), {})
        if _captured is not None:
            return _captured
    return _C._test_autograd_multiple_dispatch_view(input)

def _test_autograd_multiple_dispatch_view_copy(input):
    if _capturing():
        _captured = _capture_call(_test_autograd_multiple_dispatch_view_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C._test_autograd_multiple_dispatch_view_copy(input)


[docs]
def segment_reduce(data, reduce, lengths=None, indices=None, offsets=None, axis=0, unsafe=False, initial=None):
    if _capturing():
        _captured = _capture_call(segment_reduce, (data, reduce, lengths, indices, offsets, axis, unsafe, initial), {})
        if _captured is not None:
            return _captured
    if initial is not None and not isinstance(initial, (tensorplay.Scalar, tensorplay.Tensor)):
        initial = tensorplay.Scalar(initial)
    return _C.segment_reduce(data, reduce, lengths=lengths, indices=indices, offsets=offsets, axis=axis, unsafe=unsafe, initial=initial)


def _segment_reduce_backward(grad, output, data, reduce, lengths=None, offsets=None, axis=0, initial=None):
    if _capturing():
        _captured = _capture_call(_segment_reduce_backward, (grad, output, data, reduce, lengths, offsets, axis, initial), {})
        if _captured is not None:
            return _captured
    if initial is not None and not isinstance(initial, (tensorplay.Scalar, tensorplay.Tensor)):
        initial = tensorplay.Scalar(initial)
    return _C._segment_reduce_backward(grad, output, data, reduce, lengths=lengths, offsets=offsets, axis=axis, initial=initial)


[docs]
def pad_sequence(sequences, batch_first=False, padding_value=0.0, padding_side='right'):
    if _capturing():
        _captured = _capture_call(pad_sequence, (sequences, batch_first, padding_value, padding_side), {})
        if _captured is not None:
            return _captured
    return _C.pad_sequence(sequences, batch_first, padding_value, padding_side)



[docs]
def flatten_dense_tensors(*args):
    if _capturing():
        _captured = _capture_call(flatten_dense_tensors, (*args,), {})
        if _captured is not None:
            return _captured
    return _C.flatten_dense_tensors(*args)



[docs]
def unflatten_dense_tensors(flat, tensors):
    if _capturing():
        _captured = _capture_call(unflatten_dense_tensors, (flat, tensors), {})
        if _captured is not None:
            return _captured
    return _C.unflatten_dense_tensors(flat, tensors)


def _nested_tensor_from_tensor_list(list, dtype=None, layout=None, device=None, pin_memory=None):
    if _capturing():
        _captured = _capture_call(_nested_tensor_from_tensor_list, (list, dtype, layout, device, pin_memory), {})
        if _captured is not None:
            return _captured
    return _C._nested_tensor_from_tensor_list(list, dtype, layout, _ensure_device(device), pin_memory)

def _fw_primal_copy(input, level):
    if _capturing():
        _captured = _capture_call(_fw_primal_copy, (input, level), {})
        if _captured is not None:
            return _captured
    return _C._fw_primal_copy(input, level)

def _make_dual_copy(primal, tangent, level):
    if _capturing():
        _captured = _capture_call(_make_dual_copy, (primal, tangent, level), {})
        if _captured is not None:
            return _captured
    return _C._make_dual_copy(primal, tangent, level)


[docs]
def view_as_real_copy(input):
    if _capturing():
        _captured = _capture_call(view_as_real_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.view_as_real_copy(input)



[docs]
def view_as_complex_copy(input):
    if _capturing():
        _captured = _capture_call(view_as_complex_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.view_as_complex_copy(input)


def _conj_copy(input):
    if _capturing():
        _captured = _capture_call(_conj_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C._conj_copy(input)

def _neg_view_copy(input):
    if _capturing():
        _captured = _capture_call(_neg_view_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C._neg_view_copy(input)


[docs]
def as_strided_copy(input, size, stride, storage_offset=None):
    if _capturing():
        _captured = _capture_call(as_strided_copy, (input, size, stride, storage_offset), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C.as_strided_copy(input, size, stride, storage_offset)


def _sparse_broadcast_to_copy(input, size):
    if _capturing():
        _captured = _capture_call(_sparse_broadcast_to_copy, (input, size), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    return _C._sparse_broadcast_to_copy(input, size)

def _reshape_alias_copy(input, size, stride):
    if _capturing():
        _captured = _capture_call(_reshape_alias_copy, (input, size, stride), {})
        if _captured is not None:
            return _captured
    if isinstance(size, int) and not isinstance(size, bool):
        size = [size]
    if isinstance(stride, int) and not isinstance(stride, bool):
        stride = [stride]
    return _C._reshape_alias_copy(input, size, stride)

def _indices_copy(input):
    if _capturing():
        _captured = _capture_call(_indices_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C._indices_copy(input)

def _values_copy(input):
    if _capturing():
        _captured = _capture_call(_values_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C._values_copy(input)


[docs]
def indices_copy(input):
    if _capturing():
        _captured = _capture_call(indices_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.indices_copy(input)



[docs]
def values_copy(input):
    if _capturing():
        _captured = _capture_call(values_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.values_copy(input)



[docs]
def crow_indices_copy(input):
    if _capturing():
        _captured = _capture_call(crow_indices_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.crow_indices_copy(input)



[docs]
def col_indices_copy(input):
    if _capturing():
        _captured = _capture_call(col_indices_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.col_indices_copy(input)



[docs]
def ccol_indices_copy(input):
    if _capturing():
        _captured = _capture_call(ccol_indices_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.ccol_indices_copy(input)



[docs]
def row_indices_copy(input):
    if _capturing():
        _captured = _capture_call(row_indices_copy, (input,), {})
        if _captured is not None:
            return _captured
    return _C.row_indices_copy(input)



[docs]
def to_padded_tensor(input, padding, output_size=None):
    if _capturing():
        _captured = _capture_call(to_padded_tensor, (input, padding, output_size), {})
        if _captured is not None:
            return _captured
    return input.to_padded_tensor(padding=padding, output_size=output_size)


def _jagged_to_padded_dense_forward(values, offsets, max_lengths, padding_value=0.0):
    if _capturing():
        _captured = _capture_call(_jagged_to_padded_dense_forward, (values, offsets, max_lengths, padding_value), {})
        if _captured is not None:
            return _captured
    if isinstance(max_lengths, int) and not isinstance(max_lengths, bool):
        max_lengths = [max_lengths]
    return _C._jagged_to_padded_dense_forward(values, offsets, max_lengths, padding_value)

def _padded_dense_to_jagged_forward(dense, offsets, total_L=None):
    if _capturing():
        _captured = _capture_call(_padded_dense_to_jagged_forward, (dense, offsets, total_L), {})
        if _captured is not None:
            return _captured
    return _C._padded_dense_to_jagged_forward(dense, offsets, total_L)

def _nested_from_padded_tensor(padded, offsets, dummy, ragged_idx=1, min_seqlen=None, max_seqlen=None, sum_S=None):
    if _capturing():
        _captured = _capture_call(_nested_from_padded_tensor, (padded, offsets, dummy, ragged_idx, min_seqlen, max_seqlen, sum_S), {})
        if _captured is not None:
            return _captured
    return _C._nested_from_padded_tensor(padded, offsets, dummy, ragged_idx, min_seqlen, max_seqlen, sum_S)

def _nested_tensor_softmax_with_shape(input, query):
    if _capturing():
        _captured = _capture_call(_nested_tensor_softmax_with_shape, (input, query), {})
        if _captured is not None:
            return _captured
    return _C._nested_tensor_softmax_with_shape(input, query)

def _safe_softmax(input, dim, dtype=None):
    if _capturing():
        _captured = _capture_call(_safe_softmax, (input, dim, dtype), {})
        if _captured is not None:
            return _captured
    return _C._safe_softmax(input, dim, dtype)

def _transformer_encoder_layer_fwd(src, embed_dim, num_heads, qkv_weight, qkv_bias, proj_weight, proj_bias, use_gelu, norm_first, eps, norm_weight_1, norm_bias_1, norm_weight_2, norm_bias_2, ffn_weight_1, ffn_bias_1, ffn_weight_2, ffn_bias_2, mask=None, mask_type=None):
    if _capturing():
        _captured = _capture_call(_transformer_encoder_layer_fwd, (src, embed_dim, num_heads, qkv_weight, qkv_bias, proj_weight, proj_bias, use_gelu, norm_first, eps, norm_weight_1, norm_bias_1, norm_weight_2, norm_bias_2, ffn_weight_1, ffn_bias_1, ffn_weight_2, ffn_bias_2, mask, mask_type), {})
        if _captured is not None:
            return _captured
    return _C._transformer_encoder_layer_fwd(src, embed_dim, num_heads, qkv_weight, qkv_bias, proj_weight, proj_bias, use_gelu, norm_first, eps, norm_weight_1, norm_bias_1, norm_weight_2, norm_bias_2, ffn_weight_1, ffn_bias_1, ffn_weight_2, ffn_bias_2, mask, mask_type)

def _native_multi_head_attention(query, key, value, embed_dim, num_head, qkv_weight, qkv_bias, proj_weight, proj_bias, mask=None, need_weights=True, average_attn_weights=True, mask_type=None):
    if _capturing():
        _captured = _capture_call(_native_multi_head_attention, (query, key, value, embed_dim, num_head, qkv_weight, qkv_bias, proj_weight, proj_bias, mask, need_weights, average_attn_weights, mask_type), {})
        if _captured is not None:
            return _captured
    return _C._native_multi_head_attention(query, key, value, embed_dim, num_head, qkv_weight, qkv_bias, proj_weight, proj_bias, mask, need_weights, average_attn_weights, mask_type)

def _fused_sdp_choice(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, scale=None, enable_gqa=False):
    if _capturing():
        _captured = _capture_call(_fused_sdp_choice, (query, key, value, attn_mask, dropout_p, is_causal, scale, enable_gqa), {})
        if _captured is not None:
            return _captured
    return _C._fused_sdp_choice(query, key, value, attn_mask, dropout_p, is_causal, scale=scale, enable_gqa=enable_gqa)

def _scaled_dot_product_attention_math(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, dropout_mask=None, scale=None, enable_gqa=False):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_attention_math, (query, key, value, attn_mask, dropout_p, is_causal, dropout_mask, scale, enable_gqa), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_attention_math(query, key, value, attn_mask, dropout_p, is_causal, dropout_mask, scale=scale, enable_gqa=enable_gqa)

def _scaled_dot_product_attention_math_for_mps(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, dropout_mask=None, scale=None, enable_gqa=False):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_attention_math_for_mps, (query, key, value, attn_mask, dropout_p, is_causal, dropout_mask, scale, enable_gqa), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_attention_math_for_mps(query, key, value, attn_mask, dropout_p, is_causal, dropout_mask, scale=scale, enable_gqa=enable_gqa)

def _scaled_dot_product_flash_attention(query, key, value, dropout_p=0.0, is_causal=False, return_debug_mask=False, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_flash_attention, (query, key, value, dropout_p, is_causal, return_debug_mask, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_flash_attention(query, key, value, dropout_p, is_causal, return_debug_mask, scale=scale)

def _scaled_dot_product_flash_attention_for_cpu(query, key, value, dropout_p=0.0, is_causal=False, attn_mask=None, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_flash_attention_for_cpu, (query, key, value, dropout_p, is_causal, attn_mask, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_flash_attention_for_cpu(query, key, value, dropout_p, is_causal, attn_mask=attn_mask, scale=scale)

def _scaled_dot_product_fused_attention_overrideable(query, key, value, attn_bias=None, dropout_p=0.0, is_causal=False, return_debug_mask=False, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_fused_attention_overrideable, (query, key, value, attn_bias, dropout_p, is_causal, return_debug_mask, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_fused_attention_overrideable(query, key, value, attn_bias, dropout_p, is_causal, return_debug_mask, scale=scale)

def _scaled_dot_product_flash_attention_backward(grad_out, query, key, value, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, philox_seed, philox_offset, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_flash_attention_backward, (grad_out, query, key, value, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, philox_seed, philox_offset, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_flash_attention_backward(grad_out, query, key, value, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, philox_seed, philox_offset, scale=scale)

def _scaled_dot_product_flash_attention_for_cpu_backward(grad_out, query, key, value, out, logsumexp, dropout_p, is_causal, attn_mask=None, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_flash_attention_for_cpu_backward, (grad_out, query, key, value, out, logsumexp, dropout_p, is_causal, attn_mask, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_flash_attention_for_cpu_backward(grad_out, query, key, value, out, logsumexp, dropout_p, is_causal, attn_mask=attn_mask, scale=scale)

def _scaled_dot_product_fused_attention_overrideable_backward(grad_out, query, key, value, attn_bias, grad_input_mask, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, philox_seed, philox_offset, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_fused_attention_overrideable_backward, (grad_out, query, key, value, attn_bias, grad_input_mask, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, philox_seed, philox_offset, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_fused_attention_overrideable_backward(grad_out, query, key, value, attn_bias, grad_input_mask, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, philox_seed, philox_offset, scale=scale)

def _scaled_dot_product_efficient_attention(query, key, value, attn_bias, compute_log_sumexp, dropout_p=0.0, is_causal=False, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_efficient_attention, (query, key, value, attn_bias, compute_log_sumexp, dropout_p, is_causal, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_efficient_attention(query, key, value, attn_bias, compute_log_sumexp, dropout_p, is_causal, scale=scale)

def _scaled_dot_product_efficient_attention_backward(grad_out_, query, key, value, attn_bias, out, logsumexp, philox_seed, philox_offset, dropout_p, grad_input_mask, is_causal=False, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_efficient_attention_backward, (grad_out_, query, key, value, attn_bias, out, logsumexp, philox_seed, philox_offset, dropout_p, grad_input_mask, is_causal, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_efficient_attention_backward(grad_out_, query, key, value, attn_bias, out, logsumexp, philox_seed, philox_offset, dropout_p, grad_input_mask, is_causal, scale=scale)

def _scaled_dot_product_cudnn_attention(query, key, value, attn_bias, compute_log_sumexp, dropout_p=0.0, is_causal=False, return_debug_mask=False, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_cudnn_attention, (query, key, value, attn_bias, compute_log_sumexp, dropout_p, is_causal, return_debug_mask, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_cudnn_attention(query, key, value, attn_bias, compute_log_sumexp, dropout_p, is_causal, return_debug_mask, scale=scale)

def _scaled_dot_product_cudnn_attention_backward(grad_out, query, key, value, out, logsumexp, philox_seed, philox_offset, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, scale=None):
    if _capturing():
        _captured = _capture_call(_scaled_dot_product_cudnn_attention_backward, (grad_out, query, key, value, out, logsumexp, philox_seed, philox_offset, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, scale), {})
        if _captured is not None:
            return _captured
    return _C._scaled_dot_product_cudnn_attention_backward(grad_out, query, key, value, out, logsumexp, philox_seed, philox_offset, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, scale=scale)

def _flash_attention_forward(query, key, value, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, return_debug_mask, scale=None, window_size_left=None, window_size_right=None, seqused_k=None, alibi_slopes=None, block_table=None, num_splits=None):
    if _capturing():
        _captured = _capture_call(_flash_attention_forward, (query, key, value, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, return_debug_mask, scale, window_size_left, window_size_right, seqused_k, alibi_slopes, block_table, num_splits), {})
        if _captured is not None:
            return _captured
    return _C._flash_attention_forward(query, key, value, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, return_debug_mask, scale=scale, window_size_left=window_size_left, window_size_right=window_size_right, seqused_k=seqused_k, alibi_slopes=alibi_slopes, block_table=block_table, num_splits=num_splits)

def _flash_attention_forward_no_dropout_inplace(out, query, key, value, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, return_debug_mask, scale=None, window_size_left=None, window_size_right=None, seqused_k=None, alibi_slopes=None, block_table=None, num_splits=None):
    if _capturing():
        _captured = _capture_call(_flash_attention_forward_no_dropout_inplace, (out, query, key, value, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, return_debug_mask, scale, window_size_left, window_size_right, seqused_k, alibi_slopes, block_table, num_splits), {})
        if _captured is not None:
            return _captured
    return _C._flash_attention_forward_no_dropout_inplace(out, query, key, value, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, return_debug_mask, scale=scale, window_size_left=window_size_left, window_size_right=window_size_right, seqused_k=seqused_k, alibi_slopes=alibi_slopes, block_table=block_table, num_splits=num_splits)

def _flash_attention_backward(grad_out, query, key, value, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, rng_state, unused, scale=None, window_size_left=None, window_size_right=None):
    if _capturing():
        _captured = _capture_call(_flash_attention_backward, (grad_out, query, key, value, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, rng_state, unused, scale, window_size_left, window_size_right), {})
        if _captured is not None:
            return _captured
    return _C._flash_attention_backward(grad_out, query, key, value, out, logsumexp, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, rng_state, unused, scale=scale, window_size_left=window_size_left, window_size_right=window_size_right)

def _efficient_attention_forward(query, key, value, bias, cu_seqlens_q, cu_seqlens_k, max_seqlen_q, max_seqlen_k, dropout_p, custom_mask_type, compute_log_sumexp=False, scale=None, seqlen_k=None, window_size=None):
    if _capturing():
        _captured = _capture_call(_efficient_attention_forward, (query, key, value, bias, cu_seqlens_q, cu_seqlens_k, max_seqlen_q, max_seqlen_k, dropout_p, custom_mask_type, compute_log_sumexp, scale, seqlen_k, window_size), {})
        if _captured is not None:
            return _captured
    return _C._efficient_attention_forward(query, key, value, bias, cu_seqlens_q, cu_seqlens_k, max_seqlen_q, max_seqlen_k, dropout_p, custom_mask_type, compute_log_sumexp, scale=scale, seqlen_k=seqlen_k, window_size=window_size)

def _efficient_attention_backward(grad_out_, query, key, value, bias, out, cu_seqlens_q, cu_seqlens_k, max_seqlen_q, max_seqlen_k, logsumexp, dropout_p, philox_seed, philox_offset, custom_mask_type, bias_requires_grad, scale=None, num_splits_key=None, window_size=None, shared_storage_dqdkdv=False):
    if _capturing():
        _captured = _capture_call(_efficient_attention_backward, (grad_out_, query, key, value, bias, out, cu_seqlens_q, cu_seqlens_k, max_seqlen_q, max_seqlen_k, logsumexp, dropout_p, philox_seed, philox_offset, custom_mask_type, bias_requires_grad, scale, num_splits_key, window_size, shared_storage_dqdkdv), {})
        if _captured is not None:
            return _captured
    return _C._efficient_attention_backward(grad_out_, query, key, value, bias, out, cu_seqlens_q, cu_seqlens_k, max_seqlen_q, max_seqlen_k, logsumexp, dropout_p, philox_seed, philox_offset, custom_mask_type, bias_requires_grad, scale=scale, num_splits_key=num_splits_key, window_size=window_size, shared_storage_dqdkdv=shared_storage_dqdkdv)

def _cudnn_attention_forward(query, key, value, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, compute_log_sumexp, dropout_p=0.0, is_causal=False, return_debug_mask=False, scale=None, seqused_k=None, block_table=None):
    if _capturing():
        _captured = _capture_call(_cudnn_attention_forward, (query, key, value, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, compute_log_sumexp, dropout_p, is_causal, return_debug_mask, scale, seqused_k, block_table), {})
        if _captured is not None:
            return _captured
    return _C._cudnn_attention_forward(query, key, value, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, compute_log_sumexp, dropout_p, is_causal, return_debug_mask, scale=scale, seqused_k=seqused_k, block_table=block_table)

def _cudnn_attention_backward(grad_out, query, key, value, out, logsumexp, philox_seed, philox_offset, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, scale=None):
    if _capturing():
        _captured = _capture_call(_cudnn_attention_backward, (grad_out, query, key, value, out, logsumexp, philox_seed, philox_offset, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, scale), {})
        if _captured is not None:
            return _captured
    return _C._cudnn_attention_backward(grad_out, query, key, value, out, logsumexp, philox_seed, philox_offset, attn_bias, cum_seq_q, cum_seq_k, max_q, max_k, dropout_p, is_causal, scale=scale)

def _triton_scaled_dot_attention(q, k, v, dropout_p=0.0):
    if _capturing():
        _captured = _capture_call(_triton_scaled_dot_attention, (q, k, v, dropout_p), {})
        if _captured is not None:
            return _captured
    return _C._triton_scaled_dot_attention(q, k, v, dropout_p)

def _fill_mem_eff_dropout_mask_(input, dropout_p, seed, offset):
    if _capturing():
        _captured = _capture_call(_fill_mem_eff_dropout_mask_, (input, dropout_p, seed, offset), {})
        if _captured is not None:
            return _captured
    return _C._fill_mem_eff_dropout_mask_(input, dropout_p, seed, offset)

def _triton_multi_head_attention(query, key, value, embed_dim, num_head, qkv_weight, qkv_bias, proj_weight, proj_bias, mask=None):
    if _capturing():
        _captured = _capture_call(_triton_multi_head_attention, (query, key, value, embed_dim, num_head, qkv_weight, qkv_bias, proj_weight, proj_bias, mask), {})
        if _captured is not None:
            return _captured
    return _C._triton_multi_head_attention(query, key, value, embed_dim, num_head, qkv_weight, qkv_bias, proj_weight, proj_bias, mask)


[docs]
def special_airy_ai(x, *, out=None):
    if out is not None:
        return _C.special_airy_ai(x=x, out=out)
    if _capturing():
        _captured = _capture_call(special_airy_ai, (x,), {})
        if _captured is not None:
            return _captured
    return _C.special_airy_ai(x=x)



[docs]
def special_bessel_j0(input, *, out=None):
    if out is not None:
        return _C.special_bessel_j0(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_bessel_j0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_bessel_j0(self=input)



[docs]
def special_bessel_j1(input, *, out=None):
    if out is not None:
        return _C.special_bessel_j1(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_bessel_j1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_bessel_j1(self=input)



[docs]
def special_bessel_y0(input, *, out=None):
    if out is not None:
        return _C.special_bessel_y0(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_bessel_y0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_bessel_y0(self=input)



[docs]
def special_bessel_y1(input, *, out=None):
    if out is not None:
        return _C.special_bessel_y1(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_bessel_y1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_bessel_y1(self=input)



[docs]
def special_chebyshev_polynomial_t(x, n, *, out=None):
    if out is not None:
        return _C.special_chebyshev_polynomial_t(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_chebyshev_polynomial_t, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_chebyshev_polynomial_t(x, n)



[docs]
def special_chebyshev_polynomial_u(x, n, *, out=None):
    if out is not None:
        return _C.special_chebyshev_polynomial_u(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_chebyshev_polynomial_u, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_chebyshev_polynomial_u(x, n)



[docs]
def special_chebyshev_polynomial_v(x, n, *, out=None):
    if out is not None:
        return _C.special_chebyshev_polynomial_v(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_chebyshev_polynomial_v, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_chebyshev_polynomial_v(x, n)



[docs]
def special_chebyshev_polynomial_w(x, n, *, out=None):
    if out is not None:
        return _C.special_chebyshev_polynomial_w(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_chebyshev_polynomial_w, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_chebyshev_polynomial_w(x, n)



[docs]
def special_hermite_polynomial_h(x, n, *, out=None):
    if out is not None:
        return _C.special_hermite_polynomial_h(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_hermite_polynomial_h, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_hermite_polynomial_h(x, n)



[docs]
def special_hermite_polynomial_he(x, n, *, out=None):
    if out is not None:
        return _C.special_hermite_polynomial_he(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_hermite_polynomial_he, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_hermite_polynomial_he(x, n)



[docs]
def special_laguerre_polynomial_l(x, n, *, out=None):
    if out is not None:
        return _C.special_laguerre_polynomial_l(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_laguerre_polynomial_l, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_laguerre_polynomial_l(x, n)



[docs]
def special_legendre_polynomial_p(x, n, *, out=None):
    if out is not None:
        return _C.special_legendre_polynomial_p(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_legendre_polynomial_p, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_legendre_polynomial_p(x, n)



[docs]
def special_modified_bessel_i0(input, *, out=None):
    if out is not None:
        return _C.special_modified_bessel_i0(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_modified_bessel_i0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_modified_bessel_i0(self=input)



[docs]
def special_modified_bessel_i1(input, *, out=None):
    if out is not None:
        return _C.special_modified_bessel_i1(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_modified_bessel_i1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_modified_bessel_i1(self=input)



[docs]
def special_modified_bessel_k0(input, *, out=None):
    if out is not None:
        return _C.special_modified_bessel_k0(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_modified_bessel_k0, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_modified_bessel_k0(self=input)



[docs]
def special_modified_bessel_k1(input, *, out=None):
    if out is not None:
        return _C.special_modified_bessel_k1(self=input, out=out)
    if _capturing():
        _captured = _capture_call(special_modified_bessel_k1, (input,), {})
        if _captured is not None:
            return _captured
    return _C.special_modified_bessel_k1(self=input)



[docs]
def special_scaled_modified_bessel_k0(x, *, out=None):
    if out is not None:
        return _C.special_scaled_modified_bessel_k0(x=x, out=out)
    if _capturing():
        _captured = _capture_call(special_scaled_modified_bessel_k0, (x,), {})
        if _captured is not None:
            return _captured
    return _C.special_scaled_modified_bessel_k0(x=x)



[docs]
def special_scaled_modified_bessel_k1(x, *, out=None):
    if out is not None:
        return _C.special_scaled_modified_bessel_k1(x=x, out=out)
    if _capturing():
        _captured = _capture_call(special_scaled_modified_bessel_k1, (x,), {})
        if _captured is not None:
            return _captured
    return _C.special_scaled_modified_bessel_k1(x=x)



[docs]
def special_shifted_chebyshev_polynomial_t(x, n, *, out=None):
    if out is not None:
        return _C.special_shifted_chebyshev_polynomial_t(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_shifted_chebyshev_polynomial_t, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_shifted_chebyshev_polynomial_t(x, n)



[docs]
def special_shifted_chebyshev_polynomial_u(x, n, *, out=None):
    if out is not None:
        return _C.special_shifted_chebyshev_polynomial_u(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_shifted_chebyshev_polynomial_u, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_shifted_chebyshev_polynomial_u(x, n)



[docs]
def special_shifted_chebyshev_polynomial_v(x, n, *, out=None):
    if out is not None:
        return _C.special_shifted_chebyshev_polynomial_v(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_shifted_chebyshev_polynomial_v, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_shifted_chebyshev_polynomial_v(x, n)



[docs]
def special_shifted_chebyshev_polynomial_w(x, n, *, out=None):
    if out is not None:
        return _C.special_shifted_chebyshev_polynomial_w(x, n, out=out)
    if _capturing():
        _captured = _capture_call(special_shifted_chebyshev_polynomial_w, (x, n), {})
        if _captured is not None:
            return _captured
    return _C.special_shifted_chebyshev_polynomial_w(x, n)



[docs]
def special_spherical_bessel_j0(x, *, out=None):
    if out is not None:
        return _C.special_spherical_bessel_j0(x=x, out=out)
    if _capturing():
        _captured = _capture_call(special_spherical_bessel_j0, (x,), {})
        if _captured is not None:
            return _captured
    return _C.special_spherical_bessel_j0(x=x)


def _foobar(input, arg1=True, arg2=True, arg3=True):
    if _capturing():
        _captured = _capture_call(_foobar, (input, arg1, arg2, arg3), {})
        if _captured is not None:
            return _captured
    return _C._foobar(input, arg1, arg2, arg3=arg3)

def _propagate_xla_data(input, output):
    if _capturing():
        _captured = _capture_call(_propagate_xla_data, (input, output), {})
        if _captured is not None:
            return _captured
    return _C._propagate_xla_data(input, output)

try:
    _C.install_factory_fast_paths(_C, {
        'empty': empty, 'zeros': zeros, 'ones': ones,
        'rand': rand, 'randn': randn, 'full': full,
    })
    # Adopt the C trampolines (installed as _C.<name>_fast) as the
    # public factories: eager calls skip the Python frame; captures
    # divert back to the wrapper objects handed over above.
    empty = _C.empty_fast
    zeros = _C.zeros_fast
    ones = _C.ones_fast
    rand = _C.rand_fast
    randn = _C.randn_fast
    full = _C.full_fast
except (AttributeError, TypeError):
    pass

Search documentation

Search all 1,743 documentation pages.

Keyboard shortcuts

Global

  • /Focus search
  • ?This dialog
  • ,Open settings
  • jAI assistant

Search

  • Navigate results
  • Open result
  • escClose

Package

  • mMain information
  • dDocs
  • .Code
  • -Changelog
  • tTimeline
  • sStats
  • vVersions