Propagate

Propagate table and series representations

ndmap.propagate.identity(order: tuple[int, ...], point: list[torch.Tensor], *, flag: bool = False, parametric: list | None = None, jacobian: Callable | None = None) list | dict[tuple[int, ...], torch.Tensor][source]

Generate identity derivative table or identity series

Note, identity table or series represent an identity mapping

Parameters:
  • order (tuple[int, ...], non-negative) – maximum derivative orders

  • point (Point) – evaluation point

  • flag (bool, default=False) – flag to return identity series instead of table

  • parametric (Optional[Table]) – optional parametric table

  • jacobian (Optional[Callable]) – torch.func.jacfwd (default) or torch.func.jacrev

Returns:

identity derivative table or series

Return type:

Union[Table, Series]

Examples

>>> import torch
>>> state = torch.tensor([0.0, 0.0])
>>> knobs = [torch.tensor([0.0, 0.0])]
>>> point = [state, *knobs]
>>> identity((1, 1), point)
[[tensor([0., 0.]),
tensor([[0., 0.],
        [0., 0.]])],
[tensor([[1., 0.],
        [0., 1.]]),
tensor([[[0., 0.],
        [0., 0.]],

[[0., 0.], [0., 0.]]])]]

>>> identity((1, 1), point, flag=True)
{(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([1., 0.]),
(0, 1, 0, 0): tensor([0., 1.]),
(1, 0, 1, 0): tensor([0., 0.]),
(1, 0, 0, 1): tensor([0., 0.]),
(0, 1, 1, 0): tensor([0., 0.]),
(0, 1, 0, 1): tensor([0., 0.])}
ndmap.propagate.propagate(dimension: tuple[int, ...], order: tuple[int, ...], data: list, knobs: list[torch.Tensor], table: list, *, intermediate: bool = True, jacobian: Callable | None = None) list | torch.Tensor

Propagate derivative table representation through a given table

Note, can be used for composition of deririvative tables Composition should be performed for tables that map zero state to zero Also, tables are expected to have identical knobs

Parameters:
  • dimension (tuple[int, ...], positive) – dimensions

  • order (tuple[int, ...], non-negative) – maximum derivative orders

  • data (Table) – input derivative table

  • knobs (Knobs) – input parametric variables

  • table (Table) – input table mapping approximation

  • intermediate (bool, default=True) – flag to return intermediate derivatives

  • jacobian (Optional[Callable]) – torch.func.jacfwd (default) or torch.func.jacrev

Return type:

Union[Table, Tensor]

Examples

>>> import torch
>>> from ndmap.derivative import derivative
>>> from ndmap.evaluate import compare
>>> def fn(x, l): q, p = x; return torch.stack([q + l*p, p])
>>> x = torch.tensor([0.0, 0.0], dtype=torch.float64)
>>> t = derivative(1, fn, x, 0.5)
>>> compare(derivative(1, fn, x, 1.0), propagate((2, ), (1, ), t, [], t))
True