Evaluate

Table and series evaluation

ndmap.evaluate.compare(probe: list, other: list) bool[source]

Compare tables

Parameters:
  • probe (Table) – tables to compare

  • other (Table) – tables to compare

Return type:

bool

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((2, 1), fn, x, y)
>>> compare(t, t)
True
ndmap.evaluate.evaluate(series: dict[tuple[int, ...], torch.Tensor], delta: list[torch.Tensor], epsilon: float | None = None) torch.Tensor

Evaluate series representation at a given deviation delta

Note, input series is expected to represent a vector valued function For epsilon != None, fast evaluation is performed

Parameters:
  • series (Series) – input series representation

  • delta (Delta) – delta deviation

  • epsilon (Optional[float], non-negative, default=None) – fast series evaluation / tolerance epsilon

Return type:

Tensor

Examples

>>> import torch
>>> from ndmap.derivative import derivative
>>> from ndmap.series import series
>>> 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((2, 1), fn, x, y)
>>> s = series((2, 2), (2, 1), t)
>>> dx = 1.0E-3*torch.ones_like(x)
>>> dy = 1.0E-3*torch.ones_like(x)
>>> torch.allclose(fn(x + dx, y + dy), evaluate(s, [dx, dy]))
ndmap.evaluate.table(dimension: tuple[int, ...], order: tuple[int, ...], series: dict[tuple[int, ...], torch.Tensor], *, epsilon: float | None = None, jacobian: Callable | None = None) list[source]

Generate derivative table representation from a given series representation

Note, table is generated by taking derivatives of evaluated series at zero deviation delta. For epsilon != None can be used for fast series evaluation, but can generate incorrect table

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

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

  • series (Series) – input series representation

  • epsilon (Optional[float], non-negative, default=None) – fast series evaluation / tolerance epsilon

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

Return type:

Table

Examples

>>> import torch
>>> from ndmap.derivative import derivative
>>> from ndmap.series import series
>>> 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((2, 1), fn, x, y)
>>> s = series((2, 2), (2, 1), t)
>>> t = table((2, 2), (2, 1), s)
>>> dx = 1.0E-3*torch.ones_like(x)
>>> dy = 1.0E-3*torch.ones_like(x)
>>> torch.allclose(fn(x + dx, y + dy), evaluate(t, [dx, dy]))
True