Source code for fl4health.client_managers.fixed_sampling_client_manager

from flwr.server.client_manager import SimpleClientManager
from flwr.server.client_proxy import ClientProxy
from flwr.server.criterion import Criterion


[docs] class FixedSamplingClientManager(SimpleClientManager): """Keeps sampling fixed until it's reset""" def __init__(self) -> None: super().__init__() self.current_sample: list[ClientProxy] | None = None
[docs] def reset_sample(self) -> None: """Resets the saved sample so self.sample produces a new sample again.""" self.current_sample = None
[docs] def sample( self, num_clients: int, min_num_clients: int | None = None, criterion: Criterion | None = None, ) -> list[ClientProxy]: """ Return a new client sample for the first time it runs. For subsequent runs, it will return the same sampling until self.reset_sampling() is called. Args: num_clients: (int) The number of clients to sample. min_num_clients: (int | None) The minimum number of clients to return in the sample. Optional, default is num_clients. criterion: (Criterion | None) A criterion to filter clients to sample. Optional, default is no criterion (no filter). Returns: list[ClientProxy]: A list of sampled clients as ClientProxy instances. """ if self.current_sample is None: self.current_sample = super().sample(num_clients, min_num_clients, criterion) return self.current_sample