Bracket

Poisson bracket computation

ndmap.bracket.bracket(tf: list | dict[tuple[int, ...], torch.Tensor], tg: list | dict[tuple[int, ...], torch.Tensor], *, jacobian: Callable | None = None) Callable

Compute Poisson bracket

Parameters:
  • tf (Union[Table, Series]) – f, g table or series representation

  • tg (Union[Table, Series]) – f, g table or series representation

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

Return type:

Union[Observable, Mapping]

Examples

>>> import torch
>>> from ndmap.propagate import identity
>>> from ndmap.propagate import propagate
>>> def f(x):
...     x1, x2 = x
...     return x1**2
>>> def g(x):
...     x1, x2 = x
...     return x2**2
>>> state = torch.tensor([1.0, 1.0], dtype=torch.float64)
>>> delta = torch.zeros_like(state)
>>> tf = identity((2, ), [state])
>>> tf = propagate((2, ), (2, ), tf, [], f)
>>> tg = identity((2, ), [state])
>>> tg = propagate((2, ), (2, ), tg, [], g)
>>> torch.allclose(bracket(tf, tg)(delta), bracket(f, g)(state))
True
>>> import torch
>>> from ndmap.util import curry_apply
>>> from ndmap.propagate import identity
>>> from ndmap.propagate import propagate
>>> def f(x):
...     x1, x2 = x
...     return x1**2
>>> def g(x):
...     x1, x2 = x
...     return x2**2
>>> state = torch.tensor([1.0, 1.0], dtype=torch.float64)
>>> delta = torch.zeros_like(state)
>>> sf = identity((2, ), [state], flag=True)
>>> sf = propagate((2, ), (2, ), sf, [], f)
>>> sg = identity((2, ), [state], flag=True)
>>> sg = propagate((2, ), (2, ), sg, [], g)
>>> torch.allclose(bracket(sf, sg)(delta), bracket(f, g)(state))
True