Source code for bayesflow.adapters.transforms.sqrt

import keras.ops as ops

from bayesflow.utils.serialization import serializable
from bayesflow.types import Tensor

from .elementwise_transform import ElementwiseTransform


[docs] @serializable("bayesflow.adapters") class Sqrt(ElementwiseTransform): """Square-root transform a variable. Examples -------- >>> adapter = bf.Adapter().sqrt(["x"]) """
[docs] def forward(self, data: Tensor, **kwargs) -> Tensor: return ops.sqrt(data)
[docs] def inverse(self, data: Tensor, **kwargs) -> Tensor: return ops.square(data)
[docs] def get_config(self) -> dict: return {}
[docs] def log_det_jac(self, data: Tensor, inverse: bool = False, **kwargs) -> Tensor: ldj = -0.5 * ops.log(data) - ops.log(ops.convert_to_tensor(2.0, dtype=data.dtype)) if inverse: ldj = -ldj return self._sum_except_batch(ldj)