Source code for storage.geometric_reservoir_storage
"""
This module contains the GeometricReservoirStorage.
"""
import random
from typing import Optional, Any
from .reservoir_storage import ReservoirStorage
[docs]class GeometricReservoirStorage(ReservoirStorage):
""" Geometric Reservoir Storage
"""
def __init__(
self,
size: int,
constant_probability: float = None,
store_targets: bool = False
):
super().__init__(
size=size,
store_targets=store_targets
)
if constant_probability is not None:
self.constant_probability = constant_probability
else:
self.constant_probability = 1 / self.size
[docs] def update(self, x: dict, y: Optional[Any] = None):
if len(self._storage_x) < self.size:
self._storage_x.append(x)
if self.store_targets:
self._storage_y.append(y)
else:
random_float = random.random()
if random_float <= self.constant_probability:
rand_idx = random.randrange(self.size)
self._storage_x[rand_idx] = x
if self.store_targets:
self._storage_y[rand_idx] = y