Source code for bayesflow.adapters.transforms.drop
from collections.abc import Sequence
from keras.saving import (
deserialize_keras_object as deserialize,
register_keras_serializable as serializable,
serialize_keras_object as serialize,
)
from .transform import Transform
[docs]
@serializable(package="bayesflow.adapters")
class Drop(Transform):
"""
Transform to drop variables from further calculation.
Parameters
----------
keys : sequence of str
Names of data variables that should be dropped
Examples
--------
>>> import bayesflow as bf
>>> a = [1, 2, 3, 4]
>>> b = [[1, 2], [3, 4]]
>>> c = [[5, 6, 7, 8]]
>>> dat = dict(a=a, b=b, c=c)
>>> dat
{'a': [1, 2, 3, 4], 'b': [[1, 2], [3, 4]], 'c': [[5, 6, 7, 8]]}
>>> drop = bf.adapters.transforms.Drop(("b", "c"))
>>> drop.forward(dat)
{'a': [1, 2, 3, 4]}
"""
def __init__(self, keys: Sequence[str]):
self.keys = keys
[docs]
@classmethod
def from_config(cls, config: dict, custom_objects=None) -> "Drop":
return cls(keys=deserialize(config["keys"], custom_objects))
[docs]
def get_config(self) -> dict:
return {"keys": serialize(self.keys)}
[docs]
def forward(self, data: dict[str, any], **kwargs) -> dict[str, any]:
# no strict version because there is no requirement for the keys to be present
return {key: value for key, value in data.items() if key not in self.keys}
[docs]
def inverse(self, data: dict[str, any], **kwargs) -> dict[str, any]:
# non-invertible transform
return data