Source code for bayesflow.adapters.transforms.scale
import numpy as np
from bayesflow.utils.serialization import serializable, serialize
from .elementwise_transform import ElementwiseTransform
[docs]
@serializable("bayesflow.adapters")
class Scale(ElementwiseTransform):
def __init__(self, scale: np.typing.ArrayLike):
self.scale = np.array(scale)
[docs]
def get_config(self) -> dict:
return serialize({"scale": self.scale})
[docs]
def forward(self, data: np.ndarray, **kwargs) -> np.ndarray:
return data * self.scale
[docs]
def inverse(self, data: np.ndarray, **kwargs) -> np.ndarray:
return data / self.scale
[docs]
def log_det_jac(self, data: np.ndarray, inverse: bool = False, **kwargs) -> np.ndarray:
ldj = np.log(np.abs(self.scale))
ldj = np.full(data.shape, ldj)
if inverse:
ldj = -ldj
return np.sum(ldj, axis=tuple(range(1, ldj.ndim)))