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