"docs/git@developer.sourcefind.cn:change/sglang.git" did not exist on "b6e0cfb5e1c355f9526defdf9bbee430c0bfebaa"
Commit d99469a5 authored by rusty1s's avatar rusty1s
Browse files

added more doc

parent e9e85118
...@@ -2,8 +2,8 @@ from .utils import gen_output ...@@ -2,8 +2,8 @@ from .utils import gen_output
def scatter_add_(output, index, input, dim=0): def scatter_add_(output, index, input, dim=0):
"""Sums up all values from the tensor :attr:`input` into :attr:`output` at """Sums all values from the tensor :attr:`input` into :attr:`output` at the
the indices specified in the :attr:`index` tensor along an given axis indices specified in the :attr:`index` tensor along an given axis
:attr:`dim`. For each value in :attr:`input`, its output index is specified :attr:`dim`. For each value in :attr:`input`, its output index is specified
by its index in :attr:`input` for dimensions outside of :attr:`dim` and by by its index in :attr:`input` for dimensions outside of :attr:`dim` and by
the corresponding value in :attr:`index` for dimension :attr:`dim`. If the corresponding value in :attr:`index` for dimension :attr:`dim`. If
...@@ -53,12 +53,12 @@ def scatter_add_(output, index, input, dim=0): ...@@ -53,12 +53,12 @@ def scatter_add_(output, index, input, dim=0):
def scatter_add(index, input, dim=0, size=None, fill_value=0): def scatter_add(index, input, dim=0, size=None, fill_value=0):
"""Sums ap all values from the tensor :attr:`input` at the indices """Sums all values from the tensor :attr:`input` at the indices specified
specified in the :attr:`index` tensor along an given axis :attr:`dim`. in the :attr:`index` tensor along an given axis :attr:`dim`. The output
The output size at dimension :attr:`dim` is given by :attr:`size` and must size at dimension :attr:`dim` is given by :attr:`size` and must be at least
be at least size `index.max(dim) - 1`. If :attr:`size` is not given, a size `index.max(dim) - 1`. If :attr:`size` is not given, a minimal sized
minimal sized output tensor is returned. The output tensor is prefilled output tensor is returned. The output tensor is prefilled with the
with the specified value from :attr:`fill_value`. specified value from :attr:`fill_value`.
For one-dimensional tensors, the operation computes For one-dimensional tensors, the operation computes
......
...@@ -4,7 +4,7 @@ from .utils import gen_output ...@@ -4,7 +4,7 @@ from .utils import gen_output
def scatter_div_(output, index, input, dim=0): def scatter_div_(output, index, input, dim=0):
"""If multiple indices reference the same location, their """If multiple indices reference the same location, their
contributions divide.""" **contributions divide**."""
return scatter('div', dim, output, index, input) return scatter('div', dim, output, index, input)
......
...@@ -3,8 +3,8 @@ from .utils import gen_filled_tensor, gen_output ...@@ -3,8 +3,8 @@ from .utils import gen_filled_tensor, gen_output
def scatter_max_(output, index, input, dim=0): def scatter_max_(output, index, input, dim=0):
"""If multiple indices reference the same location, the maximal """If multiple indices reference the same location, their **contribution
contribution gets taken. maximize**.
:rtype: (:class:`Tensor`, :class:`LongTensor`) :rtype: (:class:`Tensor`, :class:`LongTensor`)
""" """
......
...@@ -4,7 +4,7 @@ from .utils import gen_filled_tensor, gen_output ...@@ -4,7 +4,7 @@ from .utils import gen_filled_tensor, gen_output
def scatter_mean_(output, index, input, dim=0): def scatter_mean_(output, index, input, dim=0):
"""If multiple indices reference the same location, their """If multiple indices reference the same location, their
contributions average.""" **contributions average**."""
num_output = gen_filled_tensor(output, output.size(), fill_value=0) num_output = gen_filled_tensor(output, output.size(), fill_value=0)
scatter('mean', dim, output, index, input, num_output) scatter('mean', dim, output, index, input, num_output)
num_output[num_output == 0] = 1 num_output[num_output == 0] = 1
......
...@@ -3,8 +3,8 @@ from .utils import gen_filled_tensor, gen_output ...@@ -3,8 +3,8 @@ from .utils import gen_filled_tensor, gen_output
def scatter_min_(output, index, input, dim=0): def scatter_min_(output, index, input, dim=0):
"""If multiple indices reference the same location, the minimal """If multiple indices reference the same location, their **contribution
contribution gets taken.""" minimize**."""
arg_output = gen_filled_tensor(index, output.size(), fill_value=-1) arg_output = gen_filled_tensor(index, output.size(), fill_value=-1)
return scatter('min', dim, output, index, input, arg_output) return scatter('min', dim, output, index, input, arg_output)
......
...@@ -4,7 +4,7 @@ from .utils import gen_output ...@@ -4,7 +4,7 @@ from .utils import gen_output
def scatter_mul_(output, index, input, dim=0): def scatter_mul_(output, index, input, dim=0):
"""If multiple indices reference the same location, their """If multiple indices reference the same location, their
contributions multiply.""" **contributions multiply**."""
return scatter('mul', dim, output, index, input) return scatter('mul', dim, output, index, input)
......
...@@ -2,11 +2,55 @@ from .utils import gen_output ...@@ -2,11 +2,55 @@ from .utils import gen_output
def scatter_sub_(output, index, input, dim=0): def scatter_sub_(output, index, input, dim=0):
"""If multiple indices reference the same location, their negated """If multiple indices reference the same location, their **negated
contributions add.""" contributions add**."""
return output.scatter_add_(dim, index, -input) return output.scatter_add_(dim, index, -input)
def scatter_sub(index, input, dim=0, size=None, fill_value=0): def scatter_sub(index, input, dim=0, size=None, fill_value=0):
"""Subtracts all values from the tensor :attr:`input` at the indices
specified in the :attr:`index` tensor along an given axis :attr:`dim`. The
output size at dimension :attr:`dim` is given by :attr:`size` and must be
at least size `index.max(dim) - 1`. If :attr:`size` is not given, a minimal
sized output tensor is returned. The output tensor is prefilled with the
specified value from :attr:`fill_value`.
For one-dimensional tensors, the operation computes
.. math::
\mathrm{output}_i = \mathrm{fill\_value} - \sum_j \mathrm{input}_j
where sum is over :math:`j` such that :math:`\mathrm{index}_j = i`.
A more detailed explanation is described in
:meth:`~torch_scatter.scatter_sub_`.
Args:
index (LongTensor): The indices of elements to scatter
input (Tensor): The source tensor
dim (int, optional): The axis along which to index
size (int, optional): Output size at dimension :attr:`dim`
fill_value (int, optional): Initial filling of output tensor
:rtype: :class:`Tensor`
.. testsetup::
import torch
from torch_scatter import scatter_sub
.. testcode::
input = torch.Tensor([[2, 0, 1, 4, 3], [0, 2, 1, 3, 4]])
index = torch.LongTensor([[4, 5, 4, 2, 3], [0, 0, 2, 2, 1]])
output = scatter_sub(index, input, dim=1)
print(output)
.. testoutput::
0 0 -4 -3 -3 0
-2 -4 -4 0 0 0
[torch.FloatTensor of size 2x6]
"""
output = gen_output(index, input, dim, size, fill_value) output = gen_output(index, input, dim, size, fill_value)
return scatter_sub_(output, index, input, dim) return scatter_sub_(output, index, input, dim)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment