Source code for magpylib_jax.misc.custom
"""Custom source stub for compatibility with Magpylib collections."""
from __future__ import annotations
import jax.numpy as jnp
from magpylib_jax._types import ArrayLike
from magpylib_jax.core.base import BaseSource
[docs]
class CustomSource(BaseSource):
"""User-defined source that can optionally supply a callable field function."""
_source_type = "custom"
def __init__(
self,
field_func: callable | None = None,
position: ArrayLike = (0.0, 0.0, 0.0),
orientation: ArrayLike | None = None,
style=None,
style_label: str | None = None,
**kwargs,
) -> None:
self.field_func = field_func
super().__init__(
position=position,
orientation=orientation,
style=style,
style_label=style_label,
**kwargs,
)
@property
def volume(self) -> float:
return 0.0
def getB(self, *observers: ArrayLike, **_kwargs) -> jnp.ndarray:
if callable(self.field_func):
obs = observers[0] if len(observers) == 1 else list(observers)
return jnp.asarray(self.field_func(obs), dtype=jnp.float64)
obs = observers[0] if len(observers) == 1 else list(observers)
obs = jnp.asarray(obs, dtype=jnp.float64)
return jnp.zeros_like(obs)
def getH(self, observers: ArrayLike, **kwargs) -> jnp.ndarray:
return self.getB(observers, **kwargs)
def getJ(self, observers: ArrayLike, **kwargs) -> jnp.ndarray:
return self.getB(observers, **kwargs)
def getM(self, observers: ArrayLike, **kwargs) -> jnp.ndarray:
return self.getB(observers, **kwargs)