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