[docs]@runtime_checkableclassNumPyClientMinimalProtocol(Protocol):"""A minimal protocol for NumPyClient with just essential methods."""
[docs]defget_parameters(self,config:dict[str,Scalar])->NDArrays:pass# pragma: no cover
[docs]deffit(self,parameters:NDArrays,config:dict[str,Scalar])->tuple[NDArrays,int,dict[str,Scalar]]:pass# pragma: no cover
[docs]defevaluate(self,parameters:NDArrays,config:dict[str,Scalar])->tuple[float,int,dict[str,Scalar]]:pass# pragma: no cover
[docs]defset_parameters(self,parameters:NDArrays,config:Config,fitting_round:bool)->None:pass# pragma: no cover
[docs]defupdate_after_train(self,local_steps:int,loss_dict:dict[str,float],config:Config)->None:pass# pragma: no cover
[docs]@runtime_checkableclassBasicClientProtocolPreSetup(NumPyClientMinimalProtocol,Protocol):"""A minimal protocol for BasicClient focused on methods."""device:torch.deviceinitialized:bool# Include only methods, not attributes that get initialized later
[docs]defsetup_client(self,config:Config)->None:pass# pragma: no cover
[docs]defget_model(self,config:Config)->nn.Module:pass# pragma: no cover
[docs]defget_data_loaders(self,config:Config)->tuple[DataLoader,...]:pass# pragma: no cover
[docs]defget_optimizer(self,config:Config)->Optimizer|dict[str,Optimizer]:pass# pragma: no cover
[docs]defget_criterion(self,config:Config)->_Loss:pass# pragma: no cover
[docs]defcompute_loss_and_additional_losses(self,preds:TorchPredType,features:TorchFeatureType,target:TorchTargetType)->tuple[torch.Tensor,dict[str,torch.Tensor]|None]:pass# pragma: no cover
[docs]@runtime_checkableclassBasicClientProtocol(BasicClientProtocolPreSetup,Protocol):"""A minimal protocol for BasicClient focused on methods."""model:nn.Moduleoptimizers:dict[str,torch.optim.Optimizer]train_loader:DataLoaderval_loader:DataLoadertest_loader:DataLoader|None