Series
Series representation of derivative table
- ndmap.series.clean(probe: dict[tuple[int, ...], torch.Tensor], *, epsilon: float = 2.5e-16) dict[tuple[int, ...], torch.Tensor] [source]
Clean series
- Parameters:
probe (Series) – input series to clean
epsilon (float, non-negative) – clean epsilon
- Return type:
Series
Examples
>>> import torch >>> from ndmap.derivative import derivative >>> def fn(x, y): ... x1, x2 = x ... y1, y2 = y ... return torch.stack([x1*(1 + y1), x2*(1 + y2)]) >>> x = torch.tensor([0.0, 0.0]) >>> y = torch.zeros_like(x) >>> t = derivative((1, 1), fn, x, y) >>> s = series((2, 2), (1, 1), t) >>> clean(s) {(1, 0, 0, 0): tensor([1., 0.]), (0, 1, 0, 0): tensor([0., 1.]), (1, 0, 1, 0): tensor([1., 0.]), (0, 1, 0, 1): tensor([0., 1.])}
- ndmap.series.fetch(probe: dict[tuple[int, ...], torch.Tensor], index: list[tuple[int, ...]]) dict[tuple[int, ...], torch.Tensor] [source]
Fetch series
- Parameters:
probe (Series) – input series
index (list[tuple[int, ...]], non-negative) – list of monomial indices, […, (i, j, k, …), …]
- Return type:
Series
Examples
>>> import torch >>> from ndmap.derivative import derivative >>> def fn(x, y): ... x1, x2 = x ... y1, y2 = y ... return torch.stack([x1*(1 + y1), x2*(1 + y2)]) >>> x = torch.tensor([0.0, 0.0]) >>> y = torch.zeros_like(x) >>> t = derivative((1, 1), fn, x, y) >>> s = series((2, 2), (1, 1), t) >>> fetch(s, [(1, 0, 0, 0), (1, 0, 1, 0)]) {(1, 0, 0, 0): tensor([1., 0.]), (1, 0, 1, 0): tensor([1., 0.])}
- ndmap.series.merge(probe: dict[tuple[int, ...], torch.Tensor], other: dict[tuple[int, ...], torch.Tensor]) dict[tuple[int, ...], torch.Tensor] [source]
Merge (sum) series
- Parameters:
probe (Series) – input series to merge
other (Series) – input series to merge
- Return type:
Series
Examples
>>> import torch >>> from ndmap.derivative import derivative >>> def fn(x, y): ... x1, x2 = x ... y1, y2 = y ... return torch.stack([x1*(1 + y1), x2*(1 + y2)]) >>> x = torch.tensor([0.0, 0.0]) >>> y = torch.zeros_like(x) >>> t = derivative((1, 1), fn, x, y) >>> s = series((2, 2), (1, 1), t) >>> merge(s, s) {(0, 0, 0, 0): tensor([0., 0.]), (0, 0, 1, 0): tensor([0., 0.]), (0, 0, 0, 1): tensor([0., 0.]), (1, 0, 0, 0): tensor([2., 0.]), (0, 1, 0, 0): tensor([0., 2.]), (1, 0, 1, 0): tensor([2., 0.]), (1, 0, 0, 1): tensor([0., 0.]), (0, 1, 1, 0): tensor([0., 0.]), (0, 1, 0, 1): tensor([0., 2.])}
- ndmap.series.series(index: list[tuple[int, ...]], function: Callable, state: torch.Tensor, knobs: list[torch.Tensor], *pars: tuple, jacobian: Callable | None = None) dict[tuple[int, ...], torch.Tensor]
Generate series representation of a given function for a given set of monomial indices
- ndmap.series.split(probe: dict[tuple[int, ...], torch.Tensor]) list[dict[tuple[int, ...], torch.Tensor]] [source]
(series operation) Split series
Note, coefficient values are assumed to be vector tensors
- Parameters:
probe (Series) – input series
- Return type:
list[Series]
Examples
>>> import torch >>> from ndmap.derivative import derivative >>> def fn(x, y): ... x1, x2 = x ... y1, y2 = y ... return torch.stack([x1*(1 + y1), x2*(1 + y2)]) >>> x = torch.tensor([0.0, 0.0]) >>> y = torch.zeros_like(x) >>> t = derivative((1, 1), fn, x, y) >>> s = series((2, 2), (1, 1), t) >>> split(s) [{(0, 0, 0, 0): tensor(0.), (0, 0, 1, 0): tensor(0.), (0, 0, 0, 1): tensor(0.), (1, 0, 0, 0): tensor(1.), (0, 1, 0, 0): tensor(0.), (1, 0, 1, 0): tensor(1.), (1, 0, 0, 1): tensor(0.), (0, 1, 1, 0): tensor(0.), (0, 1, 0, 1): tensor(0.)}, {(0, 0, 0, 0): tensor(0.), (0, 0, 1, 0): tensor(0.), (0, 0, 0, 1): tensor(0.), (1, 0, 0, 0): tensor(0.), (0, 1, 0, 0): tensor(1.), (1, 0, 1, 0): tensor(0.), (1, 0, 0, 1): tensor(0.), (0, 1, 1, 0): tensor(0.), (0, 1, 0, 1): tensor(1.)}]