diff --git a/baselines/fednova/LICENSE b/baselines/fednova/LICENSE
new file mode 100644
index 00000000000..d6456956733
--- /dev/null
+++ b/baselines/fednova/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/baselines/fednova/README.md b/baselines/fednova/README.md
new file mode 100644
index 00000000000..1feb389cc10
--- /dev/null
+++ b/baselines/fednova/README.md
@@ -0,0 +1,191 @@
+---
+title: Tackling the Objective Inconsistency Problem in Heterogeneous Federated Optimization
+url: https://arxiv.org/abs/2007.07481
+labels: [normalized averaging, heterogeneous optimization, image classification]
+dataset: [CIFAR-10]
+---
+
+# Tackling the Objective Inconsistency Problem in Heterogeneous Federated Optimization
+
+**Paper:** [arxiv.org/abs/2007.07481](https://arxiv.org/abs/2007.07481)
+
+**Authors:** *Jianyu Wang, Qinghua Liu, Hao Liang, Gauri Joshi, H. Vincent Poor*
+
+**Abstract:** *In federated learning, heterogeneity in the clients' local datasets and computation speeds results in large variations in the number of local updates performed by each client in each communication round. Naive weighted aggregation of such models causes objective inconsistency, that is, the global model converges to a stationary point of a mismatched objective function which can be arbitrarily different from the true objective. This paper provides a general framework to analyze the convergence of federated heterogeneous optimization algorithms. It subsumes previously proposed methods such as FedAvg and FedProx and provides the first principled understanding of the solution bias and the convergence slowdown due to objective inconsistency. Using insights from this analysis, we propose FedNova, a normalized averaging method that eliminates objective inconsistency while preserving fast error convergence.*
+
+
+## About this baseline
+
+**What’s implemented:** *_The code in this baseline reproduces the results from Table 1 in the paper which corresponds to experiments on Non-IID CIFAR dataset._*
+
+**Datasets:** *_The dataset in the experiment is a Non-IID CIFAR-10 dataset which is partitioned across 16 clients using a Dirichlet distribution with parameter alpha=0.1._*
+
+**Hardware Setup:** *_The experiment setting consists of 16 clients. The training is done on a single workstation consisting of 8 CPU cores, 32 GB of RAM and an Nvidia A100 GPU.
+The total GPU memory usage for the experiment is ~ 10 GB(1.1 GB per client + main process). Therefore effectively, 8 clients run in parallel in this setup using the default config.
+The total time for a single experiment in this setup is ~ 50 minutes. (or 30 seconds per communication round). In case of resource constraints,
+the experiment can be run with 4 clients in parallel by setting client_resources as follows: {num_cpus: 1, num_gpus: 0.25}. This uses ~ 5.4 GB of GPU memory and 4 CPU cores._*
+
+**Contributors:** *_Aasheesh Singh (Github: [@ashdtu](https://github.com/ashdtu)), MILA-Quebec AI Institute_*
+
+
+## Experimental Setup
+
+**Task:** The task is Image classification on CIFAR-10 dataset.
+
+**Model:** The experiment uses the below configuration of VGG-11 model for the image classification task.
+```
+----------------------------------------------------------------
+ Layer (type) Output Shape Param #
+================================================================
+ Conv2d-1 [-1, 64, 32, 32] 1,792
+ ReLU-2 [-1, 64, 32, 32] 0
+ MaxPool2d-3 [-1, 64, 16, 16] 0
+ Conv2d-4 [-1, 128, 16, 16] 73,856
+ ReLU-5 [-1, 128, 16, 16] 0
+ MaxPool2d-6 [-1, 128, 8, 8] 0
+ Conv2d-7 [-1, 256, 8, 8] 295,168
+ ReLU-8 [-1, 256, 8, 8] 0
+ Conv2d-9 [-1, 256, 8, 8] 590,080
+ ReLU-10 [-1, 256, 8, 8] 0
+ MaxPool2d-11 [-1, 256, 4, 4] 0
+ Conv2d-12 [-1, 512, 4, 4] 1,180,160
+ ReLU-13 [-1, 512, 4, 4] 0
+ Conv2d-14 [-1, 512, 4, 4] 2,359,808
+ ReLU-15 [-1, 512, 4, 4] 0
+ MaxPool2d-16 [-1, 512, 2, 2] 0
+ Conv2d-17 [-1, 512, 2, 2] 2,359,808
+ ReLU-18 [-1, 512, 2, 2] 0
+ Conv2d-19 [-1, 512, 2, 2] 2,359,808
+ ReLU-20 [-1, 512, 2, 2] 0
+ MaxPool2d-21 [-1, 512, 1, 1] 0
+ Dropout-22 [-1, 512] 0
+ Linear-23 [-1, 512] 262,656
+ ReLU-24 [-1, 512] 0
+ Dropout-25 [-1, 512] 0
+ Linear-26 [-1, 512] 262,656
+ ReLU-27 [-1, 512] 0
+ Linear-28 [-1, 10] 5,130
+================================================================
+Total params: 9,750,922
+Trainable params: 9,750,922
+Non-trainable params: 0
+----------------------------------------------------------------
+Input size (MB): 0.01
+Forward/backward pass size (MB): 2.57
+Params size (MB): 37.20
+Estimated Total Size (MB): 39.78
+----------------------------------------------------------------
+```
+
+**Dataset:** The dataset is Non-IID CIFAR-10 dataset which is partitioned across 16 clients using a Dirichlet distribution Dir16(0.1), (alpha=0.1) as done
+in the [paper](https://arxiv.org/abs/2002.06440). Each client gets a different skewed distribution of the class labels following this split.
+
+**Training Hyperparameters:**
+
+| Hyperparameter | Description | Default value |
+|----------------------------------|-------------------------------------------------------------------------------------------|---------------|
+| optimizer.learning_rate | Learning rate of local client optimizers | 0.02 |
+| optimizer.momentum | Momentum factor | 0.9 |
+| optimizer.mu | Proximal updates factor | 0 |
+| optimizer.weight_decay | Weight decay for regularization | 1e-4 |
+| num_epochs | Number of local training epochs for clients | 2 |
+| num_rounds | Number of server communication rounds | 100 |
+| var_local_epochs | Whether to have variable or fixed local client training epochs. If True, samples num_epochs uniformly in (2,5) | False |
+| batch size | Batch size for training | 32 |
+
+
+
+
+## Environment Setup
+
+``` python
+# Navigate to baselines/fednova
+cd baselines/fednova
+
+# Set python version
+pyenv install 3.10.11
+pyenv local 3.10.11
+
+# Tell poetry to use python 3.10
+poetry env use 3.10.11
+
+# install the base Poetry environment, make sure there is no existing poetry.lock file and pyproject.toml file is located in the current directory
+poetry install
+
+# activate the environment
+poetry shell
+```
+
+## Running the Experiments
+Once the poetry environment is active, you can use the following command to run the various experiments in Table 1.
+You would need to specify the below two command line parameters to iterate through various experiment configurations. They are as follows:
+
+1. `optimizer`: This parameter specifies the local optimizer configuration. It can take the following values:
+ - `vanilla`: This corresponds to the vanilla SGD as the client optimizer
+ - `momentum`: This corresponds to the SGD optimizer with momentum. It is the default optimizer setting.
+ - `proximal`: This corresponds to the SGD optimizer with proximal term in the loss.
+ - `server`: This corresponds to momentum updates of global weights on the strategy or server side. The client optimizers do not use momentum in this setting. This setting is only valid for FedNova strategy.
+ - `hybrid`: This corresponds to hybrid momentum scheme where both the local client optimizer and the server maintain a momentum buffer. This setting is only valid for FedNova strategy.
+
+2. `strategy`: This specifies the aggregation strategy for the client updates. The default is `fednova`.
+If you do not specify this parameter, all experiments will run with FedNova as the strategy and reproduce the rightmost columns of Table 1.
+It can take the following values:
+ - `fednova`: This corresponds to the FedNova (default) aggregation strategy.
+ - `fedavg`: This corresponds to the FedAvg aggregation strategy. The left column of Table 1 can be reproduced by setting this parameter.
+
+3. `var_local_epochs`: Takes value True/False. This parameter specifies whether the number of local training epochs for each client is fixed (Epochs=2) or variable(Uniform sampled from [2,5) ).
+It takes the following values:
+ - `False`: (default) This corresponds to the fixed number of local epochs for each client. This corresponds to the first part of the Table 1.
+ - `True`: This corresponds to the variable number of local epochs for each client. This corresponds to the second part of the Table 1.
+
+```bash
+# Run experiments for first 6 rows of Table-1 below.
+python -m fednova.main --multirun optimizer=vanilla,momentum,proximal strategy=fedavg,fednova var_local_epochs=False,True seed=4,5,6
+
+# Run experiments to compare effect of Momentum (No momentum vs Server vs Hybrid)
+python -m fednova.main --multirun optimizer=server,hybrid strategy=fednova var_local_epochs=True seed=4,5,6
+
+# Plot results and generate Results table. The plots are saved in _static/ directory.
+python fednova/utils.py
+
+```
+
+> **Note**: Due to instability in weight updates in hetrogeneous learning setting on Non-IID datasets, one or two experiments may show NaNs in the loss for few very unlucky seeds.
+> It is recommended to run each experiment for at-least 2-3 seeds for best results.
+
+## Expected Results
+
+The results below correspond to Table 1 of the paper on the non-IID CIFAR-10 dataset.
+
+Centralized Evaluation: Accuracy(in %) on centralized Test set. Mean and Confidence Intervals plotted over at least 3 seeds.
+
+
+
+| Local Epochs | Client Optimizer | FedAvg | FedNova |
+| ------------ | ---------------- | ------ | ------- |
+| 2 | Vanilla | 62.35 ± 1.33 | 67.04 ± 0.94 |
+| 2 | Momentum | 70.78 ± 1.03 | 73.01 ± 0.32 |
+| 2 | Proximal | 62.30 ± 0.38 | 67.00 ± 0.47 |
+| Random(2-5) | Vanilla | 64.30 ± 1.75 | 70.54 ± 0.43 |
+| Random(2-5) | Momentum | 72.75 ± 1.28 | 74.26 ± 0.39 |
+| Random(2-5) | Proximal | 64.47 ± 0.28 | 69.25 ± 1.30 |
+| Random(2-5) | Server | N/A | 73.65 ± 0.51 |
+| Random(2-5) | Hybrid | N/A | 75.54 ± 1.05 |
+
+## Plots
+
+The plots below correspond to Figure 6 (page 11) and Figure 7 in the Addendum section (page 34) of the full-length [paper](https://arxiv.org/abs/2007.07481).
+
+**FedAvg vs FedNova for various local solvers with fixed local epochs = 2**
+
+
+
+
+**FedAvg vs FedNova for various local solvers with variable local epochs ~ U(2,5)**
+
+
+
+**Comparison of Momentum schemes for FedNova (both client and strategy side)**
+
+
+
diff --git a/baselines/fednova/_static/testAccuracy_momentum_plot_varEpochs_True.png b/baselines/fednova/_static/testAccuracy_momentum_plot_varEpochs_True.png
new file mode 100644
index 00000000000..a05ba117807
Binary files /dev/null and b/baselines/fednova/_static/testAccuracy_momentum_plot_varEpochs_True.png differ
diff --git a/baselines/fednova/_static/testAccuracy_momentum_varEpochs_False.png b/baselines/fednova/_static/testAccuracy_momentum_varEpochs_False.png
new file mode 100644
index 00000000000..69d41fb2aed
Binary files /dev/null and b/baselines/fednova/_static/testAccuracy_momentum_varEpochs_False.png differ
diff --git a/baselines/fednova/_static/testAccuracy_momentum_varEpochs_True.png b/baselines/fednova/_static/testAccuracy_momentum_varEpochs_True.png
new file mode 100644
index 00000000000..b2811949feb
Binary files /dev/null and b/baselines/fednova/_static/testAccuracy_momentum_varEpochs_True.png differ
diff --git a/baselines/fednova/_static/testAccuracy_proximal_varEpochs_False.png b/baselines/fednova/_static/testAccuracy_proximal_varEpochs_False.png
new file mode 100644
index 00000000000..9f4a45348ed
Binary files /dev/null and b/baselines/fednova/_static/testAccuracy_proximal_varEpochs_False.png differ
diff --git a/baselines/fednova/_static/testAccuracy_proximal_varEpochs_True.png b/baselines/fednova/_static/testAccuracy_proximal_varEpochs_True.png
new file mode 100644
index 00000000000..11ccd0a4f50
Binary files /dev/null and b/baselines/fednova/_static/testAccuracy_proximal_varEpochs_True.png differ
diff --git a/baselines/fednova/_static/testAccuracy_vanilla_varEpochs_False.png b/baselines/fednova/_static/testAccuracy_vanilla_varEpochs_False.png
new file mode 100644
index 00000000000..6a13499152e
Binary files /dev/null and b/baselines/fednova/_static/testAccuracy_vanilla_varEpochs_False.png differ
diff --git a/baselines/fednova/_static/testAccuracy_vanilla_varEpochs_True.png b/baselines/fednova/_static/testAccuracy_vanilla_varEpochs_True.png
new file mode 100644
index 00000000000..60152cb5fea
Binary files /dev/null and b/baselines/fednova/_static/testAccuracy_vanilla_varEpochs_True.png differ
diff --git a/baselines/fednova/fednova/__init__.py b/baselines/fednova/fednova/__init__.py
new file mode 100644
index 00000000000..a5e567b5913
--- /dev/null
+++ b/baselines/fednova/fednova/__init__.py
@@ -0,0 +1 @@
+"""Template baseline package."""
diff --git a/baselines/fednova/fednova/baseline_client.py b/baselines/fednova/fednova/baseline_client.py
new file mode 100644
index 00000000000..6029a762183
--- /dev/null
+++ b/baselines/fednova/fednova/baseline_client.py
@@ -0,0 +1,144 @@
+"""Clients for the baseline comparison strategies: FedAvg, FedProx."""
+
+from collections import OrderedDict
+from typing import Callable, Dict, List, Tuple
+
+import flwr as fl
+import numpy as np
+import torch
+from flwr.common.typing import NDArrays, Scalar
+from hydra.utils import instantiate
+from omegaconf import DictConfig
+from torch.optim import SGD
+from torch.utils.data import DataLoader
+
+from fednova.models import test, train
+
+
+class FedAvgClient(
+ fl.client.NumPyClient
+): # pylint: disable=too-many-instance-attributes
+ """Standard Flower client for FedAvg."""
+
+ def __init__( # pylint: disable=too-many-arguments
+ self,
+ net: torch.nn.Module,
+ client_id: str,
+ trainloader: DataLoader,
+ valloader: DataLoader,
+ device: torch.device,
+ num_epochs: int,
+ data_size: int,
+ config: DictConfig,
+ ):
+ self.net = net
+ self.exp_config = config
+ self.optimizer = SGD(
+ self.net.parameters(),
+ lr=config.optimizer.lr,
+ momentum=config.optimizer.momentum,
+ weight_decay=config.optimizer.weight_decay,
+ )
+ self.trainloader = trainloader
+ self.valloader = valloader
+ self.client_id = client_id
+ self.device = device
+ self.num_epochs = num_epochs
+ self.num_data_samples = data_size
+
+ def get_parameters(self, config: Dict[str, Scalar]) -> NDArrays:
+ """Return the parameters of the current net."""
+ return [val.cpu().numpy() for _, val in self.net.state_dict().items()]
+
+ def set_parameters(self, parameters: NDArrays) -> None:
+ """Change the parameters of the model using the given ones."""
+ params_dict = zip(self.net.state_dict().keys(), parameters)
+ state_dict = OrderedDict({k: torch.Tensor(v) for k, v in params_dict})
+ self.net.load_state_dict(state_dict, strict=True)
+
+ def fit(
+ self, parameters: NDArrays, config: Dict[str, Scalar]
+ ) -> Tuple[NDArrays, int, Dict]:
+ """Implement distributed fit function for a given client."""
+ self.set_parameters(parameters)
+ for g in self.optimizer.param_groups:
+ g["lr"] = config["lr"]
+
+ if self.exp_config.var_local_epochs:
+ seed_val = (
+ 2023
+ + int(self.client_id)
+ + int(config["server_round"])
+ + int(self.exp_config.seed)
+ )
+ np.random.seed(seed_val)
+ num_epochs = np.random.randint(
+ self.exp_config.var_min_epochs, self.exp_config.var_max_epochs
+ )
+ else:
+ num_epochs = self.num_epochs
+
+ train(
+ self.net,
+ self.optimizer,
+ self.trainloader,
+ self.device,
+ num_epochs,
+ proximal_mu=self.exp_config.optimizer.mu,
+ )
+
+ scaling_factor = self.num_data_samples
+
+ return self.get_parameters({}), int(scaling_factor), {}
+
+ def evaluate(
+ self, parameters: NDArrays, config: Dict[str, Scalar]
+ ) -> Tuple[float, int, Dict]:
+ """Implement distributed evaluation for a given client."""
+ # Evaluation ideally is done on validation set, but because we already know
+ # the best hyper-parameters from the paper and since individual client
+ # datasets are already quite small, we merge the validation set with the
+ # training set and evaluate on the training set with the aggregated global
+ # model parameters. This behaviour can be modified by passing the validation
+ # set in the below test(self.valloader) function and replacing len(
+ # self.valloader) below. Note that we evaluate on the centralized test-set on
+ # server-side in the strategy.
+
+ self.set_parameters(parameters)
+ loss, metrics = test(self.net, self.trainloader, self.device)
+ return float(loss), len(self.trainloader), metrics
+
+
+def gen_clients_fedavg( # pylint: disable=too-many-arguments
+ num_epochs: int,
+ trainloaders: List[DataLoader],
+ testloader: DataLoader,
+ data_sizes: List,
+ model: DictConfig,
+ exp_config: DictConfig,
+) -> Callable[[str], FedAvgClient]:
+ """Return a generator function to create a FedAvg client."""
+
+ def client_fn(cid: str) -> FedAvgClient:
+ """Create a Flower client representing a single organization."""
+ # Load model
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
+ net = instantiate(model)
+
+ # Note: each client gets a different trainloader/valloader, so each client
+ # will train and evaluate on their own unique data
+ trainloader = trainloaders[int(cid)]
+ client_dataset_sizes = data_sizes[int(cid)]
+
+ return FedAvgClient(
+ net,
+ cid,
+ trainloader,
+ testloader,
+ device,
+ num_epochs,
+ client_dataset_sizes,
+ exp_config,
+ )
+
+ return client_fn
diff --git a/baselines/fednova/fednova/client.py b/baselines/fednova/fednova/client.py
new file mode 100644
index 00000000000..fa9101b36ca
--- /dev/null
+++ b/baselines/fednova/fednova/client.py
@@ -0,0 +1,149 @@
+"""Client implementation for FedNova."""
+
+from typing import Callable, Dict, List, Tuple
+
+import flwr as fl
+import numpy as np
+import torch
+from flwr.common.typing import NDArrays, Scalar
+from hydra.utils import instantiate
+from omegaconf import DictConfig
+from torch.utils.data import DataLoader
+
+from fednova.models import test, train
+
+
+class FedNovaClient(
+ fl.client.NumPyClient
+): # pylint: disable=too-many-instance-attributes
+ """Standard Flower client for CNN training."""
+
+ def __init__( # pylint: disable=too-many-arguments
+ self,
+ net: torch.nn.Module,
+ client_id: str,
+ trainloader: DataLoader,
+ valloader: DataLoader,
+ device: torch.device,
+ num_epochs: int,
+ ratio: float,
+ config: DictConfig,
+ ):
+ self.net = net
+ self.exp_config = config
+
+ if self.exp_config.var_local_epochs and (
+ self.exp_config.exp_name == "proximal"
+ ):
+ # For only FedNova with proximal local solver and variable local epochs,
+ # mu = 0.001 works best.
+ # For other experiments, the default setting of mu = 0.005 works best
+ # Ref: https://arxiv.org/pdf/2007.07481.pdf (Page 33, Section:
+ # More Experiment Details)
+ self.exp_config.optimizer.mu = 0.001
+
+ self.optimizer = instantiate(
+ self.exp_config.optimizer, params=self.net.parameters(), ratio=ratio
+ )
+ self.trainloader = trainloader
+ self.valloader = valloader
+ self.client_id = client_id
+ self.device = device
+ self.num_epochs = num_epochs
+ self.data_ratio = ratio
+
+ def get_parameters(self, config: Dict[str, Scalar]) -> NDArrays:
+ """Return the parameters of the current net."""
+ params = [
+ val["cum_grad"].cpu().numpy()
+ for _, val in self.optimizer.state_dict()["state"].items()
+ ]
+ return params
+
+ def set_parameters(self, parameters: NDArrays) -> None:
+ """Change the parameters of the model using the given ones."""
+ self.optimizer.set_model_params(parameters)
+
+ def fit(
+ self, parameters: NDArrays, config: Dict[str, Scalar]
+ ) -> Tuple[NDArrays, int, Dict]:
+ """Implement distributed fit function for a given client."""
+ self.set_parameters(parameters)
+ self.optimizer.set_lr(config["lr"])
+
+ if self.exp_config.var_local_epochs:
+ seed_val = (
+ 2023
+ + int(self.client_id)
+ + int(config["server_round"])
+ + int(self.exp_config.seed)
+ )
+ np.random.seed(seed_val)
+ num_epochs = np.random.randint(
+ self.exp_config.var_min_epochs, self.exp_config.var_max_epochs
+ )
+ else:
+ num_epochs = self.num_epochs
+
+ train(
+ self.net, self.optimizer, self.trainloader, self.device, epochs=num_epochs
+ )
+
+ # Get ratio by which the strategy would scale local gradients from each client
+ # We use this scaling factor to aggregate the gradients on the server
+ grad_scaling_factor: Dict[str, float] = self.optimizer.get_gradient_scaling()
+
+ return self.get_parameters({}), len(self.trainloader), grad_scaling_factor
+
+ def evaluate(
+ self, parameters: NDArrays, config: Dict[str, Scalar]
+ ) -> Tuple[float, int, Dict]:
+ """Implement distributed evaluation for a given client."""
+ # Evaluation ideally is done on validation set, but because we already know
+ # the best hyper-parameters from the paper and since individual client
+ # datasets are already quite small, we merge the validation set with the
+ # training set and evaluate on the training set with the aggregated global
+ # model parameters. This behaviour can be modified by passing the validation
+ # set in the below test(self.valloader) function and replacing len(
+ # self.valloader) below. Note that we evaluate on the centralized test-set on
+ # server-side in the strategy.
+
+ self.set_parameters(parameters)
+ loss, metrics = test(self.net, self.trainloader, self.device)
+ return float(loss), len(self.trainloader), metrics
+
+
+def gen_clients_fednova( # pylint: disable=too-many-arguments
+ num_epochs: int,
+ trainloaders: List[DataLoader],
+ testloader: DataLoader,
+ data_sizes: List,
+ model: DictConfig,
+ exp_config: DictConfig,
+) -> Callable[[str], FedNovaClient]:
+ """Return a generator function to create a FedNova client."""
+
+ def client_fn(cid: str) -> FedNovaClient:
+ """Create a Flower client representing a single organization."""
+ # Load model
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
+ net = instantiate(model)
+
+ # Note: each client gets a different trainloader/valloader, so each client
+ # will train and evaluate on their own unique data
+ trainloader = trainloaders[int(cid)]
+ client_dataset_size: int = data_sizes[int(cid)]
+ client_dataset_ratio: float = client_dataset_size / sum(data_sizes)
+
+ return FedNovaClient(
+ net,
+ cid,
+ trainloader,
+ testloader,
+ device,
+ num_epochs,
+ client_dataset_ratio,
+ exp_config,
+ )
+
+ return client_fn
diff --git a/baselines/fednova/fednova/conf/base.yaml b/baselines/fednova/fednova/conf/base.yaml
new file mode 100644
index 00000000000..52a23d0b6d4
--- /dev/null
+++ b/baselines/fednova/fednova/conf/base.yaml
@@ -0,0 +1,44 @@
+---
+# this is the config that will be loaded as default by main.py
+# Please follow the provided structure (this will ensuring all baseline follow
+# a similar configuration structure and hence be easy to customise)
+
+defaults:
+ - _self_
+ - strategy: fednova
+ - optimizer: momentum
+
+var_local_epochs: False
+datapath: fednova/data/
+checkpoint_path: fednova/checkpoints/
+num_clients: 16
+num_epochs: 2
+num_rounds: 100
+batch_size: 32
+NIID: True
+alpha: 0.1
+var_min_epochs: 2
+var_max_epochs: 5
+lr_scheduling: True
+seed: 1
+mode: train
+
+model:
+ _target_: fednova.models.VGG
+
+client_resources:
+ num_cpus: 1
+ num_gpus: 0.125
+
+hydra:
+ sweep:
+ dir: multirun
+ subdir: ${hydra.job.override_dirname}/${seed}
+ job:
+ config:
+ override_dirname:
+ exclude_keys:
+ - seed
+ - num_rounds
+ kv_sep: _
+ item_sep: _
diff --git a/baselines/fednova/fednova/conf/optimizer/hybrid.yaml b/baselines/fednova/fednova/conf/optimizer/hybrid.yaml
new file mode 100644
index 00000000000..dd5d5c59d6f
--- /dev/null
+++ b/baselines/fednova/fednova/conf/optimizer/hybrid.yaml
@@ -0,0 +1,12 @@
+
+# @package _global_
+
+exp_name: hybrid
+
+optimizer:
+ _target_: fednova.models.ProxSGD
+ lr: 0.02
+ momentum: 0.9
+ weight_decay: 1e-4
+ gmf: 0.9
+ mu: 0
diff --git a/baselines/fednova/fednova/conf/optimizer/momentum.yaml b/baselines/fednova/fednova/conf/optimizer/momentum.yaml
new file mode 100644
index 00000000000..2c31d851dc6
--- /dev/null
+++ b/baselines/fednova/fednova/conf/optimizer/momentum.yaml
@@ -0,0 +1,12 @@
+
+# @package _global_
+
+exp_name: momentum
+
+optimizer:
+ _target_: fednova.models.ProxSGD
+ lr: 0.02
+ momentum: 0.9
+ weight_decay: 1e-4
+ gmf: 0
+ mu: 0
diff --git a/baselines/fednova/fednova/conf/optimizer/proximal.yaml b/baselines/fednova/fednova/conf/optimizer/proximal.yaml
new file mode 100644
index 00000000000..b6cb9eba474
--- /dev/null
+++ b/baselines/fednova/fednova/conf/optimizer/proximal.yaml
@@ -0,0 +1,12 @@
+
+# @package _global_
+
+exp_name: proximal
+
+optimizer:
+ _target_: fednova.models.ProxSGD
+ lr: 0.05
+ momentum: 0
+ weight_decay: 1e-4
+ gmf: 0
+ mu: 0.005
diff --git a/baselines/fednova/fednova/conf/optimizer/server.yaml b/baselines/fednova/fednova/conf/optimizer/server.yaml
new file mode 100644
index 00000000000..79de2dd1e9b
--- /dev/null
+++ b/baselines/fednova/fednova/conf/optimizer/server.yaml
@@ -0,0 +1,12 @@
+
+# @package _global_
+
+exp_name: server
+
+optimizer:
+ _target_: fednova.models.ProxSGD
+ lr: 0.02
+ momentum: 0.0
+ weight_decay: 1e-4
+ gmf: 0.9
+ mu: 0
diff --git a/baselines/fednova/fednova/conf/optimizer/vanilla.yaml b/baselines/fednova/fednova/conf/optimizer/vanilla.yaml
new file mode 100644
index 00000000000..98aabbd70ee
--- /dev/null
+++ b/baselines/fednova/fednova/conf/optimizer/vanilla.yaml
@@ -0,0 +1,12 @@
+
+# @package _global_
+
+exp_name: vanilla
+
+optimizer:
+ _target_: fednova.models.ProxSGD
+ lr: 0.05
+ momentum: 0
+ weight_decay: 1e-4
+ gmf: 0
+ mu: 0
diff --git a/baselines/fednova/fednova/conf/strategy/fedavg.yaml b/baselines/fednova/fednova/conf/strategy/fedavg.yaml
new file mode 100644
index 00000000000..4c90d81ab5f
--- /dev/null
+++ b/baselines/fednova/fednova/conf/strategy/fedavg.yaml
@@ -0,0 +1,10 @@
+---
+name: fedavg
+strategy:
+ _target_: flwr.server.strategy.FedAvg
+ _recursive_: false
+
+
+client_fn:
+ _target_: fednova.baseline_client.gen_clients_fedavg
+ _recursive_: false
diff --git a/baselines/fednova/fednova/conf/strategy/fednova.yaml b/baselines/fednova/fednova/conf/strategy/fednova.yaml
new file mode 100644
index 00000000000..b08052ab111
--- /dev/null
+++ b/baselines/fednova/fednova/conf/strategy/fednova.yaml
@@ -0,0 +1,10 @@
+---
+name: fednova
+strategy:
+ _target_: fednova.strategy.FedNova
+ _recursive_: false
+
+
+client_fn:
+ _target_: fednova.client.gen_clients_fednova
+ _recursive_: false
\ No newline at end of file
diff --git a/baselines/fednova/fednova/dataset.py b/baselines/fednova/fednova/dataset.py
new file mode 100644
index 00000000000..f8a19cdac47
--- /dev/null
+++ b/baselines/fednova/fednova/dataset.py
@@ -0,0 +1,80 @@
+"""Dataloaders for the CIFAR-10 dataset."""
+
+from typing import List, Tuple
+
+import torch
+from omegaconf import DictConfig
+from torch.utils.data import DataLoader
+from torchvision import datasets, transforms
+
+from fednova.dataset_preparation import DataPartitioner
+
+
+def load_datasets(config: DictConfig) -> Tuple[List[DataLoader], DataLoader, List]:
+ """Create the dataloaders to be fed into the model.
+
+ Parameters
+ ----------
+ config: DictConfig
+ Parameterises the dataset partitioning process
+ num_clients : int
+ The number of clients that hold a part of the data
+ val_ratio : float, optional
+ The ratio of training data that will be used for validation (between 0 and 1),
+ by default 0.1
+ batch_size : int, optional
+ The size of the batches to be fed into the model, by default 32
+ seed : int, optional
+ Used to set a fix seed to replicate experiments, by default 42
+
+ Returns
+ -------
+ Tuple[DataLoader, DataLoader, List]
+ The DataLoader for training, the DataLoader for testing, client dataset sizes.
+ """
+ transform_train = transforms.Compose(
+ [
+ transforms.RandomCrop(32, padding=4),
+ transforms.RandomHorizontalFlip(),
+ transforms.ToTensor(),
+ transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
+ ]
+ )
+
+ transform_test = transforms.Compose(
+ [
+ transforms.ToTensor(),
+ transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
+ ]
+ )
+
+ trainset = datasets.CIFAR10(
+ root=config.datapath, train=True, download=True, transform=transform_train
+ )
+
+ testset = datasets.CIFAR10(
+ root=config.datapath, train=False, download=True, transform=transform_test
+ )
+
+ partition_sizes = [1.0 / config.num_clients for _ in range(config.num_clients)]
+
+ partition_obj = DataPartitioner(
+ trainset, partition_sizes, is_non_iid=config.NIID, alpha=config.alpha
+ )
+ ratio = partition_obj.ratio
+
+ trainloaders = []
+ for data_split in range(config.num_clients):
+ client_partition = partition_obj.use(data_split)
+ trainloaders.append(
+ torch.utils.data.DataLoader(
+ client_partition,
+ batch_size=config.batch_size,
+ shuffle=True,
+ pin_memory=True,
+ )
+ )
+
+ test_loader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)
+
+ return trainloaders, test_loader, ratio
diff --git a/baselines/fednova/fednova/dataset_preparation.py b/baselines/fednova/fednova/dataset_preparation.py
new file mode 100644
index 00000000000..f5cc63c19df
--- /dev/null
+++ b/baselines/fednova/fednova/dataset_preparation.py
@@ -0,0 +1,119 @@
+"""The methodology to create a Dirichlet distributed Non-IID CIFAR dataset.
+
+obtained from source: https://github.com/JYWa/FedNova/blob/master/util_v4.py
+"""
+
+
+from random import Random
+
+import numpy as np
+
+
+class Partition:
+ """Dataset-like object, but only access a subset of it."""
+
+ def __init__(self, data, index):
+ self.data = data
+ self.index = index
+
+ def __len__(self):
+ """Return the length of the partition."""
+ return len(self.index)
+
+ def __getitem__(self, index):
+ """Return the item at index idx."""
+ data_idx = self.index[index]
+ return self.data[data_idx]
+
+
+class DataPartitioner:
+ """Partitions a dataset into different chuncks."""
+
+ def __init__( # pylint: disable=too-many-arguments
+ self,
+ data,
+ sizes,
+ seed=2020,
+ is_non_iid=False,
+ alpha=0,
+ dataset=None,
+ ):
+ self.data = data
+ self.dataset = dataset
+ if is_non_iid:
+ self.partitions, self.ratio = self._get_dirichlet_data_(
+ data, sizes, seed, alpha
+ )
+
+ else:
+ self.partitions = []
+ self.ratio = sizes
+ rng = Random()
+ # rng.seed(seed)
+ data_len = len(data)
+ indexes = list(range(0, data_len))
+ rng.shuffle(indexes)
+
+ for frac in sizes:
+ part_len = int(frac * data_len)
+ self.partitions.append(indexes[0:part_len])
+ indexes = indexes[part_len:]
+
+ def use(self, partition):
+ """Return a partition of the dataset."""
+ return Partition(self.data, self.partitions[partition])
+
+ @staticmethod
+ def _get_dirichlet_data_(
+ data, psizes, seed, alpha
+ ): # pylint: disable=too-many-locals
+ """Return a partition of the dataset based on Dirichlet distribution."""
+ n_nets = len(psizes)
+ K = 10
+ label_list = np.array(data.targets)
+ min_size = 0
+ N = len(label_list)
+ np.random.seed(seed)
+
+ net_dataidx_map = {}
+ while min_size < K:
+ idx_batch = [[] for _ in range(n_nets)]
+ # for each class in the dataset
+ for k in range(K):
+ idx_k = np.where(label_list == k)[0]
+ np.random.shuffle(idx_k)
+ proportions = np.random.dirichlet(np.repeat(alpha, n_nets))
+ # Balance
+ proportions = np.array(
+ [
+ p * (len(idx_j) < N / n_nets)
+ for p, idx_j in zip(proportions, idx_batch)
+ ]
+ )
+ proportions = proportions / proportions.sum()
+ proportions = (np.cumsum(proportions) * len(idx_k)).astype(int)[:-1]
+ idx_batch = [
+ idx_j + idx.tolist()
+ for idx_j, idx in zip(idx_batch, np.split(idx_k, proportions))
+ ]
+ min_size = min((len(idx_j) for idx_j in idx_batch))
+
+ for j in range(n_nets):
+ np.random.shuffle(idx_batch[j])
+ net_dataidx_map[j] = idx_batch[j]
+
+ net_cls_counts = {}
+
+ for net_i, dataidx in net_dataidx_map.items():
+ unq, unq_cnt = np.unique(label_list[dataidx], return_counts=True)
+ tmp = {unq[i]: unq_cnt[i] for i in range(len(unq))}
+ net_cls_counts[net_i] = tmp
+ # print('Data statistics: %s' % str(net_cls_counts))
+
+ local_sizes = []
+ for i in range(n_nets):
+ local_sizes.append(len(net_dataidx_map[i]))
+ local_sizes = np.array(local_sizes)
+ print("Client Dataset sizes: ", local_sizes)
+
+ return idx_batch, local_sizes
diff --git a/baselines/fednova/fednova/main.py b/baselines/fednova/fednova/main.py
new file mode 100644
index 00000000000..750338ff2c6
--- /dev/null
+++ b/baselines/fednova/fednova/main.py
@@ -0,0 +1,154 @@
+"""Entry script for Federated training on CIFAR-10 using FedNova."""
+
+import os
+import random
+import time
+from collections import OrderedDict
+from functools import partial
+
+import flwr as fl
+import hydra
+import numpy as np
+import pandas as pd
+import torch
+from flwr.common import ndarrays_to_parameters
+from hydra.core.hydra_config import HydraConfig
+from hydra.utils import call, instantiate
+from omegaconf import DictConfig, OmegaConf
+
+from fednova.dataset import load_datasets
+from fednova.models import test
+from fednova.strategy import weighted_average
+from fednova.utils import fit_config
+
+
+@hydra.main(config_path="conf", config_name="base", version_base=None)
+def main(cfg: DictConfig) -> None: # pylint: disable=too-many-locals
+ """Run the baseline.
+
+ Parameters
+ ----------
+ cfg : DictConfig
+ An omegaconf object that stores the hydra config.
+ """
+ start = time.time()
+
+ # Set seeds for reproduceability
+ torch.manual_seed(cfg.seed)
+ np.random.seed(cfg.seed)
+ random.seed(cfg.seed)
+ if torch.cuda.is_available():
+ torch.cuda.manual_seed(cfg.seed)
+ # torch.backends.cudnn.deterministic = True
+
+ # 1. Print parsed config
+ print(OmegaConf.to_yaml(cfg))
+
+ # 2. Prepare your dataset and directories
+
+ if not os.path.exists(cfg.datapath):
+ os.makedirs(cfg.datapath)
+ if not os.path.exists(cfg.checkpoint_path):
+ os.makedirs(cfg.checkpoint_path)
+
+ trainloaders, testloader, data_sizes = load_datasets(cfg)
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
+
+ if cfg.mode == "test":
+ checkpoint = np.load(
+ f"{cfg.checkpoint_path}bestModel_{cfg.exp_name}_"
+ f"varEpochs_{cfg.var_local_epochs}.npz",
+ allow_pickle=True,
+ )
+ model = instantiate(cfg.model)
+ params_dict = zip(model.state_dict().keys(), checkpoint["arr_0"])
+ state_dict = OrderedDict({k: torch.Tensor(v) for k, v in params_dict})
+ model.load_state_dict(state_dict)
+ loss, metrics = test(model.to(device), testloader, device)
+ print(f"----Loss: {loss}, Accuracy: {metrics['accuracy']} on Test set ------")
+ return None
+
+ # 3. Define your clients
+ client_fn = call(
+ cfg.strategy.client_fn,
+ num_epochs=cfg.num_epochs,
+ trainloaders=trainloaders,
+ testloader=testloader,
+ data_sizes=data_sizes,
+ model=cfg.model,
+ exp_config=cfg,
+ )
+
+ # 4. Define your strategy
+
+ ndarrays = [
+ layer_param.cpu().numpy()
+ for _, layer_param in instantiate(cfg.model).state_dict().items()
+ ]
+ init_parameters = ndarrays_to_parameters(ndarrays)
+
+ eval_fn = partial(test, instantiate(cfg.model), testloader, device)
+ fit_config_fn = partial(fit_config, cfg)
+
+ extra_args = {} if cfg.strategy.name == "fedavg" else {"exp_config": cfg}
+ strategy = instantiate(
+ cfg.strategy.strategy,
+ evaluate_metrics_aggregation_fn=weighted_average,
+ accept_failures=False,
+ on_fit_config_fn=fit_config_fn,
+ initial_parameters=init_parameters,
+ evaluate_fn=eval_fn,
+ fraction_evaluate=0.0,
+ **extra_args,
+ )
+
+ # 5. Start Simulation
+
+ history = fl.simulation.start_simulation(
+ client_fn=client_fn,
+ num_clients=cfg.num_clients,
+ config=fl.server.ServerConfig(num_rounds=cfg.num_rounds),
+ strategy=strategy,
+ client_resources=cfg.client_resources,
+ )
+ # in case if you are running experiment on a slurm cluster, it could be helpful
+ # to add : ray_init_args={"ignore_reinit_error": True, "num_cpus": 8} as an extra
+ # argument in above start_simulation(). This prevents the simulation from using
+ # all cores and limits them to 8.
+
+ # 6. Save your results
+ save_path = HydraConfig.get().runtime.output_dir
+
+ # rounds, train_loss = zip(*history.losses_distributed)
+ # _, train_accuracy = zip(*history.metrics_distributed["accuracy"])
+ rounds, test_loss = zip(*history.losses_centralized)
+ _, test_accuracy = zip(*history.metrics_centralized["accuracy"])
+
+ if len(rounds) != cfg.num_rounds:
+ # drop zeroth evaluation round before start of training
+ test_loss = test_loss[1:]
+ test_accuracy = test_accuracy[1:]
+ rounds = rounds[1:]
+
+ file_name = os.path.join(
+ save_path,
+ f"{cfg.exp_name}_{cfg.strategy.name}_varEpoch_"
+ f"{cfg.var_local_epochs}_seed_{cfg.seed}.csv",
+ )
+
+ # df = pd.DataFrame({"round": rounds, "train_loss": train_loss, "train_accuracy":
+ # train_accuracy, "test_loss": test_loss, "test_accuracy": test_accuracy})
+
+ df = pd.DataFrame(
+ {"round": rounds, "test_loss": test_loss, "test_accuracy": test_accuracy}
+ )
+
+ df.to_csv(file_name, index=False)
+
+ print(f"---------Experiment Completed in : {(time.time()-start)/60} minutes")
+
+ return None
+
+
+if __name__ == "__main__":
+ main()
diff --git a/baselines/fednova/fednova/models.py b/baselines/fednova/fednova/models.py
new file mode 100644
index 00000000000..4de5cf4309f
--- /dev/null
+++ b/baselines/fednova/fednova/models.py
@@ -0,0 +1,366 @@
+"""VGG Model Architecture: Adapted from https://github.com/pytorch/vision.git .
+
+Contains Train, Test function definitions for local client training
+"""
+
+import math
+from collections import OrderedDict
+from typing import Dict, Tuple
+
+import torch
+from flwr.common.typing import NDArrays
+from torch import nn
+from torch.optim.optimizer import Optimizer, required
+
+from fednova.utils import comp_accuracy
+
+
+class VGG(nn.Module):
+ """VGG model."""
+
+ def __init__(self):
+ super().__init__()
+ self.features = make_layers(cfg["A"])
+ self.classifier = nn.Sequential(
+ nn.Dropout(),
+ nn.Linear(512, 512),
+ nn.ReLU(True),
+ nn.Dropout(),
+ nn.Linear(512, 512),
+ nn.ReLU(True),
+ nn.Linear(512, 10),
+ )
+ # Initialize weights
+ for m in self.modules():
+ if isinstance(m, nn.Conv2d):
+ n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
+ m.weight.data.normal_(0, math.sqrt(2.0 / n))
+ m.bias.data.zero_()
+
+ def forward(self, x):
+ """Forward pass through the network."""
+ x = self.features(x)
+ x = x.view(x.size(0), -1)
+ x = self.classifier(x)
+ return x
+
+
+def make_layers(network_cfg, batch_norm=False):
+ """Define the layer configuration of the VGG-16 network."""
+ layers = []
+ in_channels = 3
+ for v in network_cfg:
+ if v == "M":
+ layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
+ else:
+ conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)
+ if batch_norm:
+ layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)]
+ else:
+ layers += [conv2d, nn.ReLU(inplace=True)]
+ in_channels = v
+ return nn.Sequential(*layers)
+
+
+cfg = {
+ "A": [64, "M", 128, "M", 256, 256, "M", 512, 512, "M", 512, 512, "M"],
+ "B": [64, 64, "M", 128, 128, "M", 256, 256, "M", 512, 512, "M", 512, 512, "M"],
+ "D": [
+ 64,
+ 64,
+ "M",
+ 128,
+ 128,
+ "M",
+ 256,
+ 256,
+ 256,
+ "M",
+ 512,
+ 512,
+ 512,
+ "M",
+ 512,
+ 512,
+ 512,
+ "M",
+ ],
+ "E": [
+ 64,
+ 64,
+ "M",
+ 128,
+ 128,
+ "M",
+ 256,
+ 256,
+ 256,
+ 256,
+ "M",
+ 512,
+ 512,
+ 512,
+ 512,
+ "M",
+ 512,
+ 512,
+ 512,
+ 512,
+ "M",
+ ],
+}
+
+
+# pylint: disable=too-many-locals,too-many-arguments
+def train(
+ model, optimizer, trainloader, device, epochs, proximal_mu=0.0
+) -> Tuple[float, float]:
+ """Train the client model for one round of federated learning."""
+ criterion = nn.CrossEntropyLoss()
+ model = model.to(device)
+ if proximal_mu > 0.0:
+ global_params = [val.detach().clone() for val in model.parameters()]
+ else:
+ global_params = None
+ model.train()
+
+ train_losses = []
+ train_accuracy = []
+ for _epoch in range(epochs):
+ for _batch_idx, (data, target) in enumerate(trainloader):
+ # data loading
+ data = data.to(device)
+ target = target.to(device)
+
+ optimizer.zero_grad()
+
+ # forward pass
+ output = model(data)
+
+ if global_params is None:
+ loss = criterion(output, target)
+ else:
+ # Proximal updates for FedProx
+ proximal_term = 0.0
+ for local_weights, global_weights in zip(
+ model.parameters(), global_params
+ ):
+ proximal_term += torch.square(
+ (local_weights - global_weights).norm(2)
+ )
+ loss = criterion(output, target) + (proximal_mu / 2) * proximal_term
+
+ # backward pass
+ loss.backward()
+
+ # gradient step
+ optimizer.step()
+
+ # write log files
+ acc = comp_accuracy(output, target)
+
+ train_losses.append(loss.item())
+ train_accuracy.append(acc[0].item())
+
+ train_loss = sum(train_losses) / len(train_losses)
+ train_acc = sum(train_accuracy) / len(train_accuracy)
+
+ return train_loss, train_acc
+
+
+def test(model, test_loader, device, *args) -> Tuple[float, Dict[str, float]]:
+ """Evaluate the federated model on a test set.
+
+ The server Strategy(FedNova, FedAvg, FedProx) uses the same method to compute
+ centralized evaluation on test set using the args. args[0]: int = server round
+ args[1]: List[NDArray] = server model parameters args[2]: Dict = {}
+ """
+ criterion = nn.CrossEntropyLoss()
+ if len(args) > 1:
+ # load the model parameters
+ params_dict = zip(model.state_dict().keys(), args[1])
+ state_dict = OrderedDict({k: torch.Tensor(v) for k, v in params_dict})
+ model.load_state_dict(state_dict)
+
+ model = model.to(device)
+ model.eval()
+ accuracy = []
+ total_loss = 0.0
+
+ with torch.no_grad():
+ for data, target in test_loader:
+ data = data.to(device)
+ target = target.to(device)
+ outputs = model(data)
+ total_loss += criterion(outputs, target).item()
+ acc1 = comp_accuracy(outputs, target)
+ accuracy.append(acc1[0].item())
+
+ total_loss /= len(test_loader)
+ return total_loss, {"accuracy": sum(accuracy) / len(accuracy)}
+
+
+class ProxSGD(Optimizer): # pylint: disable=too-many-instance-attributes
+ """Optimizer class for FedNova that supports Proximal, SGD, and Momentum updates.
+
+ SGD optimizer modified with support for :
+ 1. Maintaining a Global momentum buffer, set using : (self.gmf)
+ 2. Proximal SGD updates, set using : (self.mu)
+ Args:
+ params (iterable): iterable of parameters to optimize or dicts defining
+ parameter groups
+ ratio (float): relative sample size of client
+ gmf (float): global/server/slow momentum factor
+ mu (float): parameter for proximal local SGD
+ lr (float): learning rate
+ momentum (float, optional): momentum factor (default: 0)
+ weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
+ dampening (float, optional): dampening for momentum (default: 0)
+ nesterov (bool, optional): enables Nesterov momentum (default: False)
+ """
+
+ def __init__( # pylint: disable=too-many-arguments
+ self,
+ params,
+ ratio: float,
+ gmf=0,
+ mu=0,
+ lr=required,
+ momentum=0,
+ dampening=0,
+ weight_decay=0,
+ nesterov=False,
+ variance=0,
+ ):
+ self.gmf = gmf
+ self.ratio = ratio
+ self.momentum = momentum
+ self.mu = mu
+ self.local_normalizing_vec = 0
+ self.local_counter = 0
+ self.local_steps = 0
+ self.lr = lr
+
+ if lr is not required and lr < 0.0:
+ raise ValueError(f"Invalid learning rate: {lr}")
+ if momentum < 0.0:
+ raise ValueError(f"Invalid momentum value: {momentum}")
+ if weight_decay < 0.0:
+ raise ValueError(f"Invalid weight_decay value: {weight_decay}")
+
+ defaults = {
+ "lr": lr,
+ "momentum": momentum,
+ "dampening": dampening,
+ "weight_decay": weight_decay,
+ "nesterov": nesterov,
+ "variance": variance,
+ }
+ if nesterov and (momentum <= 0 or dampening != 0):
+ raise ValueError("Nesterov momentum requires a momentum and zero dampening")
+ super().__init__(params, defaults)
+
+ def __setstate__(self, state):
+ """Set the optimizer state."""
+ super().__setstate__(state)
+ for group in self.param_groups:
+ group.setdefault("nesterov", False)
+
+ def step(self, closure=None): # pylint: disable=too-many-branches
+ """Perform a single optimization step."""
+ for group in self.param_groups:
+ weight_decay = group["weight_decay"]
+ momentum = group["momentum"]
+ dampening = group["dampening"]
+ nesterov = group["nesterov"]
+
+ for p in group["params"]:
+ if p.grad is None:
+ continue
+ d_p = p.grad.data
+
+ if weight_decay != 0:
+ d_p.add_(p.data, alpha=weight_decay)
+
+ param_state = self.state[p]
+
+ # if 'old_init' not in param_state:
+ # param_state['old_init'] = torch.clone(p.data).detach()
+
+ local_lr = group["lr"]
+
+ # apply momentum updates
+ if momentum != 0:
+ if "momentum_buffer" not in param_state:
+ buf = param_state["momentum_buffer"] = torch.clone(d_p).detach()
+ else:
+ buf = param_state["momentum_buffer"]
+ buf.mul_(momentum).add_(d_p, alpha=1 - dampening)
+ if nesterov:
+ d_p = d_p.add(momentum, buf)
+ else:
+ d_p = buf
+
+ # apply proximal updates
+ if self.mu != 0:
+ if param_state["old_init"].device != p.device:
+ param_state["old_init"] = param_state["old_init"].to(p.device)
+ d_p.add_(p.data - param_state["old_init"], alpha=self.mu)
+
+ # update accumalated local updates
+ if "cum_grad" not in param_state:
+ param_state["cum_grad"] = torch.clone(d_p).detach()
+ param_state["cum_grad"].mul_(local_lr)
+
+ else:
+ param_state["cum_grad"].add_(d_p, alpha=local_lr)
+
+ p.data.add_(d_p, alpha=-local_lr)
+
+ # compute local normalizing vector a_i
+ if self.momentum != 0:
+ self.local_counter = self.local_counter * self.momentum + 1
+ self.local_normalizing_vec += self.local_counter
+
+ etamu = local_lr * self.mu
+ if etamu != 0:
+ self.local_normalizing_vec *= 1 - etamu
+ self.local_normalizing_vec += 1
+
+ if self.momentum == 0 and etamu == 0:
+ self.local_normalizing_vec += 1
+
+ self.local_steps += 1
+
+ def get_gradient_scaling(self) -> Dict[str, float]:
+ """Compute the scaling factor for local client gradients.
+
+ Returns: A dictionary containing weight, tau, and local_norm.
+ """
+ if self.mu != 0:
+ local_tau = torch.tensor(self.local_steps * self.ratio)
+ else:
+ local_tau = torch.tensor(self.local_normalizing_vec * self.ratio)
+ local_stats = {
+ "weight": self.ratio,
+ "tau": local_tau.item(),
+ "local_norm": self.local_normalizing_vec,
+ }
+
+ return local_stats
+
+ def set_model_params(self, init_params: NDArrays):
+ """Set the model parameters to the given values."""
+ i = 0
+ for group in self.param_groups:
+ for p in group["params"]:
+ param_state = self.state[p]
+ param_tensor = torch.tensor(init_params[i])
+ p.data.copy_(param_tensor)
+ param_state["old_init"] = param_tensor
+ i += 1
+
+ def set_lr(self, lr: float):
+ """Set the learning rate to the given value."""
+ for param_group in self.param_groups:
+ param_group["lr"] = lr
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_1_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_1_Dec3.csv
new file mode 100644
index 00000000000..40e533a5a87
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3322750033846327,9.952229299363058
+2,2.4105564196398306,9.952229299363058
+3,2.3679525867389266,10.270700636942674
+4,2.3119359957944057,12.380573248407643
+5,2.2538183433994368,13.146894904458598
+6,2.1338354956572223,16.59036624203822
+7,2.1430394315415886,15.963375796178344
+8,2.0121850686468137,22.123805732484076
+9,2.0339513151508988,21.80533439490446
+10,1.9237605059982106,25.189092356687897
+11,1.8606235851907427,26.60230891719745
+12,1.8454573230378946,26.76154458598726
+13,1.8018445573794615,27.46815286624204
+14,1.7549074485803107,28.045382165605094
+15,1.7283586810348899,29.508359872611464
+16,1.6959762550463342,31.757563694267517
+17,1.665015266959075,33.66839171974522
+18,1.6565429746724998,33.797770700636946
+19,1.6144128802475657,35.64888535031847
+20,1.6042149287120553,35.32046178343949
+21,1.578308189750477,36.47492038216561
+22,1.579000472263166,36.36544585987261
+23,1.5511337465541377,37.14171974522293
+24,1.5532452824768748,37.14171974522293
+25,1.5067142164631255,39.22173566878981
+26,1.5018903351133797,38.86345541401274
+27,1.4810384701771342,39.26154458598726
+28,1.4624813787496773,39.9781050955414
+29,1.4523854688474327,40.42595541401274
+30,1.4298117396178518,40.87380573248408
+31,1.424257324000073,40.625
+32,1.4029336013611715,41.69984076433121
+33,1.3906122241050574,41.78941082802548
+34,1.3731643067803352,42.565684713375795
+35,1.3557027942815405,43.86942675159236
+36,1.3114684675909152,47.452229299363054
+37,1.3281650626735322,45.28264331210191
+38,1.2966709121776994,47.36265923566879
+39,1.2780022165577882,48.00955414012739
+40,1.2652725854497047,49.392914012738856
+41,1.243788211588647,51.61226114649681
+42,1.2504112952074427,50.009952229299365
+43,1.22148536345002,53.274283439490446
+44,1.2267895747142232,51.1046974522293
+45,1.1959975403585252,53.2046178343949
+46,1.1871314997885638,53.71218152866242
+47,1.1563475386352295,55.72253184713376
+48,1.148399258115489,56.41918789808917
+49,1.1724276459141143,54.24960191082803
+50,1.1100040693191966,57.34474522292994
+51,1.1052443806532841,58.88734076433121
+52,1.1151954292491744,58.021496815286625
+53,1.1144338580453472,57.742834394904456
+54,1.105499767953423,59.11624203821656
+55,1.1056232361277198,58.439490445859875
+56,1.0818458879069917,60.26074840764331
+57,1.0668455855861592,60.370222929936304
+58,1.0638597493718385,60.559315286624205
+59,1.0662670507552519,60.947452229299365
+60,1.057197136484134,60.87778662420382
+61,1.0405825205669281,62.291003184713375
+62,1.0319705795330607,62.291003184713375
+63,1.0291373395616081,62.9578025477707
+64,1.031986176208326,62.151671974522294
+65,1.0100131904243663,63.62460191082803
+66,1.013776635288433,63.35589171974522
+67,1.0080456509711637,63.44546178343949
+68,0.9991133524354097,63.684315286624205
+69,0.9843284631990323,65.37619426751593
+70,1.010632030903154,63.465366242038215
+71,0.985465438122962,64.8984872611465
+72,0.9952558279037476,63.89331210191083
+73,0.9606693914741468,65.96337579617834
+74,0.9674361310187419,65.22691082802548
+75,0.9285249102647137,66.53065286624204
+76,0.9385288361531154,66.55055732484077
+77,0.9433654280984478,66.14251592356688
+78,0.9416350623604598,66.43113057324841
+79,0.9370440415516021,66.32165605095541
+80,0.9327579558275307,66.88893312101911
+81,0.9296600476951357,67.0282643312102
+82,0.9242681576188203,67.16759554140127
+83,0.9219367192808989,67.79458598726114
+84,0.9247711008521402,67.52587579617834
+85,0.9145487330521748,67.7249203821656
+86,0.9039811264177796,68.2125796178344
+87,0.9077371191826595,68.28224522292993
+88,0.8973047904148224,68.57085987261146
+89,0.9074147632167597,67.97372611464968
+90,0.8970765460069012,68.76990445859873
+91,0.8817227232228418,69.35708598726114
+92,0.878988860519069,69.51632165605096
+93,0.891782239364211,68.5609076433121
+94,0.8796547404520071,69.16799363057325
+95,0.8809166763238846,69.43670382165605
+96,0.8831617649953076,68.9390923566879
+97,0.8574279960553357,70.41202229299363
+98,0.8689477474066862,69.54617834394904
+99,0.842455934946704,70.65087579617834
+100,0.8448937242957437,70.5812101910828
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_2_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_2_Dec3.csv
new file mode 100644
index 00000000000..e28157d3641
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3476606280940353,9.952229299363058
+2,2.4150860005882895,9.952229299363058
+3,2.3543904632519763,10.021894904458598
+4,2.314201342831751,12.738853503184714
+5,2.21177273950759,14.112261146496815
+6,2.1542300008664466,15.356289808917197
+7,2.106571883912299,18.212579617834393
+8,2.0294462138680136,22.113853503184714
+9,1.9784084672381164,23.66640127388535
+10,1.9156107819004424,24.810907643312103
+11,1.8663199638864796,25.348328025477706
+12,1.8289746995184832,26.671974522292995
+13,1.7840559702769967,26.36345541401274
+14,1.7511274427365346,31.47890127388535
+15,1.7418153422653295,30.155254777070063
+16,1.7000891714339044,33.2703025477707
+17,1.6965105260253712,32.50398089171974
+18,1.6511808937522257,33.9171974522293
+19,1.6294961507153358,35.12141719745223
+20,1.6175467018868512,35.7484076433121
+21,1.5939474121020858,36.892914012738856
+22,1.5875366242827884,36.8531050955414
+23,1.5581843951705154,38.156847133757964
+24,1.5471209204121001,38.1468949044586
+25,1.5151541506408885,39.69944267515923
+26,1.5135779509878462,39.36106687898089
+27,1.5398373345660556,38.047372611464965
+28,1.4845366272956702,40.34633757961783
+29,1.4758846402927568,41.30175159235669
+30,1.4383532795936438,42.207404458598724
+31,1.4279360642099077,42.734872611464965
+32,1.3939757620453075,44.745222929936304
+33,1.3910736339107441,45.94944267515923
+34,1.3633867069414467,46.02906050955414
+35,1.3464896709296355,47.15366242038217
+36,1.326327733173492,48.447452229299365
+37,1.316781650682923,49.86066878980892
+38,1.3033904361117417,49.960191082802545
+39,1.27481520593546,51.22412420382165
+40,1.2569116213519103,53.333996815286625
+41,1.2679610696567851,51.47292993630573
+42,1.2261111690739916,54.508359872611464
+43,1.2011927297920177,55.21496815286624
+44,1.1674713894819757,56.36942675159236
+45,1.1612690212620291,57.245222929936304
+46,1.1427871015421145,58.47929936305732
+47,1.1279667145127703,59.5640923566879
+48,1.1407171601702453,58.73805732484077
+49,1.127839179555322,59.972133757961785
+50,1.0751735719905537,61.05692675159236
+51,1.0834679265690457,61.534633757961785
+52,1.0785544210938132,61.91281847133758
+53,1.0714753068936098,62.25119426751592
+54,1.0731031739028396,62.36066878980892
+55,1.1051241854193863,59.922372611464965
+56,1.0639808606949581,62.5
+57,1.0829800359762398,60.77826433121019
+58,1.042195085886937,63.95302547770701
+59,1.0401526503502183,63.34593949044586
+60,1.0189027087703633,64.69944267515923
+61,1.0205797086096113,63.95302547770701
+62,1.0139479508065874,64.56011146496816
+63,0.9898379824723408,65.53542993630573
+64,0.9943730823553292,65.21695859872611
+65,0.9786591567810933,65.67476114649682
+66,0.9848891333409935,65.86385350318471
+67,0.9558160020287629,67.00835987261146
+68,0.968339874486255,66.13256369426752
+69,0.9735497820908856,66.15246815286625
+70,0.9684426032813491,66.32165605095541
+71,0.9531537685424659,66.86902866242038
+72,0.9351116646626952,67.93391719745223
+73,0.9431872781674573,67.32683121019109
+74,0.9281221127054494,68.1827229299363
+75,0.8931233256485811,69.54617834394904
+76,0.9158760294033463,68.68033439490446
+77,0.9179195226377742,68.3718152866242
+78,0.9096345434522932,69.09832802547771
+79,0.9108521422003485,68.42157643312102
+80,0.9203134300602469,68.97890127388536
+81,0.913072215144042,68.3718152866242
+82,0.8824794687283267,70.28264331210191
+83,0.91238536804345,68.45143312101911
+84,0.8973504080893887,69.59593949044586
+85,0.8784983849069875,69.96417197452229
+86,0.8745074758104457,70.27269108280255
+87,0.8758413673965795,70.3125
+88,0.8825303342691653,70.19307324840764
+89,0.8793895031995834,70.07364649681529
+90,0.8683562419217103,70.52149681528662
+91,0.8630021875071677,70.75039808917198
+92,0.8568093184452907,70.72054140127389
+93,0.8505481678968781,71.44705414012739
+94,0.8494296631995281,70.9593949044586
+95,0.8643598628651564,71.01910828025478
+96,0.8424477216544425,71.18829617834395
+97,0.8395011455390105,71.69585987261146
+98,0.8313582617386132,72.21337579617834
+99,0.8435503601268598,71.39729299363057
+100,0.8297491445662869,72.02428343949045
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_3_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_3_Dec3.csv
new file mode 100644
index 00000000000..048346094dc
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.336503150356803,9.952229299363058
+2,2.396827416814816,9.952229299363058
+3,2.3413042961412174,10.529458598726114
+4,2.2497383469988588,13.70421974522293
+5,2.2691426186045263,12.24124203821656
+6,2.1209433655829946,16.719745222929937
+7,2.1038245311967887,18.411624203821656
+8,1.9992265481098441,23.298168789808916
+9,1.9496057899134933,25.03980891719745
+10,1.8871641766493488,26.184315286624205
+11,1.8796809714311247,26.960589171974522
+12,1.799403237689073,28.115047770700638
+13,1.7825091120543752,27.955812101910826
+14,1.7309091842857895,30.941480891719745
+15,1.7024861255269141,31.80732484076433
+16,1.69258324963272,31.90684713375796
+17,1.6721434828582082,33.2703025477707
+18,1.6742736374496654,32.33479299363057
+19,1.6152269126503331,34.66361464968153
+20,1.6000704757726876,35.42993630573248
+21,1.5791497913895138,35.4796974522293
+22,1.585575411274175,37.36066878980892
+23,1.5823217015357534,35.19108280254777
+24,1.5379743090101108,38.3359872611465
+25,1.521167896355793,38.80374203821656
+26,1.5021898382028955,39.67953821656051
+27,1.4991802698487688,39.57006369426752
+28,1.4599751006266115,41.5406050955414
+29,1.4852704348837493,40.13734076433121
+30,1.437091055189728,42.74482484076433
+31,1.4371534289827772,43.32205414012739
+32,1.4067863119635613,45.15326433121019
+33,1.3843835782093608,45.879777070063696
+34,1.384780160181082,45.630971337579616
+35,1.3683512256403638,46.65605095541401
+36,1.343615241111464,47.62141719745223
+37,1.3377281693136616,47.82046178343949
+38,1.333194356055776,47.860270700636946
+39,1.3017862465730898,49.233678343949045
+40,1.4282405239761256,46.50676751592356
+41,1.3566088964984675,46.914808917197455
+42,1.2668099031326876,50.52746815286624
+43,1.2756303882902595,50.408041401273884
+44,1.2441936427620566,51.02507961783439
+45,1.2487991615465492,51.59235668789809
+46,1.233133291362957,52.05015923566879
+47,1.2307757890907822,51.62221337579618
+48,1.2256270958359834,52.17953821656051
+49,1.185818590935628,54.54816878980892
+50,1.1649532242185752,55.39410828025478
+51,1.161687529770432,56.20023885350319
+52,1.1510512536498392,56.72770700636943
+53,1.1491517234759725,56.09076433121019
+54,1.1281814620753003,57.86226114649681
+55,1.1397874981734404,56.34952229299363
+56,1.1252447560334662,57.78264331210191
+57,1.1169096482027867,57.76273885350319
+58,1.1122307803980105,58.966958598726116
+59,1.1096816856390352,58.70820063694268
+60,1.0947599266744723,59.85270700636943
+61,1.1026431523310911,59.136146496815286
+62,1.0787251318336293,60.09156050955414
+63,1.091172667825298,59.76313694267516
+64,1.072162979727338,60.7484076433121
+65,1.0788747068423374,59.394904458598724
+66,1.051829193428064,61.46496815286624
+67,1.0557978927709495,60.80812101910828
+68,1.0383457336456152,61.13654458598726
+69,1.0419494130049543,61.24601910828026
+70,1.0350622610681375,62.121815286624205
+71,1.0339336953345377,61.23606687898089
+72,1.00521474697028,63.24641719745223
+73,1.0097090377929105,62.350716560509554
+74,1.0001640289452425,63.455414012738856
+75,0.9684426989524987,64.37101910828025
+76,1.0020693563351966,63.485270700636946
+77,0.9966880637369339,63.67436305732484
+78,0.9792163493526969,64.00278662420382
+79,0.9872519757337631,63.654458598726116
+80,0.9892654802389206,64.91839171974522
+81,0.9896926443288281,63.73407643312102
+82,0.9591672989972837,65.91361464968153
+83,0.9743639268692891,65.22691082802548
+84,0.9693691282515313,65.91361464968153
+85,1.021231278492387,62.350716560509554
+86,0.9594469970198953,65.94347133757962
+87,0.9820176754028175,63.69426751592356
+88,0.9416516635827957,66.04299363057325
+89,0.9454963161687183,65.67476114649682
+90,0.9273580927757701,67.20740445859873
+91,0.9450143750306148,66.0031847133758
+92,0.9107797438172018,67.82444267515923
+93,0.9440074141617794,66.0828025477707
+94,0.915167161613513,67.54578025477707
+95,0.9114327168768379,67.50597133757962
+96,0.8970982625985601,69.2874203821656
+97,0.9364749170412683,65.91361464968153
+98,0.9041775601684667,68.44148089171975
+99,0.9190235453046811,67.27707006369427
+100,0.8925152166633848,68.41162420382166
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_4_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_4_Dec3.csv
new file mode 100644
index 00000000000..b1ad132988a
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_4_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.340192755316473,9.952229299363058
+2,2.4065807716102356,9.952229299363058
+3,2.356366942642601,9.972133757961783
+4,2.257367764308954,12.420382165605096
+5,2.1630963656553037,15.246815286624203
+6,2.1563196789686847,15.824044585987261
+7,2.0872224880631562,18.97890127388535
+8,1.9657978571144639,24.0843949044586
+9,2.0208943133141584,23.00955414012739
+10,1.8458554030983312,26.00517515923567
+11,1.8088973229098473,27.876194267515924
+12,1.7716375893088663,29.6875
+13,1.7423289520725322,30.27468152866242
+14,1.7117149078162612,31.31966560509554
+15,1.7106302839935206,31.230095541401273
+16,1.670585102336422,32.633359872611464
+17,1.6640049515256456,33.24044585987261
+18,1.6225769489434114,34.11624203821656
+19,1.6030716296214207,35.15127388535032
+20,1.5883301663550602,35.728503184713375
+21,1.5819664047022535,36.37539808917197
+22,1.5575256317284456,37.72890127388535
+23,1.5366469393869875,37.708996815286625
+24,1.5380007992884157,37.91799363057325
+25,1.5062464551561197,39.3312101910828
+26,1.499373656169624,39.8984872611465
+27,1.4855398099133923,39.7890127388535
+28,1.4703046516248375,40.25676751592356
+29,1.4547758565586844,41.192277070063696
+30,1.435782696031461,42.12778662420382
+31,1.4179363319068958,43.13296178343949
+32,1.4072597345728783,43.541003184713375
+33,1.3904125500636495,43.63057324840764
+34,1.377218428690722,45.41202229299363
+35,1.3538683045441937,45.81011146496815
+36,1.3563844823533562,46.28781847133758
+37,1.3693355587637348,46.90485668789809
+38,1.3198597689343106,47.452229299363054
+39,1.290913607664169,49.52229299363057
+40,1.2831293925358231,49.960191082802545
+41,1.2626181172717148,49.67157643312102
+42,1.2519105069196907,50.547372611464965
+43,1.2268231013777908,52.70700636942675
+44,1.2380461381499175,51.78144904458599
+45,1.2119612948150391,52.31886942675159
+46,1.1936329622177562,53.38375796178344
+47,1.2050589630558233,52.129777070063696
+48,1.1866381802376669,54.647691082802545
+49,1.171208395320139,54.369028662420384
+50,1.1367910959918028,55.96138535031847
+51,1.1358783036280589,57.34474522292994
+52,1.1579961750158079,56.658041401273884
+53,1.1256621612864695,58.15087579617835
+54,1.1246193096895887,57.832404458598724
+55,1.1107973369063846,58.56886942675159
+56,1.110518939176183,58.84753184713376
+57,1.1037657222930033,59.305334394904456
+58,1.1094240451314648,58.29020700636943
+59,1.07348582509217,60.370222929936304
+60,1.0804821089574486,60.50955414012739
+61,1.0534585907960394,61.60429936305732
+62,1.054385502247294,60.88773885350319
+63,1.0481761762291004,62.19148089171974
+64,1.025695867978843,62.55971337579618
+65,1.0327831332091313,62.320859872611464
+66,1.0220194143854129,62.7687101910828
+67,1.0158985773469233,63.38574840764331
+68,1.0215645227462622,62.55971337579618
+69,0.9984990035652355,64.12221337579618
+70,1.016971071054981,62.60947452229299
+71,0.9847259536670272,64.82882165605096
+72,0.9911046115456114,64.51035031847134
+73,0.9687198074000656,65.4359076433121
+74,0.9731034021468679,65.29657643312102
+75,0.9364105193478287,66.96855095541402
+76,0.9593083000486824,66.12261146496816
+77,0.9519391116822601,65.95342356687898
+78,0.954614588029825,65.8937101910828
+79,0.9382576365379771,66.85907643312102
+80,0.9766542137048806,64.58001592356688
+81,0.9197572120435679,67.30692675159236
+82,0.9613819285562843,65.07762738853503
+83,0.8983551248623307,68.34195859872611
+84,0.9307596896104752,67.57563694267516
+85,0.9170637161109099,67.89410828025478
+86,0.9129233113519705,67.8343949044586
+87,0.9166463579341864,67.7547770700637
+88,0.8770443121339105,69.61584394904459
+89,0.9054404743917429,68.3718152866242
+90,0.8843468909810304,69.11823248407643
+91,0.8786779930637141,69.71536624203821
+92,0.8859271019887013,68.81966560509554
+93,0.8762777390753388,69.97412420382166
+94,0.8901101392545517,68.79976114649682
+95,0.8577119985203834,70.74044585987261
+96,0.893280333774105,68.76990445859873
+97,0.8607914081424665,70.0437898089172
+98,0.8622454727531239,69.82484076433121
+99,0.8552278538418424,70.44187898089172
+100,0.856869752999324,70.43192675159236
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_5_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_5_Dec3.csv
new file mode 100644
index 00000000000..f6e3f730953
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_5_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.322763842382249,9.952229299363058
+2,2.3703218645350947,9.952229299363058
+3,2.305315975930281,13.525079617834395
+4,2.2346230828837985,13.813694267515924
+5,2.165205067130411,14.759156050955413
+6,2.0943724638337544,17.565684713375795
+7,2.0491420433020138,19.914410828025478
+8,2.037385205554355,20.08359872611465
+9,1.9533660297940492,23.88535031847134
+10,1.9376738838329437,24.12420382165605
+11,1.8697852116481515,26.164410828025478
+12,1.842885736447231,26.871019108280255
+13,1.8031171180640058,29.478503184713375
+14,1.7931042476824135,31.747611464968152
+15,1.7688921682394234,30.951433121019107
+16,1.7410383285230893,32.633359872611464
+17,1.7084242781256413,33.20063694267516
+18,1.7030811438894575,33.61863057324841
+19,1.6533867363717145,34.54418789808917
+20,1.6235538341437177,36.23606687898089
+21,1.6044816234309203,37.34076433121019
+22,1.5849255725836298,36.873009554140125
+23,1.578064128851435,38.455414012738856
+24,1.5343565371385806,38.95302547770701
+25,1.5237641266197155,39.49044585987261
+26,1.4890718885288117,41.02308917197452
+27,1.4745662584426298,41.13256369426752
+28,1.4503213607581558,41.809315286624205
+29,1.4213654250855658,42.44625796178344
+30,1.40902396144381,43.45143312101911
+31,1.394247982912003,43.38176751592356
+32,1.3737070309888026,44.516321656050955
+33,1.3657795775468182,44.44665605095541
+34,1.3372811845913055,46.11863057324841
+35,1.331333041950396,45.53144904458599
+36,1.299177734715164,47.62141719745223
+37,1.306782241839512,46.28781847133758
+38,1.2744887816678188,47.113853503184714
+39,1.257157899391879,49.761146496815286
+40,1.2404180210866746,49.14410828025478
+41,1.2120001877948736,52.03025477707006
+42,1.2188678258543562,51.59235668789809
+43,1.200811847000365,53.02547770700637
+44,1.1879403374756976,53.751990445859875
+45,1.1548014488189844,56.210191082802545
+46,1.1604319727344878,55.17515923566879
+47,1.1391951008966774,56.69785031847134
+48,1.1375973015833811,56.827229299363054
+49,1.1163568925705685,58.23049363057325
+50,1.0798597032097494,58.94705414012739
+51,1.0728171323515048,61.78343949044586
+52,1.093518666401031,59.375
+53,1.0668960323758945,61.49482484076433
+54,1.0748902931334867,60.76831210191083
+55,1.0402483241573262,62.83837579617835
+56,1.0482169606123761,61.88296178343949
+57,1.058586527587502,62.07205414012739
+58,1.0440431328336144,61.71377388535032
+59,1.037830111707092,62.66918789808917
+60,1.0096868641057593,64.35111464968153
+61,1.0074310295141427,64.171974522293
+62,1.0078223328681508,63.61464968152866
+63,0.9896025968964692,64.93829617834395
+64,0.9848645754680512,65.28662420382166
+65,0.9746564672251415,65.99323248407643
+66,0.9771029626487926,64.92834394904459
+67,0.9644029197419525,66.37141719745223
+68,0.969794071404038,65.71457006369427
+69,0.9564006841106779,67.08797770700637
+70,0.9673655450723733,65.515525477707
+71,0.9380250781964344,67.6453025477707
+72,0.9577105599603836,65.45581210191082
+73,0.9532570895875335,66.71974522292993
+74,0.946704349700053,65.85390127388536
+75,0.9005255133483061,68.1827229299363
+76,0.9122892185381264,68.39171974522293
+77,0.9049254302765913,68.14291401273886
+78,0.9137974282738509,68.03343949044586
+79,0.896440048126658,68.88933121019109
+80,0.8918709789112116,69.33718152866243
+81,0.9122986064595022,67.99363057324841
+82,0.8874133172308564,69.50636942675159
+83,0.8875584754214925,69.17794585987261
+84,0.8795238201785239,70.13335987261146
+85,0.8808599201736936,69.92436305732484
+86,0.8754167363142512,69.9343152866242
+87,0.8618993254224206,70.45183121019109
+88,0.8702862346248262,70.03383757961784
+89,0.8598838843357791,70.28264331210191
+90,0.8538035347962835,70.75039808917198
+91,0.8640460307431069,70.44187898089172
+92,0.850994919515719,70.80015923566879
+93,0.8467587012394219,70.96934713375796
+94,0.8624165198605531,70.33240445859873
+95,0.8545254837175843,70.79020700636943
+96,0.8505151127554049,71.28781847133757
+97,0.8396587986854991,71.29777070063695
+98,0.8236551850464693,71.62619426751593
+99,0.8208355918811385,71.93471337579618
+100,0.847788190955569,70.83001592356688
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_6_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_6_Dec3.csv
new file mode 100644
index 00000000000..f0e9a8d4256
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_False_seed_6_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.340674465628946,9.952229299363058
+2,2.4079349511747905,9.952229299363058
+3,2.3667921093618793,10.031847133757962
+4,2.2340524454785,15.98328025477707
+5,2.228541444061668,13.136942675159236
+6,2.162952679737358,15.873805732484076
+7,2.0825987492397333,19.028662420382165
+8,2.035593322128247,21.238057324840764
+9,2.0150116279626347,22.36265923566879
+10,1.9103113223033346,24.731289808917197
+11,1.8436492552423174,27.716958598726116
+12,1.8620525158134995,25.706608280254777
+13,1.790977570661314,28.57285031847134
+14,1.75484215378002,29.78702229299363
+15,1.7455820642459166,29.408837579617835
+16,1.7387434578245613,29.976114649681527
+17,1.678699171467192,32.72292993630573
+18,1.6906812593435785,31.86703821656051
+19,1.6467255915805792,35.04179936305732
+20,1.627046425631092,34.63375796178344
+21,1.6200162248246988,35.40007961783439
+22,1.606779891214553,36.5843949044586
+23,1.5765141992811944,37.27109872611465
+24,1.558946531289702,38.42555732484077
+25,1.5406956771376785,38.684315286624205
+26,1.530584206247026,38.823646496815286
+27,1.5135355960031984,39.67953821656051
+28,1.4986051677898238,40.32643312101911
+29,1.4767899657510648,40.973328025477706
+30,1.4723131482008915,41.51074840764331
+31,1.4530503863741637,42.68511146496815
+32,1.4290293644947611,43.371815286624205
+33,1.411928762296203,44.46656050955414
+34,1.3950658565873553,44.83479299363057
+35,1.4007116958593866,44.95421974522293
+36,1.3680428008365024,45.14331210191083
+37,1.3674026704897546,46.58638535031847
+38,1.3016607700639469,49.61186305732484
+39,1.3079741441520156,49.32324840764331
+40,1.25649298300409,51.801353503184714
+41,1.269007762526251,51.31369426751592
+42,1.2257592495839307,54.00079617834395
+43,1.2285546519953734,53.61265923566879
+44,1.2268368525869529,54.110270700636946
+45,1.1831454778932462,56.75756369426752
+46,1.1964357461139654,56.25
+47,1.1723174714738396,56.399283439490446
+48,1.145808992871813,58.90724522292994
+49,1.1363165162171527,59.07643312101911
+50,1.066190980422269,62.00238853503185
+51,1.0981221259779232,61.43511146496815
+52,1.070915729756568,62.45023885350319
+53,1.083505069374279,62.02229299363057
+54,1.0615949368780586,62.52985668789809
+55,1.0386432857270453,63.80374203821656
+56,1.0488922432729393,63.53503184713376
+57,1.0344537583885678,64.05254777070064
+58,1.0169353735674718,64.57006369426752
+59,1.031998186734072,63.86345541401274
+60,1.012050225096903,65.27667197452229
+61,0.9996738039004575,65.10748407643312
+62,0.9981011903969346,65.71457006369427
+63,0.9881569484996188,65.97332802547771
+64,0.9760363318358257,66.71974522292993
+65,0.9710627160254558,66.66998407643312
+66,0.9837819994634883,65.59514331210191
+67,0.9470246726540243,67.70501592356688
+68,0.9631724281675497,66.76950636942675
+69,0.9289736147898777,68.5907643312102
+70,0.9309865179335236,67.90406050955414
+71,0.9197208672572094,68.43152866242038
+72,0.925698510780456,68.63057324840764
+73,0.9159185856011263,68.70023885350318
+74,0.9203748995331442,68.40167197452229
+75,0.882585943884151,69.59593949044586
+76,0.902729655906653,68.62062101910828
+77,0.9126493847294218,68.73009554140127
+78,0.8978265311307968,69.24761146496816
+79,0.8883458079805799,69.57603503184713
+80,0.8866944939467558,69.83479299363057
+81,0.8834723761886548,69.76512738853503
+82,0.8866441006873064,69.91441082802548
+83,0.8764989691175473,70.07364649681529
+84,0.9001616744478796,69.68550955414013
+85,0.8712542197506898,70.51154458598727
+86,0.8831366706805625,69.73527070063695
+87,0.8451760646643912,71.84514331210191
+88,0.8645749589440169,71.40724522292993
+89,0.855030402256425,71.05891719745223
+90,0.8550644642228533,71.43710191082802
+91,0.8622657546571865,70.91958598726114
+92,0.8354430901017159,71.81528662420382
+93,0.8598625063896179,71.13853503184713
+94,0.9409669603511785,68.71019108280255
+95,0.8758706499816505,70.55135350318471
+96,0.8379398591958793,71.64609872611464
+97,0.8407912630184441,71.45700636942675
+98,0.8216142878410923,72.61146496815287
+99,0.8324818360577723,72.24323248407643
+100,0.8240495407657259,72.37261146496816
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_1_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_1_Dec3.csv
new file mode 100644
index 00000000000..daa0ef02828
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3335574037709814,9.952229299363058
+2,2.437665328858005,9.952229299363058
+3,2.3268929226383284,12.340764331210192
+4,2.308605248761025,12.291003184713375
+5,2.1781966428088535,16.709792993630572
+6,2.084212398073476,22.00437898089172
+7,1.9717256939335235,24.293391719745223
+8,1.8953111536183935,25.139331210191084
+9,1.827386900877497,27.0203025477707
+10,1.7798619763866352,28.75199044585987
+11,1.7507065185316049,29.697452229299362
+12,1.7215931924285404,31.598328025477706
+13,1.6815397428099517,32.633359872611464
+14,1.6635513032317921,33.797770700636946
+15,1.6538463276662645,34.17595541401274
+16,1.6191891598853336,35.48964968152866
+17,1.585386717395418,38.38574840764331
+18,1.5710502460504034,37.22133757961783
+19,1.547519353544636,39.20183121019108
+20,1.5250302765779435,40.25676751592356
+21,1.5048607246131653,40.23686305732484
+22,1.487412335007054,43.202627388535035
+23,1.4809475385459365,43.21257961783439
+24,1.4508136161573373,44.18789808917197
+25,1.4353003813202974,45.57125796178344
+26,1.4007921560554748,47.57165605095541
+27,1.364344395649661,47.810509554140125
+28,1.3696828754084884,49.69148089171974
+29,1.3369159903495935,49.77109872611465
+30,1.3146220286181018,51.87101910828026
+31,1.313776899295248,51.8312101910828
+32,1.2696105298722626,53.43351910828026
+33,1.2560472833882472,54.697452229299365
+34,1.2431284633411723,55.095541401273884
+35,1.2367802645750106,55.04578025477707
+36,1.2026327358689277,56.88694267515923
+37,1.1811617620431694,57.792595541401276
+38,1.1630852894418557,59.25557324840764
+39,1.1529629530420729,59.5640923566879
+40,1.156898500053746,59.942277070063696
+41,1.1629920165250256,59.17595541401274
+42,1.1249102593227556,61.564490445859875
+43,1.1286648690320884,60.81807324840764
+44,1.1225778502263841,61.37539808917197
+45,1.1210014410079665,60.897691082802545
+46,1.0874633948514416,63.25636942675159
+47,1.0650781996690544,63.485270700636946
+48,1.081040079046966,63.56488853503185
+49,1.0712621500537653,63.64450636942675
+50,1.0180107138718768,65.25676751592357
+51,1.0296299799232727,65.14729299363057
+52,1.0079838770210363,65.64490445859873
+53,1.0257651995701396,65.625
+54,1.0251559224098352,65.37619426751593
+55,1.031843919662913,65.09753184713375
+56,1.0090612742551572,65.82404458598727
+57,1.0093433705105144,66.04299363057325
+58,1.0131473131240554,65.71457006369427
+59,0.9855377024905697,66.68988853503184
+60,0.9834266213854407,66.97850318471338
+61,0.9725301671939292,67.57563694267516
+62,0.956439628342914,68.51114649681529
+63,0.957306156492537,68.14291401273886
+64,0.9380209419378049,68.640525477707
+65,0.9413191000367426,69.0187101910828
+66,0.9362532040875429,68.75
+67,0.9310961589691745,68.97890127388536
+68,0.9352894751888932,69.14808917197452
+69,0.9200195601791333,69.78503184713375
+70,0.9262864115131888,69.56608280254777
+71,0.9257096462189012,69.37699044585987
+72,0.9241780801943154,69.51632165605096
+73,0.906249447233358,70.22292993630573
+74,0.9081910753705699,70.1532643312102
+75,0.8620510594860004,71.45700636942675
+76,0.8747333929796887,70.97929936305732
+77,0.8857599705647511,70.41202229299363
+78,0.8617315782103568,71.04896496815287
+79,0.8744132985734636,71.06886942675159
+80,0.8693727748409198,71.28781847133757
+81,0.8682390903211703,71.34753184713375
+82,0.8552009793603497,71.91480891719745
+83,0.8592259454879032,72.08399681528662
+84,0.8587858058085107,71.83519108280255
+85,0.8457170781815887,72.09394904458598
+86,0.8579047352645048,71.55652866242038
+87,0.8404685088024018,72.49203821656052
+88,0.8312955335446983,72.6015127388535
+89,0.8376306371324381,72.5218949044586
+90,0.8357342796720517,72.4124203821656
+91,0.8382854313607428,72.59156050955414
+92,0.8295747987024343,72.75079617834395
+93,0.8283412596981996,72.85031847133757
+94,0.8403935197052682,72.3328025477707
+95,0.8179273779984493,73.18869426751593
+96,0.8228168631814847,73.11902866242038
+97,0.8241028231420334,72.49203821656052
+98,0.8156991223241113,73.20859872611464
+99,0.7989317169235011,73.17874203821655
+100,0.7918282181594023,74.23367834394904
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_2_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_2_Dec3.csv
new file mode 100644
index 00000000000..8f64a68dfb4
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.357691465669377,9.952229299363058
+2,2.4246725656424357,9.952229299363058
+3,2.3716064046142966,10.519506369426752
+4,2.240807094391744,17.625398089171973
+5,2.20070368924718,15.734474522292993
+6,2.1044852369150537,20.611066878980893
+7,1.9955136327986505,23.805732484076433
+8,1.9350733567195333,24.51234076433121
+9,1.855640810006743,25.666799363057326
+10,1.7898093902381362,27.229299363057326
+11,1.764379723056866,27.239251592356688
+12,1.7224332010670074,28.801751592356688
+13,1.706142749756005,30.195063694267517
+14,1.6927160715601246,30.851910828025478
+15,1.6490004829540374,32.90207006369427
+16,1.6159342633690803,36.80334394904459
+17,1.583020815424099,37.27109872611465
+18,1.5799683620975276,38.017515923566876
+19,1.5597464726988677,39.49044585987261
+20,1.5489706195843447,39.052547770700635
+21,1.5104347247226981,42.09792993630573
+22,1.4873689041016207,43.31210191082803
+23,1.495805615072797,42.595541401273884
+24,1.4557722518398504,45.54140127388535
+25,1.433835487456838,45.9593949044586
+26,1.4465999398261877,45.879777070063696
+27,1.4054246700493394,47.75079617834395
+28,1.3551764070608054,50.38813694267516
+29,1.3567188378352268,50.49761146496815
+30,1.36505422015099,49.72133757961783
+31,1.3305586576461792,51.910828025477706
+32,1.3290061722895143,52.01035031847134
+33,1.291412941589477,53.533041401273884
+34,1.2977050163184003,53.28423566878981
+35,1.2514163145593777,54.74721337579618
+36,1.2533326980414663,54.93630573248408
+37,1.2352850391606616,55.07563694267516
+38,1.2292538099228196,55.56329617834395
+39,1.2055585327421783,56.73765923566879
+40,1.1920925386392387,56.458996815286625
+41,1.2027776985411431,56.58837579617835
+42,1.1950716000453683,56.73765923566879
+43,1.1563464133602799,58.36982484076433
+44,1.1429522322241668,58.797770700636946
+45,1.1177521982010763,60.111464968152866
+46,1.1242019871997226,59.414808917197455
+47,1.1073356122727607,59.93232484076433
+48,1.1128639969856116,60.19108280254777
+49,1.0892437282641223,61.32563694267516
+50,1.05096779887084,62.47014331210191
+51,1.0823593788845525,61.86305732484077
+52,1.0701478442568688,61.7734872611465
+53,1.067646617342712,62.490047770700635
+54,1.071357022804819,62.460191082802545
+55,1.059228591098907,62.80851910828026
+56,1.0515245221982337,63.853503184713375
+57,1.0397735663280365,64.13216560509554
+58,1.0194071778066598,64.7392515923567
+59,1.0048828683081705,65.40605095541402
+60,1.016597933070675,64.7093949044586
+61,1.000836148383511,66.07285031847134
+62,0.9939083848029945,65.85390127388536
+63,0.9905807235438353,65.99323248407643
+64,0.9659929214769108,66.66998407643312
+65,0.9798231398224071,66.4609872611465
+66,0.9483817903099546,67.84434713375796
+67,0.9914286322654433,66.1624203821656
+68,0.9502285198800883,67.80453821656052
+69,0.9917996643455165,66.58041401273886
+70,0.9398375202895729,67.98367834394904
+71,0.9326831109964164,68.25238853503184
+72,0.9394512187903095,68.08320063694268
+73,0.9163190031507212,69.00875796178345
+74,0.9177786081459871,68.68033439490446
+75,0.8755639233406941,70.203025477707
+76,0.8976301748281831,69.79498407643312
+77,0.8949508108910481,69.68550955414013
+78,0.9072214440934977,69.3172770700637
+79,0.8937037420120968,70.06369426751593
+80,0.9138230734570011,68.88933121019109
+81,0.8848234984525449,70.37221337579618
+82,0.8920225842743162,69.71536624203821
+83,0.8852355787708501,70.5812101910828
+84,0.8878266799981427,70.17316878980891
+85,0.8641099075602877,71.4171974522293
+86,0.8870656137253828,70.25278662420382
+87,0.8654987439987766,71.63614649681529
+88,0.8623224910657117,71.3077229299363
+89,0.8543313346850644,71.63614649681529
+90,0.8454214793861292,71.875
+91,0.8533469066498386,72.28304140127389
+92,0.8294592028970171,72.29299363057325
+93,0.8182674122464125,73.25835987261146
+94,0.840630019166667,72.02428343949045
+95,0.822501107006316,72.88017515923566
+96,0.8351130618411264,72.15366242038216
+97,0.8094356853491181,73.1687898089172
+98,0.8404607700694139,72.38256369426752
+99,0.8220405897517113,72.9796974522293
+100,0.8271944655734262,72.54179936305732
diff --git a/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_3_Dec3.csv b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_3_Dec3.csv
new file mode 100644
index 00000000000..d1c47a706d9
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fedavg_varEpoch_True_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3530616304677006,9.952229299363058
+2,2.4255656679724433,9.952229299363058
+3,2.3690868851485525,10.589171974522293
+4,2.3187686592150647,12.380573248407643
+5,2.206522738098339,14.42078025477707
+6,2.0592022261042504,22.193471337579616
+7,1.9690654270208565,24.37300955414013
+8,1.9299921313668513,24.980095541401273
+9,1.831635299761584,26.184315286624205
+10,1.754839357297132,30.583200636942674
+11,1.724478620632439,32.36464968152866
+12,1.6964365084459827,33.14092356687898
+13,1.6503787526659146,34.99203821656051
+14,1.6360966772030874,35.13136942675159
+15,1.5967388312528088,36.44506369426752
+16,1.554070885014382,37.97770700636943
+17,1.546183129784408,38.57484076433121
+18,1.526974493530905,38.76393312101911
+19,1.500175952152082,40.017914012738856
+20,1.484022602913486,41.33160828025478
+21,1.4640599808115868,42.038216560509554
+22,1.4658404862045482,42.24721337579618
+23,1.434590646415759,43.80971337579618
+24,1.4124090117254076,45.5015923566879
+25,1.4033679218049262,45.60111464968153
+26,1.4030009880187406,46.466958598726116
+27,1.3524894554903553,47.41242038216561
+28,1.3600646940765866,48.29816878980892
+29,1.3240733139074532,48.72611464968153
+30,1.3229393776814649,49.21377388535032
+31,1.3018163017406585,50.39808917197452
+32,1.2881680905439292,51.015127388535035
+33,1.2969016041725305,50.69665605095541
+34,1.2529866767537063,51.51273885350319
+35,1.251836004150901,52.169585987261144
+36,1.2357114766054094,52.4781050955414
+37,1.249891082951977,52.41839171974522
+38,1.2045780663277692,53.9609872611465
+39,1.208223147377087,53.97093949044586
+40,1.180123123773344,54.55812101910828
+41,1.1974084119128574,54.31926751592356
+42,1.1623034887253099,55.72253184713376
+43,1.1629626386484522,56.19028662420382
+44,1.160576518553837,55.39410828025478
+45,1.1321049613557803,56.74761146496815
+46,1.1494016453718683,55.71257961783439
+47,1.1269069720225728,56.67794585987261
+48,1.1558231821485385,55.871815286624205
+49,1.104404681807111,58.51910828025478
+50,1.0815439387491554,58.58877388535032
+51,1.070996016833433,60.141321656050955
+52,1.0960240007206132,57.97173566878981
+53,1.0895887772748425,58.50915605095541
+54,1.065228800105441,59.6437101910828
+55,1.0703049636190864,59.23566878980892
+56,1.0740109036682517,58.83757961783439
+57,1.0630096307226047,59.63375796178344
+58,1.0498813193315153,60.977308917197455
+59,1.0559557418155063,60.51950636942675
+60,1.0493434777685031,60.1015127388535
+61,1.0341057731847094,61.49482484076433
+62,1.0395645039856054,60.82802547770701
+63,1.035596312231319,61.922770700636946
+64,1.0143071208030554,61.94267515923567
+65,1.009302842768894,61.81329617834395
+66,1.019016650451976,61.68391719745223
+67,0.9965926822583386,63.047372611464965
+68,0.9832063021173902,63.61464968152866
+69,0.9924333186665918,63.17675159235669
+70,0.979694924536784,64.23168789808918
+71,0.9802075419456336,63.55493630573248
+72,0.9961602289205903,63.485270700636946
+73,0.9727894519544711,63.80374203821656
+74,0.9949500014068214,63.6046974522293
+75,0.9291733784280765,66.56050955414013
+76,0.9544882607308163,65.21695859872611
+77,0.9265492710338277,66.05294585987261
+78,0.9410873412326642,65.7842356687898
+79,0.9429135941396094,65.68471337579618
+80,0.9402406967369614,65.45581210191082
+81,0.9327275434117408,66.10270700636943
+82,0.9200515906522229,67.30692675159236
+83,0.9189681623392044,66.89888535031847
+84,0.9122921148682855,68.23248407643312
+85,0.9098898115431427,67.10788216560509
+86,0.9014060212548372,68.23248407643312
+87,0.9152254598915197,67.21735668789809
+88,0.9007361941276841,67.90406050955414
+89,0.8818563868285744,69.27746815286625
+90,0.9301349995242563,65.97332802547771
+91,0.873135586832739,69.70541401273886
+92,0.9144628905946282,67.68511146496816
+93,0.8668459296985797,69.36703821656052
+94,0.8748139534026954,69.49641719745223
+95,0.8861734707644031,69.33718152866243
+96,0.8672366142272949,69.86464968152866
+97,0.851344989363555,70.63097133757962
+98,0.8466126732765489,70.5812101910828
+99,0.8533947782911313,70.41202229299363
+100,0.83496422790418,71.48686305732484
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_1_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_1_Dec3.csv
new file mode 100644
index 00000000000..dad6dde12c4
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3135547394965106,9.952229299363058
+2,2.344216940509286,9.982085987261147
+3,2.3196243207166147,10.081608280254777
+4,2.2646214855704336,13.644506369426752
+5,2.2160055439942963,14.798964968152866
+6,2.15635225575441,15.276671974522293
+7,2.0974987502310687,17.097929936305732
+8,2.0342297075660367,17.764729299363058
+9,1.9854792515943005,20.193073248407643
+10,1.9462593900170295,21.466958598726116
+11,1.9305114913138615,24.09434713375796
+12,1.862824236511425,25.477707006369428
+13,1.806571837443455,27.269108280254777
+14,1.7939733547769534,28.08519108280255
+15,1.7427231764337818,30.672770700636942
+16,1.727487306685964,30.89171974522293
+17,1.7109737517727408,31.100716560509554
+18,1.6793315403021065,32.90207006369427
+19,1.6819107593244809,31.518710191082803
+20,1.6783708933812038,32.98168789808917
+21,1.6399983919350205,31.76751592356688
+22,1.6140811792604484,35.83797770700637
+23,1.6028605433785992,36.3953025477707
+24,1.5909460190754787,35.9375
+25,1.5706426960647486,37.291003184713375
+26,1.5645378099125662,37.17157643312102
+27,1.542902824225699,38.515127388535035
+28,1.531440160077089,39.082404458598724
+29,1.5261478006460105,38.83359872611465
+30,1.5180184993014973,39.17197452229299
+31,1.487440313503241,40.75437898089172
+32,1.4710545258916867,40.87380573248408
+33,1.4588018526696855,42.008359872611464
+34,1.471423770212064,41.15246815286624
+35,1.4269249378495914,42.63535031847134
+36,1.4297839873915266,42.51592356687898
+37,1.4124352719373763,44.21775477707006
+38,1.396683059680234,43.97890127388535
+39,1.380585410033062,46.02906050955414
+40,1.3841959686036323,46.666003184713375
+41,1.3572605119389334,47.27308917197452
+42,1.351750935718512,47.75079617834395
+43,1.3334368277507223,48.427547770700635
+44,1.3254097016753665,48.26831210191083
+45,1.313265010050148,49.233678343949045
+46,1.3034834421364365,49.57205414012739
+47,1.2938757481848358,50.09952229299363
+48,1.281426880010374,51.413216560509554
+49,1.2664790069980987,51.93073248407644
+50,1.2178598980235447,53.21457006369427
+51,1.2413001591992225,53.28423566878981
+52,1.2267444217280976,53.751990445859875
+53,1.2250995487923835,53.274283439490446
+54,1.2102881366280234,54.32921974522293
+55,1.201491686568898,55.72253184713376
+56,1.18774428185384,55.9812898089172
+57,1.1747164130210876,56.857085987261144
+58,1.1729676169194994,57.47412420382165
+59,1.1513317815817086,57.42436305732484
+60,1.1484738618704924,58.051353503184714
+61,1.1462089780029978,58.34992038216561
+62,1.1211126731459502,60.171178343949045
+63,1.1080460126992244,60.13136942675159
+64,1.0931092569023182,60.87778662420382
+65,1.096795659156362,61.42515923566879
+66,1.0872037323417179,61.55453821656051
+67,1.0659945162997884,62.708996815286625
+68,1.0702693959709946,62.908041401273884
+69,1.046447212908678,63.30613057324841
+70,1.0643136281116752,62.65923566878981
+71,1.0187207635041255,64.60987261146497
+72,1.019927317929116,64.72929936305732
+73,1.0094969815509334,65.33638535031847
+74,0.9994545472655326,65.60509554140127
+75,0.9781497963674509,66.23208598726114
+76,0.9878744885420344,66.1922770700637
+77,0.9799841805628151,66.56050955414013
+78,0.972448051355447,67.078025477707
+79,0.9649491496146865,67.27707006369427
+80,0.9629883303004465,67.84434713375796
+81,0.9456330222688663,67.8642515923567
+82,0.9416257363216133,67.90406050955414
+83,0.9339477647641662,68.36186305732484
+84,0.9209046242343393,68.3718152866242
+85,0.9134200147003125,69.40684713375796
+86,0.9059797301413907,69.71536624203821
+87,0.9170569356080074,69.22770700636943
+88,0.91675404226704,69.18789808917198
+89,0.8860924896920562,70.06369426751593
+90,0.8839030364516435,70.70063694267516
+91,0.8945473413558522,70.27269108280255
+92,0.8733135860437041,70.90963375796179
+93,0.86730383232141,70.9892515923567
+94,0.8517118434237826,71.52667197452229
+95,0.849801722605517,71.80533439490446
+96,0.8390645069681155,71.95461783439491
+97,0.8403918773505339,71.97452229299363
+98,0.8630754568014934,71.46695859872611
+99,0.8275319569429774,72.72093949044586
+100,0.8131749246530472,72.93988853503184
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_2_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_2_Dec3.csv
new file mode 100644
index 00000000000..5d98e2d2729
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3147139534069474,9.952229299363058
+2,2.34464079559229,9.982085987261147
+3,2.3246383408831943,10.151273885350319
+4,2.3047021179442195,10.410031847133759
+5,2.214786988155098,15.06767515923567
+6,2.1627518811802955,14.470541401273886
+7,2.0886847114866707,16.122611464968152
+8,2.083886217919125,16.73964968152866
+9,2.008232645168426,17.505971337579616
+10,1.9690375282506274,21.148487261146496
+11,1.9363916740295992,23.07921974522293
+12,1.8819653418413393,24.830812101910826
+13,1.8304073977622257,26.303742038216562
+14,1.8023450579612879,27.348726114649683
+15,1.7957538457433129,29.0406050955414
+16,1.7443277699172877,29.13017515923567
+17,1.7210451174693502,30.254777070063696
+18,1.6826258700364713,31.86703821656051
+19,1.685404905847683,30.31449044585987
+20,1.6694125878583095,32.61345541401274
+21,1.6494589755489568,32.494028662420384
+22,1.622430331388097,33.36982484076433
+23,1.6133818049339732,35.001990445859875
+24,1.6122729778289795,34.85270700636943
+25,1.5907375865681157,35.54936305732484
+26,1.579520854980323,36.455015923566876
+27,1.5701175867372257,35.83797770700637
+28,1.5350959445260892,38.296178343949045
+29,1.535917929782989,38.3359872611465
+30,1.5174423129695236,38.55493630573248
+31,1.512780982217971,39.56011146496815
+32,1.4870611679781773,40.863853503184714
+33,1.484181762500933,40.774283439490446
+34,1.4618715890653573,42.04816878980892
+35,1.4553969893485876,42.366640127388536
+36,1.4362040302556032,42.9140127388535
+37,1.4565660649803793,43.31210191082803
+38,1.404766640086083,44.21775477707006
+39,1.3962353422383593,44.964171974522294
+40,1.3811506017757829,45.48168789808917
+41,1.3785646751428107,45.461783439490446
+42,1.3492017004899919,47.1437101910828
+43,1.3344152080025642,48.34792993630573
+44,1.3137321692363473,50.22890127388535
+45,1.3158000700033394,49.19386942675159
+46,1.3019874285740458,49.960191082802545
+47,1.2825466280530213,50.995222929936304
+48,1.2719985284623068,52.328821656050955
+49,1.2518297532561478,53.17476114649681
+50,1.2103101531411433,54.18988853503185
+51,1.2602591552552145,53.43351910828026
+52,1.2182593801218993,54.677547770700635
+53,1.2120021342471907,55.49363057324841
+54,1.185896565200417,56.36942675159236
+55,1.1837374438905413,56.72770700636943
+56,1.1655600845434104,57.76273885350319
+57,1.155435061758491,57.87221337579618
+58,1.1450716120422266,58.94705414012739
+59,1.1277169463740793,60.05175159235669
+60,1.122649261146594,60.41003184713376
+61,1.103267922143268,61.79339171974522
+62,1.08170316781208,62.36066878980892
+63,1.0857406095334678,62.480095541401276
+64,1.0682084674288512,63.05732484076433
+65,1.0395180286875196,64.45063694267516
+66,1.0393169488117193,64.7890127388535
+67,1.028746341444125,64.88853503184713
+68,1.0013128853147957,66.3017515923567
+69,1.0038336306620554,66.42117834394904
+70,0.990940677891871,66.67993630573248
+71,0.9742954111402962,67.49601910828025
+72,1.021578232194208,65.69466560509554
+73,0.965171686403311,67.7249203821656
+74,0.9578087906928578,67.7249203821656
+75,0.9379855367788084,68.15286624203821
+76,0.9406256504878876,68.32205414012739
+77,0.9265458306689172,68.71019108280255
+78,0.9399232685945595,68.28224522292993
+79,0.910143349580704,69.75517515923566
+80,0.9081217175836016,69.34713375796179
+81,0.9060610024033079,69.32722929936305
+82,0.903259783034112,69.70541401273886
+83,0.8776385165323877,70.70063694267516
+84,0.8983035607702413,69.6656050955414
+85,0.8743056613168899,70.65087579617834
+86,0.8742591624806642,70.78025477707007
+87,0.8847213224240928,70.49164012738854
+88,0.8721467226174227,70.9593949044586
+89,0.8583731412128278,71.53662420382166
+90,0.8462319339916204,71.93471337579618
+91,0.8484674058142742,71.90485668789809
+92,0.8383232605685095,72.48208598726114
+93,0.8514896352199992,71.72571656050955
+94,0.8354212311422748,72.42237261146497
+95,0.8299666781714008,72.40246815286625
+96,0.8237471863342698,72.77070063694268
+97,0.8175628997717693,73.08917197452229
+98,0.8237992872478096,72.48208598726114
+99,0.8168938714227859,72.83041401273886
+100,0.7987781848497452,73.5967356687898
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_3_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_3_Dec3.csv
new file mode 100644
index 00000000000..c4e1a0e05a4
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.314263746237299,9.952229299363058
+2,2.3401927735395494,11.75358280254777
+3,2.3290886362646797,10.071656050955413
+4,2.2686850174217468,14.380971337579618
+5,2.1950367438565395,14.629777070063694
+6,2.1676373269147935,14.609872611464969
+7,2.068650960922241,16.0828025477707
+8,2.070951163389121,15.993232484076433
+9,2.023515052856154,17.406449044585987
+10,2.0123133082298716,18.23248407643312
+11,1.966059431908237,22.26313694267516
+12,1.9059043090054943,23.845541401273884
+13,1.865924652974317,26.025079617834393
+14,1.8056296983342262,27.746815286624205
+15,1.7725826365173243,28.174761146496817
+16,1.7453839505554005,29.189888535031848
+17,1.7377110165395555,29.6875
+18,1.7009895098437169,30.224920382165607
+19,1.6916834662674338,32.245222929936304
+20,1.6533711541230511,32.19546178343949
+21,1.628791411970831,35.2109872611465
+22,1.6164503591075825,34.66361464968153
+23,1.6010602872083142,36.13654458598726
+24,1.5774073600769043,36.83320063694268
+25,1.5798482257089796,36.544585987261144
+26,1.5464552238488654,38.34593949044586
+27,1.528520355558699,39.659633757961785
+28,1.5859148601058182,38.017515923566876
+29,1.4927165136215792,40.19705414012739
+30,1.4824285795734187,39.7093949044586
+31,1.465888383282218,41.79936305732484
+32,1.4744838445809236,41.281847133757964
+33,1.4383888434452616,43.182722929936304
+34,1.4342321438394534,43.123009554140125
+35,1.402001690712704,43.65047770700637
+36,1.4138060284268326,43.680334394904456
+37,1.375894832762943,45.71058917197452
+38,1.364658348879237,45.84992038216561
+39,1.3604850313466066,46.218152866242036
+40,1.3368414890993932,47.09394904458599
+41,1.3315764217619683,47.41242038216561
+42,1.3139995526356303,49.22372611464968
+43,1.3183744986345813,48.38773885350319
+44,1.3035829386134057,49.22372611464968
+45,1.278550564103825,50.16918789808917
+46,1.2778215863902098,49.89052547770701
+47,1.2757866238332858,51.602308917197455
+48,1.2463604652198257,52.0203025477707
+49,1.230460098594617,52.99562101910828
+50,1.197322329518142,52.886146496815286
+51,1.2269423349647766,52.59753184713376
+52,1.2006737491127792,53.90127388535032
+53,1.193821443873606,54.110270700636946
+54,1.178846723714452,54.56807324840764
+55,1.183770223028341,54.96616242038217
+56,1.1830056670365061,55.294585987261144
+57,1.155296104728796,56.3296178343949
+58,1.15205980524136,56.50875796178344
+59,1.1366239045835604,57.48407643312102
+60,1.13037377519972,57.663216560509554
+61,1.1308081172833777,58.09116242038217
+62,1.1128159875323058,58.807722929936304
+63,1.0965566426325755,59.42476114649681
+64,1.10338629431026,58.52906050955414
+65,1.0833022161653847,60.48964968152866
+66,1.0680778056952605,61.49482484076433
+67,1.056546458013498,61.892914012738856
+68,1.0576839925377233,61.902866242038215
+69,1.0471492914637184,62.65923566878981
+70,1.0377780977328113,63.495222929936304
+71,1.0297665094873707,64.24164012738854
+72,1.0047241851782343,65.10748407643312
+73,1.0015759494653933,65.1671974522293
+74,0.9982544874689382,65.12738853503184
+75,0.9779278370225506,65.7842356687898
+76,0.9717319197715468,66.4609872611465
+77,0.975071469309983,65.98328025477707
+78,0.9630559618306008,66.98845541401273
+79,0.9554350360943253,66.9187898089172
+80,0.9314420625662349,68.45143312101911
+81,0.9218258356592458,68.53105095541402
+82,0.9412743092342547,68.03343949044586
+83,0.9045071829656127,69.22770700636943
+84,0.9433413204873443,68.06329617834395
+85,0.9004242287319937,69.7750796178344
+86,0.8915142849752098,70.0437898089172
+87,0.8856788046041112,70.19307324840764
+88,0.8806577662753451,70.1234076433121
+89,0.8702338861811693,70.53144904458598
+90,0.8529793244258613,70.99920382165605
+91,0.8611890692619761,70.9892515923567
+92,0.8482430520331025,71.06886942675159
+93,0.8518462310171431,71.26791401273886
+94,0.8308446016281273,71.96457006369427
+95,0.8376433458297875,71.62619426751593
+96,0.8275630614560121,71.95461783439491
+97,0.8361516162088722,71.75557324840764
+98,0.8319728313737614,72.18351910828025
+99,0.8337777621427159,71.984474522293
+100,0.8098878439064998,72.70103503184713
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_4_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_4_Dec3.csv
new file mode 100644
index 00000000000..fb64f61174f
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_4_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.317027549075473,10.101512738853502
+2,2.345458984375,9.982085987261147
+3,2.3246472443744635,10.09156050955414
+4,2.2744314959094782,14.271496815286625
+5,2.212826915607331,16.968550955414013
+6,2.1674743913541175,14.699442675159236
+7,2.117692031678121,15.356289808917197
+8,2.051082664993918,16.321656050955415
+9,2.0174033930347224,18.023487261146496
+10,1.976600760107587,19.92436305732484
+11,1.9265358713781757,23.347929936305732
+12,1.859536580978685,26.76154458598726
+13,1.8347786839600582,26.373407643312103
+14,1.7690229210883948,28.433519108280255
+15,1.7387390372100149,28.861464968152866
+16,1.720188396751501,29.16998407643312
+17,1.6942666746248864,29.61783439490446
+18,1.6976327341832933,29.936305732484076
+19,1.6684921045971524,32.67316878980892
+20,1.6568794561799165,31.76751592356688
+21,1.6284966651041797,34.84275477707006
+22,1.6019620948536382,34.136146496815286
+23,1.618663323153356,34.40485668789809
+24,1.578346042876031,36.345541401273884
+25,1.5641485513395565,36.763535031847134
+26,1.5632383557641583,37.480095541401276
+27,1.5278504395940502,38.58479299363057
+28,1.5243525003931324,38.067277070063696
+29,1.514137864112854,39.37101910828026
+30,1.5086707757536773,38.9828821656051
+31,1.4716545814161848,40.8937101910828
+32,1.456950012285998,41.16242038216561
+33,1.462908771387331,42.28702229299363
+34,1.4363894713152745,42.71496815286624
+35,1.4313981829175524,42.74482484076433
+36,1.4101839551500455,43.69028662420382
+37,1.39495690309318,44.516321656050955
+38,1.3922959801497732,44.406847133757964
+39,1.3653675811305928,44.964171974522294
+40,1.3524353230834767,46.884952229299365
+41,1.349451643646143,47.13375796178344
+42,1.3443739566074056,47.26313694267516
+43,1.3225398063659668,48.80573248407644
+44,1.3043620639545903,49.7312898089172
+45,1.3216610896359584,49.02468152866242
+46,1.306683068822144,49.69148089171974
+47,1.2766380165792575,51.383359872611464
+48,1.2700037534829158,52.03025477707006
+49,1.2608744729856016,52.45820063694268
+50,1.214590213860676,53.35390127388535
+51,1.2159663165450856,53.81170382165605
+52,1.2148886816516804,53.42356687898089
+53,1.2190928071927114,54.309315286624205
+54,1.1939984108232389,55.702627388535035
+55,1.1970675887575575,54.82683121019108
+56,1.1698591120683464,56.41918789808917
+57,1.1703004791478442,56.767515923566876
+58,1.147495664229059,57.78264331210191
+59,1.1404331258148144,57.91202229299363
+60,1.1326769514448325,58.06130573248408
+61,1.113459945104684,59.444665605095544
+62,1.1003028416329887,60.390127388535035
+63,1.086189090446302,61.0171178343949
+64,1.0749634929523346,61.484872611464965
+65,1.0733773135075904,61.94267515923567
+66,1.0524639806170373,62.7687101910828
+67,1.0403771320725703,63.16679936305732
+68,1.080077417337211,62.89808917197452
+69,1.0371882824381446,64.21178343949045
+70,1.0092752184837488,64.50039808917198
+71,0.9950040032149879,66.15246815286625
+72,0.9714164980657541,67.17754777070064
+73,0.9824362507291661,66.53065286624204
+74,0.9545215307527287,67.48606687898089
+75,0.9341163172084055,68.09315286624204
+76,0.9365487326482299,68.5609076433121
+77,0.9484692029892259,68.01353503184713
+78,0.9366516687308147,68.41162420382166
+79,0.925534982590159,68.859474522293
+80,0.9098493304981548,69.48646496815287
+81,0.9096323509884489,69.6656050955414
+82,0.8900254558605752,70.22292993630573
+83,0.8973176794446958,70.02388535031847
+84,0.8952274872998524,70.06369426751593
+85,0.882339163570647,70.72054140127389
+86,0.8788659602973112,70.7703025477707
+87,0.8615436626088088,70.91958598726114
+88,0.8805693680313742,70.59116242038216
+89,0.8858134924985801,70.64092356687898
+90,0.8459908092857167,71.93471337579618
+91,0.8496774028820596,71.54657643312102
+92,0.8335987982476593,72.11385350318471
+93,0.8297730634926231,72.12380573248407
+94,0.8417973617079911,71.95461783439491
+95,0.8393499733536107,72.01433121019109
+96,0.814481330904991,72.73089171974522
+97,0.8219596542370547,72.4124203821656
+98,0.8052468197360919,73.29816878980891
+99,0.802708297778087,73.2484076433121
+100,0.8050118775884058,72.9796974522293
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_5_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_5_Dec3.csv
new file mode 100644
index 00000000000..532926c297a
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_5_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.315430316196126,9.982085987261147
+2,2.3491704479144637,9.982085987261147
+3,2.320843576625654,12.320859872611464
+4,2.2465061640283865,15.207006369426752
+5,2.2072000306123383,14.460589171974522
+6,2.1535717545041613,14.58001592356688
+7,2.0912327637338333,15.913614649681529
+8,2.0962601915286605,15.714570063694268
+9,1.9646519452902922,20.501592356687897
+10,1.9696680216272926,21.267914012738853
+11,1.9132582025163491,22.88017515923567
+12,1.8455573047042653,27.030254777070063
+13,1.7687688192744164,29.568073248407643
+14,1.7757560060282422,30.035828025477706
+15,1.7229043738857197,31.170382165605094
+16,1.7120591447611524,30.324442675159236
+17,1.6914855909954971,32.59355095541401
+18,1.6579665788419686,31.79737261146497
+19,1.6667168990821595,32.75278662420382
+20,1.6379207228399386,34.60390127388535
+21,1.6062180783338607,34.76313694267516
+22,1.5885582820625062,35.9375
+23,1.586165087238239,36.26592356687898
+24,1.5691108035433823,37.45023885350319
+25,1.5721583123419696,35.68869426751592
+26,1.5457751811689633,39.241640127388536
+27,1.5299418580000568,38.853503184713375
+28,1.5158241159597021,39.19187898089172
+29,1.5074147031565381,40.386146496815286
+30,1.4869140181571814,40.68471337579618
+31,1.4721314140186188,41.73964968152866
+32,1.4652758859525061,41.71974522292994
+33,1.4482166372287046,42.038216560509554
+34,1.4452107658811435,42.32683121019108
+35,1.4182551636058054,43.958996815286625
+36,1.401180447286861,44.13813694267516
+37,1.399562276093064,44.97412420382165
+38,1.3759621465282075,45.919585987261144
+39,1.363953461312944,46.43710191082803
+40,1.340799425817599,48.01950636942675
+41,1.335506712555126,48.06926751592356
+42,1.3151391205514313,48.646496815286625
+43,1.299898616067923,50.348328025477706
+44,1.2943381853164382,49.86066878980892
+45,1.290559102775185,51.244028662420384
+46,1.2781554976846004,51.16441082802548
+47,1.2511360800949631,52.69705414012739
+48,1.263110172976354,52.48805732484077
+49,1.2302108441188837,53.46337579617835
+50,1.1879209348350575,54.02070063694268
+51,1.2018505486713094,54.65764331210191
+52,1.1936523193007063,54.82683121019108
+53,1.1847949301361278,56.240047770700635
+54,1.1841774529712215,55.5234872611465
+55,1.2053851667483142,56.02109872611465
+56,1.2131160379974706,55.901671974522294
+57,1.1595998102692282,56.95660828025478
+58,1.1448252835091512,57.633359872611464
+59,1.1328759679369107,58.17078025477707
+60,1.1174195761893206,59.08638535031847
+61,1.1192746207972242,58.67834394904459
+62,1.095485443142569,60.42993630573248
+63,1.0971464389448713,60.559315286624205
+64,1.0746499110179342,61.36544585987261
+65,1.0701211709885081,61.82324840764331
+66,1.055181196540784,61.94267515923567
+67,1.0408569893259911,63.11703821656051
+68,1.0358263276944495,63.4156050955414
+69,1.022902228650014,63.76393312101911
+70,1.0282645502667518,63.684315286624205
+71,1.0022752091383478,65.14729299363057
+72,1.011205192584141,64.93829617834395
+73,1.0004605852114927,64.91839171974522
+74,0.9929017887753286,65.50557324840764
+75,0.9703349174967237,66.34156050955414
+76,0.9601219125614044,66.59036624203821
+77,0.9595754917260189,66.59036624203821
+78,0.9489301579773046,67.42635350318471
+79,0.9383796943221122,67.43630573248407
+80,0.9464645530008207,67.66520700636943
+81,0.9197324651062109,68.77985668789809
+82,0.9199592433158,68.84952229299363
+83,0.911854137280944,69.46656050955414
+84,0.9102132377351165,69.61584394904459
+85,0.8969539654482702,69.54617834394904
+86,0.9114681163411231,69.52627388535032
+87,0.8840666933424154,70.45183121019109
+88,0.8776247341921375,70.45183121019109
+89,0.8939156600624133,69.87460191082802
+90,0.8799091106767107,70.1532643312102
+91,0.857206715140373,70.63097133757962
+92,0.8598429351855236,70.73049363057325
+93,0.8531708910966375,71.06886942675159
+94,0.8479141118420157,71.53662420382166
+95,0.824455082036887,72.07404458598727
+96,0.8303683616553142,71.85509554140127
+97,0.8253633660875308,72.30294585987261
+98,0.8275363991974266,72.29299363057325
+99,0.824103370973259,72.59156050955414
+100,0.8126052147263934,72.42237261146497
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_6_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_6_Dec3.csv
new file mode 100644
index 00000000000..c956a9f4f75
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_False_seed_6_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.315313503241083,9.952229299363058
+2,2.3498861759331575,9.982085987261147
+3,2.324943524257393,11.464968152866241
+4,2.299153832113667,11.176353503184714
+5,2.2249157762831184,14.251592356687897
+6,2.148574338597097,16.431130573248407
+7,2.116633986971181,16.232085987261147
+8,2.0346846428646406,17.535828025477706
+9,2.033553240405526,18.212579617834393
+10,1.9367874093875763,19.386942675159236
+11,1.9105787482231287,23.47730891719745
+12,1.8712920861639035,24.06449044585987
+13,1.8542506011428348,26.07484076433121
+14,1.7916615700266163,27.358678343949045
+15,1.759432723567744,28.592754777070063
+16,1.7595680177591408,28.960987261146496
+17,1.735943093421353,29.110270700636942
+18,1.705435866762878,30.254777070063696
+19,1.6842715034059659,30.66281847133758
+20,1.6839164062670082,30.66281847133758
+21,1.6304056340721762,33.130971337579616
+22,1.6378882705785667,32.31488853503185
+23,1.6397853262105566,32.434315286624205
+24,1.5983733819548491,33.97691082802548
+25,1.5845740251480394,35.25079617834395
+26,1.558767459954426,37.21138535031847
+27,1.550349652387534,36.72372611464968
+28,1.55528112885299,36.88296178343949
+29,1.5250810339192675,38.35589171974522
+30,1.5195578944151569,38.16679936305732
+31,1.5103132937364518,39.211783439490446
+32,1.4814334264986075,39.46058917197452
+33,1.4624858851645404,40.79418789808917
+34,1.4463320142903906,42.1078821656051
+35,1.4392171999451462,41.590366242038215
+36,1.4154980311727827,43.541003184713375
+37,1.4028685237192045,43.988853503184714
+38,1.4039325433172238,45.26273885350319
+39,1.4238619098238126,43.36186305732484
+40,1.3691594577898645,46.15843949044586
+41,1.3578160659522767,47.03423566878981
+42,1.3208598293316591,49.30334394904459
+43,1.3177019600655622,49.392914012738856
+44,1.3017765792312137,50.796178343949045
+45,1.2970956472834205,50.68670382165605
+46,1.2849505562691172,51.85111464968153
+47,1.2704812360417312,52.607484076433124
+48,1.2658768789783406,52.498009554140125
+49,1.2498207582030327,53.87141719745223
+50,1.1999798568950337,54.8765923566879
+51,1.2111261995734683,55.85191082802548
+52,1.2083594597828615,55.35429936305732
+53,1.205374797058713,55.702627388535035
+54,1.1954770741189362,56.100716560509554
+55,1.1698835465558775,58.51910828025478
+56,1.1788817412534338,57.69307324840764
+57,1.152175441669051,58.90724522292994
+58,1.1416804205839801,59.21576433121019
+59,1.13793793073885,59.88256369426752
+60,1.1175986019669064,60.698646496815286
+61,1.1049000719550308,61.18630573248408
+62,1.1018860260392451,61.26592356687898
+63,1.0881031956642297,62.21138535031847
+64,1.0749216296110944,63.02746815286624
+65,1.0624342902450805,63.913216560509554
+66,1.0506819429670928,63.913216560509554
+67,1.04999081420291,64.12221337579618
+68,1.0279906722390728,65.28662420382166
+69,1.0142494694442505,66.18232484076434
+70,1.008356811514326,66.1624203821656
+71,1.0132957970260814,66.0828025477707
+72,1.0066612837420907,66.3017515923567
+73,0.9764680372681588,67.7547770700637
+74,0.9816226894688455,67.44625796178345
+75,0.9563259816473457,67.97372611464968
+76,0.9472276321641958,68.78980891719745
+77,0.9498131677603266,68.61066878980891
+78,0.9444335911683975,68.46138535031847
+79,0.9303507922561305,69.06847133757962
+80,0.9205444713307035,69.30732484076434
+81,0.9094474687697781,69.94426751592357
+82,0.8949980986346106,70.24283439490446
+83,0.9005098821251256,70.43192675159236
+84,0.9105086448086295,69.21775477707007
+85,0.8756869913666112,71.29777070063695
+86,0.8844223705826292,70.39211783439491
+87,0.8770427514033713,71.1982484076433
+88,0.8893891504615735,70.38216560509554
+89,0.8783366414392071,71.07882165605096
+90,0.8564923242398887,71.84514331210191
+91,0.858526417024576,71.47691082802548
+92,0.862094594035179,71.66600318471338
+93,0.8422982013149626,72.12380573248407
+94,0.8450518535200957,72.34275477707007
+95,0.841877933140773,71.95461783439491
+96,0.8343808366234895,72.81050955414013
+97,0.8310173685383645,72.49203821656052
+98,0.8199173586004099,72.82046178343948
+99,0.8136242077608776,73.07921974522293
+100,0.8082184436594605,73.44745222929936
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_1_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_1_Dec3.csv
new file mode 100644
index 00000000000..ba8d1d19042
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3203083709546717,9.952229299363058
+2,2.384943433627961,9.982085987261147
+3,2.3287173471633036,11.405254777070065
+4,2.25026817078803,15.10748407643312
+5,2.196119592447949,15.06767515923567
+6,2.096928544864533,15.833996815286625
+7,2.0293817269574306,19.27746815286624
+8,1.9948512262599483,26.293789808917197
+9,1.8843709883416535,28.18471337579618
+10,1.8074416165139264,30.34434713375796
+11,1.788781068886921,30.493630573248407
+12,1.768791342237193,27.916003184713375
+13,1.7114313985132108,29.866640127388536
+14,1.6734380585372828,32.90207006369427
+15,1.6833405631363012,33.36982484076433
+16,1.7133081437675817,30.513535031847134
+17,1.61405412027031,36.21616242038217
+18,1.609245379259632,35.26074840764331
+19,1.5974712318675532,35.6687898089172
+20,1.6059236458152721,32.772691082802545
+21,1.5402898818823942,39.32125796178344
+22,1.5454396586509267,37.52985668789809
+23,1.5407592172075988,39.74920382165605
+24,1.5523313283920288,36.902866242038215
+25,1.4674403409289707,42.21735668789809
+26,1.4765250014651352,41.4609872611465
+27,1.4459249935332377,41.79936305732484
+28,1.4157475278635694,43.182722929936304
+29,1.4115679719645506,42.505971337579616
+30,1.390727729554389,44.84474522292994
+31,1.3838470035297856,45.302547770700635
+32,1.3785051525018777,45.322452229299365
+33,1.3483075267949682,46.92476114649681
+34,1.3609037141131748,46.267914012738856
+35,1.334052090432234,46.7953821656051
+36,1.3205944793239521,48.15883757961783
+37,1.3037464413673254,49.432722929936304
+38,1.27821400438904,50.4578025477707
+39,1.2969355416146053,49.9203821656051
+40,1.259517879622757,50.44785031847134
+41,1.279625462878282,49.402866242038215
+42,1.2604096903922453,50.179140127388536
+43,1.2370340827923672,51.582404458598724
+44,1.2329290285231962,53.951035031847134
+45,1.2134940100323623,54.6875
+46,1.1932604897553754,53.49323248407644
+47,1.1774974081926286,54.74721337579618
+48,1.1416699624365303,59.63375796178344
+49,1.1469076678251764,58.20063694267516
+50,1.089329202084025,59.28542993630573
+51,1.123306768715002,57.92197452229299
+52,1.127336416654526,56.628184713375795
+53,1.110751061302841,58.42953821656051
+54,1.1676020398261442,57.86226114649681
+55,1.1058319237581484,60.06170382165605
+56,1.130458468084882,58.469347133757964
+57,1.0696866212377123,61.02707006369427
+58,1.0667408811058967,62.460191082802545
+59,1.064360850176234,63.1468949044586
+60,1.0081234969151247,65.59514331210191
+61,1.0083060849244427,62.69904458598726
+62,1.0250805688511795,64.05254777070064
+63,0.9925989599744226,64.8984872611465
+64,1.0162813545791967,64.36106687898089
+65,1.0054551564204466,63.485270700636946
+66,1.01845583984047,64.23168789808918
+67,0.9677447148948718,65.20700636942675
+68,0.9522840991900985,66.82921974522293
+69,0.9523977500617884,66.93869426751593
+70,0.9640531452598086,66.6500796178344
+71,0.9194729988742026,68.33200636942675
+72,0.9054532985019076,68.95899681528662
+73,0.9083218920003077,67.9140127388535
+74,0.9257788293680568,68.45143312101911
+75,0.886779553191677,69.86464968152866
+76,0.9152344157741328,66.8093152866242
+77,0.9314210988154077,68.0732484076433
+78,0.9072837598004918,68.09315286624204
+79,0.9206869541459782,69.18789808917198
+80,0.888636299569136,69.7452229299363
+81,0.8926445477327724,70.19307324840764
+82,0.8940731518587489,68.35191082802548
+83,0.8760268354112175,70.76035031847134
+84,0.8580597153135167,69.9343152866242
+85,0.8803939299218974,70.44187898089172
+86,0.8215797108829401,72.24323248407643
+87,0.8557075334202712,71.43710191082802
+88,0.8690313233691416,70.36226114649682
+89,0.8778923495559935,70.00398089171975
+90,0.929423344932544,66.48089171974522
+91,0.8400667833674486,71.01910828025478
+92,0.8904012118934825,68.57085987261146
+93,0.8667586130701053,71.37738853503184
+94,0.7957107479784898,73.30812101910828
+95,0.783304943020936,73.52707006369427
+96,0.8434412551533644,70.99920382165605
+97,0.8524950716146238,71.62619426751593
+98,0.8032656067116245,72.73089171974522
+99,0.7939217815733259,73.21855095541402
+100,0.7824003299710097,73.98487261146497
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_2_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_2_Dec3.csv
new file mode 100644
index 00000000000..ba5507a6988
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.328766090854718,9.952229299363058
+2,2.375479292717709,9.982085987261147
+3,2.3487376832658318,11.03702229299363
+4,2.2941711495636374,13.634554140127388
+5,2.1962851673174817,13.992834394904458
+6,2.0841903177795897,17.595541401273884
+7,2.0379630456304856,25.97531847133758
+8,1.9229273826453337,26.880971337579616
+9,1.8811618173198335,29.309315286624205
+10,1.7908686513354064,30.423964968152866
+11,1.7956150663886101,28.632563694267517
+12,1.7311383440236376,29.289410828025478
+13,1.6824418799892353,32.71297770700637
+14,1.7180771804918908,32.832404458598724
+15,1.7137324961887044,30.76234076433121
+16,1.6222982300314934,35.45979299363057
+17,1.625285768964488,35.70859872611465
+18,1.6467149280438758,35.01194267515923
+19,1.6279560805885656,31.66799363057325
+20,1.5375846563630802,39.3312101910828
+21,1.5590749546221108,36.49482484076433
+22,1.5355231405063798,38.96297770700637
+23,1.5099353577680648,36.285828025477706
+24,1.4736676200939591,40.11743630573248
+25,1.4682120266993335,40.45581210191083
+26,1.4362755641815768,41.251990445859875
+27,1.4029367949552596,43.11305732484077
+28,1.39152839533083,43.11305732484077
+29,1.3864000982539668,43.929140127388536
+30,1.3620178942467756,45.5015923566879
+31,1.3567153595055743,45.20302547770701
+32,1.3516542235757136,46.23805732484077
+33,1.344573173553321,46.54657643312102
+34,1.325715300383841,45.99920382165605
+35,1.3065490988409443,48.00955414012739
+36,1.296390153040552,49.71138535031847
+37,1.250981072711337,52.76671974522293
+38,1.2423666089203707,53.125
+39,1.234350201430594,53.7718949044586
+40,1.2303493410159068,52.75676751592356
+41,1.2092165525551815,52.67714968152866
+42,1.1872403895019725,55.423964968152866
+43,1.2062602661977149,55.11544585987261
+44,1.1914843472705525,56.40923566878981
+45,1.1419024049856101,58.389729299363054
+46,1.1626573261941315,56.00119426751592
+47,1.0965431700846193,61.564490445859875
+48,1.1207816938685764,60.728503184713375
+49,1.1252170994782904,58.42953821656051
+50,1.0265214864615422,63.86345541401274
+51,1.0613301149599113,62.350716560509554
+52,1.0868661084752174,60.9375
+53,1.1268898074034672,59.15605095541401
+54,1.0483068968080411,62.878184713375795
+55,1.0868387302015996,60.70859872611465
+56,1.05031388352631,61.80334394904459
+57,1.0358185149302148,64.21178343949045
+58,1.0093098670054392,66.0828025477707
+59,1.0081159225694694,64.9482484076433
+60,0.9731597987709532,65.85390127388536
+61,1.0481393379010973,62.291003184713375
+62,0.9742026530253659,66.63017515923566
+63,1.037516624304899,64.13216560509554
+64,0.9577233126968335,67.25716560509554
+65,0.9911314332561129,66.01313694267516
+66,0.9615019764869835,67.70501592356688
+67,0.9062592592209008,69.09832802547771
+68,0.9259072181525504,68.13296178343948
+69,0.9532586909403467,67.65525477707007
+70,0.9098307820642071,69.30732484076434
+71,0.8820068972885229,70.32245222929936
+72,0.9074244187895659,68.70023885350318
+73,0.8992794801475136,69.79498407643312
+74,0.9092394489391594,69.10828025477707
+75,0.870040478979706,70.91958598726114
+76,0.9072067942588952,69.53622611464968
+77,0.8627474691457809,70.9593949044586
+78,0.8890821774294422,70.30254777070064
+79,0.8411495032583832,72.10390127388536
+80,0.8616295282248478,71.82523885350318
+81,0.8392665369115817,71.875
+82,0.8421442831397816,72.46218152866243
+83,0.8245302693099733,72.70103503184713
+84,0.8122322549865504,73.19864649681529
+85,0.8246738979011584,72.48208598726114
+86,0.8117335905694658,73.56687898089172
+87,0.8425211046531702,71.67595541401273
+88,0.8138641732133878,72.42237261146497
+89,0.850558850226129,71.32762738853503
+90,0.7852241376023383,73.57683121019109
+91,0.8336461072514771,71.99442675159236
+92,0.790436333341963,74.04458598726114
+93,0.7803474643807502,74.79100318471338
+94,0.7499612021218439,75.33837579617834
+95,0.8055823982521227,73.08917197452229
+96,0.8290568561690628,72.89012738853503
+97,0.77132226669105,74.78105095541402
+98,0.7833673270644655,73.94506369426752
+99,0.7541770086546612,75.52746815286625
+100,0.7704874723200585,74.5421974522293
diff --git a/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_3_Dec3.csv b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_3_Dec3.csv
new file mode 100644
index 00000000000..b54307a0c9b
--- /dev/null
+++ b/baselines/fednova/fednova/results/momentum_fednova_varEpoch_True_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3225013146734543,9.952229299363058
+2,2.3802450857344706,9.982085987261147
+3,2.345780094717718,10.917595541401274
+4,2.2629618538413077,11.52468152866242
+5,2.265351380512213,13.266321656050955
+6,2.0814856419897385,19.566082802547772
+7,2.0250986419665584,19.247611464968152
+8,1.9976169797265606,20.630971337579616
+9,1.9241205059039366,25.05971337579618
+10,1.9117865289092824,23.218550955414013
+11,1.8237602733502722,26.59235668789809
+12,1.7315027554323719,29.976114649681527
+13,1.7500825467383025,32.56369426751592
+14,1.7550078023011517,30.055732484076433
+15,1.6541311589016277,33.69824840764331
+16,1.6488670862404404,33.78781847133758
+17,1.621961822175676,34.8328025477707
+18,1.6610137269755079,31.160429936305732
+19,1.5766749480727371,37.62937898089172
+20,1.5757420412294425,35.171178343949045
+21,1.5546274564828082,39.19187898089172
+22,1.5674691450823643,35.1015127388535
+23,1.5081658727803808,39.271496815286625
+24,1.5121889919232412,39.629777070063696
+25,1.463021323939038,41.33160828025478
+26,1.4483181017978934,41.26194267515923
+27,1.4454606725911425,41.40127388535032
+28,1.4279407596891853,42.794585987261144
+29,1.4109146055901887,43.710191082802545
+30,1.3939261056814984,44.2078025477707
+31,1.3787023740209592,45.53144904458599
+32,1.409825422961241,44.765127388535035
+33,1.383132459251744,46.25796178343949
+34,1.3539738374151242,47.54179936305732
+35,1.3370959599306629,47.56170382165605
+36,1.30789571051385,48.8953025477707
+37,1.2931420203227146,49.69148089171974
+38,1.2609490596564712,50.318471337579616
+39,1.2788416063709624,50.38813694267516
+40,1.280462322721056,49.2734872611465
+41,1.2307913804509838,52.48805732484077
+42,1.257760219513231,52.33877388535032
+43,1.235987843601567,54.508359872611464
+44,1.2056774216093076,54.18988853503185
+45,1.1788547597113688,54.71735668789809
+46,1.1439457201653984,59.14609872611465
+47,1.17132217109583,57.10589171974522
+48,1.1663959436355882,55.46377388535032
+49,1.1282274309237292,59.28542993630573
+50,1.0514636316876502,61.982484076433124
+51,1.1383030061509198,58.39968152866242
+52,1.179720200550784,57.046178343949045
+53,1.1055978267056168,58.409633757961785
+54,1.1189524182088815,59.71337579617835
+55,1.0633237555528143,59.952229299363054
+56,1.0731252268621116,61.68391719745223
+57,1.0655491458382575,63.047372611464965
+58,,10.011942675159236
+59,,10.011942675159236
+60,,10.011942675159236
+61,,10.011942675159236
+62,,10.011942675159236
+63,,10.011942675159236
+64,,10.011942675159236
+65,,10.011942675159236
+66,,10.011942675159236
+67,,10.011942675159236
+68,,10.011942675159236
+69,,10.011942675159236
+70,,10.011942675159236
+71,,10.011942675159236
+72,,10.011942675159236
+73,,10.011942675159236
+74,,10.011942675159236
+75,,10.011942675159236
+76,,10.011942675159236
+77,,10.011942675159236
+78,,10.011942675159236
+79,,10.011942675159236
+80,,10.011942675159236
+81,,10.011942675159236
+82,,10.011942675159236
+83,,10.011942675159236
+84,,10.011942675159236
+85,,10.011942675159236
+86,,10.011942675159236
+87,,10.011942675159236
+88,,10.011942675159236
+89,,10.011942675159236
+90,,10.011942675159236
+91,,10.011942675159236
+92,,10.011942675159236
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_1_Dec3.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_1_Dec3.csv
new file mode 100644
index 00000000000..a949da08777
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3215920302518613,9.952229299363058
+2,2.346154481742033,9.952229299363058
+3,2.3099581846006356,17.11783439490446
+4,2.242325755441265,20.93949044585987
+5,2.2112043329105258,22.39251592356688
+6,2.1649435735811853,23.23845541401274
+7,2.1452860687948334,23.56687898089172
+8,2.094489190229185,24.213773885350317
+9,2.0966664841220637,24.392914012738853
+10,2.04546690670548,24.681528662420384
+11,1.9859848561560272,25.65684713375796
+12,1.9345484501237322,27.269108280254777
+13,1.8924273237301286,28.533041401273884
+14,1.9327875451677163,27.2093949044586
+15,1.9095208272812472,27.46815286624204
+16,1.8667005702948114,29.09036624203822
+17,1.8362146828584611,28.891321656050955
+18,1.8349361450049528,29.74721337579618
+19,1.8323736426177297,29.926353503184714
+20,1.839556870946459,29.946257961783438
+21,1.781604611949556,30.971337579617835
+22,1.7663871178961104,31.339570063694268
+23,1.7547900600797812,32.05613057324841
+24,1.76555569688226,31.66799363057325
+25,1.7798762291100374,32.30493630573248
+26,1.7287390672477188,33.14092356687898
+27,1.7555839977446634,33.70820063694268
+28,1.7345078682443897,34.17595541401274
+29,1.710562088686949,34.47452229299363
+30,1.699420995773024,35.0218949044586
+31,1.6843941310408768,35.24084394904459
+32,1.6874872005669175,35.88773885350319
+33,1.6785739303394487,36.455015923566876
+34,1.7223309787215701,35.419984076433124
+35,1.6816545960250173,36.21616242038217
+36,1.6811306423442378,36.763535031847134
+37,1.6626200022970794,37.80851910828026
+38,1.6321346281440394,38.13694267515923
+39,1.6228671863580206,39.01273885350319
+40,1.60664921505436,39.5203025477707
+41,1.6357488935920084,39.580015923566876
+42,1.664417393647941,38.35589171974522
+43,1.551405228626956,41.70979299363057
+44,1.5514670488940683,42.038216560509554
+45,1.5490268825725386,41.779458598726116
+46,1.5288239937679025,42.34673566878981
+47,1.5370504514426941,42.207404458598724
+48,1.5162672859847925,43.11305732484077
+49,1.5240546320654025,43.19267515923567
+50,1.4731219452657518,45.08359872611465
+51,1.459754223276855,45.06369426751592
+52,1.5059532625660015,44.83479299363057
+53,1.4962405459896015,45.352308917197455
+54,1.4813078209093422,45.80015923566879
+55,1.4516118719319628,45.99920382165605
+56,1.450480912901034,46.6062898089172
+57,1.4208773420115186,47.72093949044586
+58,1.4696585076629736,47.43232484076433
+59,1.4605950314527865,47.65127388535032
+60,1.4200018052082912,49.044585987261144
+61,1.4189093454628234,50.208996815286625
+62,1.3850960890958264,50.35828025477707
+63,1.3755859926248053,50.607085987261144
+64,1.372344723173008,50.2687101910828
+65,1.406004083384374,50.22890127388535
+66,1.3419263856426167,52.65724522292994
+67,1.338422073300477,52.53781847133758
+68,1.3205303675050188,53.29418789808917
+69,1.2841361874987365,54.71735668789809
+70,1.290089120151131,54.10031847133758
+71,1.2957106319962033,54.10031847133758
+72,1.273625040509898,54.80692675159236
+73,1.2668270605384924,55.47372611464968
+74,1.2517147808317926,56.11066878980892
+75,1.1724990735388106,58.439490445859875
+76,1.2401482117403844,57.245222929936304
+77,1.2781207242589088,55.593152866242036
+78,1.2090641856193542,57.464171974522294
+79,1.2848772463525178,54.97611464968153
+80,1.2327551617743864,56.88694267515923
+81,1.21329178020453,57.72292993630573
+82,1.188139212738936,58.767914012738856
+83,1.2266626077093137,58.578821656050955
+84,1.2043080124885412,58.31011146496815
+85,1.1785253791292762,59.90246815286624
+86,1.1630371277499352,60.2906050955414
+87,1.190483571997114,60.45979299363057
+88,1.194036246864659,59.46457006369427
+89,1.1722942135136598,61.09673566878981
+90,1.1453133445636483,60.59912420382165
+91,1.1615546076161087,61.30573248407644
+92,1.1365036949230607,61.81329617834395
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_2_Dec3.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_2_Dec3.csv
new file mode 100644
index 00000000000..930937eb432
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3267405412758992,9.952229299363058
+2,2.3385817913492772,9.952229299363058
+3,2.2876437894857613,17.595541401273884
+4,2.301358806099861,17.77468152866242
+5,2.2417350407618626,21.397292993630572
+6,2.1568360062921124,23.37778662420382
+7,2.1673045287466355,23.089171974522294
+8,2.0895303745937954,23.765923566878982
+9,2.057715981629244,24.492436305732483
+10,2.0400750735762774,25.94546178343949
+11,1.9915662555937554,25.049761146496817
+12,1.928564434598206,28.015525477707005
+13,1.913564331212621,28.84156050955414
+14,1.9055585003202888,28.373805732484076
+15,1.878437192576706,28.74203821656051
+16,1.8618563231389234,28.443471337579616
+17,1.8592306132529193,29.6875
+18,1.8284385128385703,29.150079617834393
+19,1.7948050635635473,30.642914012738853
+20,1.8211269530521077,30.871815286624205
+21,1.8047334532828847,31.25
+22,1.7686158456620138,32.00636942675159
+23,1.791095284899329,31.598328025477706
+24,1.779106963212323,32.31488853503185
+25,1.8456088547494,30.394108280254777
+26,1.7299559868065415,33.4593949044586
+27,1.7207651282571683,32.991640127388536
+28,1.734643119155981,35.001990445859875
+29,1.7387974155936272,35.62898089171974
+30,1.697035289114448,36.40525477707006
+31,1.7191259716726413,35.68869426751592
+32,1.6840472008771956,36.843152866242036
+33,1.6677197969643174,37.22133757961783
+34,1.684873464760507,36.68391719745223
+35,1.6677951266051858,37.0421974522293
+36,1.6680129515896938,36.843152866242036
+37,1.6457398332607973,38.27627388535032
+38,1.6549669382678476,38.13694267515923
+39,1.6111683860705917,39.17197452229299
+40,1.5907933863864583,39.77906050955414
+41,1.581557700588445,39.75915605095541
+42,1.6028566276951202,40.48566878980892
+43,1.565664360477666,41.948646496815286
+44,1.5686960068477946,42.207404458598724
+45,1.618548185962021,42.07802547770701
+46,1.5228161280322228,43.28224522292994
+47,1.5662430957624107,43.45143312101911
+48,1.5048108078112268,43.9390923566879
+49,1.4830890734484241,45.551353503184714
+50,1.4379025431954937,46.865047770700635
+51,1.4423120416653383,46.7953821656051
+52,1.4482575343672637,46.875
+53,1.3974094983119114,46.875
+54,1.456050969233179,48.07921974522293
+55,1.4333191115385409,47.94984076433121
+56,1.4255064581609835,48.33797770700637
+57,1.41374369335782,49.80095541401274
+58,1.3988623596300744,49.56210191082803
+59,1.3876132653777007,49.990047770700635
+60,1.379410003400912,50.19904458598726
+61,1.3459408837518874,50.68670382165605
+62,1.3692678592766925,51.154458598726116
+63,1.3261496785340037,51.552547770700635
+64,1.315115405495759,53.41361464968153
+65,1.3152428645237235,51.95063694267516
+66,1.3287808633154365,53.164808917197455
+67,1.3316103683155813,51.39331210191083
+68,1.2901694148209444,54.7671178343949
+69,1.2942092342741172,54.34912420382165
+70,1.2834066517034155,55.02587579617835
+71,1.2789932310960854,54.55812101910828
+72,1.2892538552071637,55.10549363057325
+73,1.2609719292373414,55.7921974522293
+74,1.273649446523873,56.0609076433121
+75,1.1892357047196407,58.56886942675159
+76,1.1918648432014853,58.160828025477706
+77,1.2237183049226263,57.016321656050955
+78,1.204730184594537,58.23049363057325
+79,1.216983798203195,57.39450636942675
+80,1.2628265391489504,57.494028662420384
+81,1.1903086160398593,59.14609872611465
+82,1.2173340597729774,58.36982484076433
+83,1.2190915061410066,59.195859872611464
+84,1.2078553164840504,58.5390127388535
+85,1.1983908494566655,58.9171974522293
+86,1.17186071310833,59.355095541401276
+87,1.174994294810447,59.51433121019108
+88,1.1729022374578342,59.384952229299365
+89,1.1639932845808139,60.2906050955414
+90,1.1802276615883893,60.07165605095541
+91,1.1620061655712735,60.62898089171974
+92,1.1276779243141224,61.04697452229299
+93,1.1504586559192391,60.98726114649681
+94,1.1434169905200886,61.38535031847134
+95,1.1463227139157095,61.07683121019108
+96,1.122369942391754,61.176353503184714
+97,1.1106108020824992,61.94267515923567
+98,1.1341188990386428,61.952627388535035
+99,1.1090622084915258,62.37062101910828
+100,1.106491222503079,62.5
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_3_Dec3.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_3_Dec3.csv
new file mode 100644
index 00000000000..07ac22197ee
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3302922658859546,9.952229299363058
+2,2.357336262988437,10.111464968152866
+3,2.3250329190758383,16.98845541401274
+4,2.279875163060085,17.894108280254777
+5,2.2197504362482934,22.611464968152866
+6,2.2299284524978344,22.452229299363058
+7,2.151672484768424,23.347929936305732
+8,2.1276805469184925,23.49721337579618
+9,2.065973486110663,24.631767515923567
+10,2.052775156725744,25.59713375796178
+11,2.009746896233528,26.721735668789808
+12,1.9883707617498507,27.01035031847134
+13,1.9531764012233468,27.796576433121018
+14,1.9071630178743106,29.2296974522293
+15,1.876746218675261,29.777070063694268
+16,1.8737761047995014,30.1453025477707
+17,1.846451552810183,30.483678343949045
+18,1.8322057610104798,30.851910828025478
+19,1.7922369484688825,31.090764331210192
+20,1.8224596157195463,30.04578025477707
+21,1.784379183107121,31.76751592356688
+22,1.7658010258036814,32.235270700636946
+23,1.8049863964129405,31.76751592356688
+24,1.7568811413588796,32.76273885350319
+25,1.7673401020135089,32.87221337579618
+26,1.7579622769811352,33.29020700636943
+27,1.7580280941762743,33.34992038216561
+28,1.7140811590632057,33.94705414012739
+29,1.7284819236986197,33.89729299363057
+30,1.700789044617088,34.15605095541401
+31,1.7099623513069881,34.43471337579618
+32,1.717351643902481,34.66361464968153
+33,1.6786175229746825,35.45979299363057
+34,1.695272623353703,34.57404458598726
+35,1.661523063471363,36.0171178343949
+36,1.6674412929328384,35.63893312101911
+37,1.6743384090958127,36.116640127388536
+38,1.6675573777241313,36.80334394904459
+39,1.6787500070158843,36.49482484076433
+40,1.6177796930264516,36.79339171974522
+41,1.6542351329402558,38.21656050955414
+42,1.6106772977075758,38.39570063694268
+43,1.6580979565905918,38.61464968152866
+44,1.6332269739952816,39.998009554140125
+45,1.5936557054519653,40.39609872611465
+46,1.591683250323982,41.580414012738856
+47,1.5719889280902353,41.57046178343949
+48,1.5471103320455855,42.535828025477706
+49,1.5621040695032495,42.05812101910828
+50,1.520982987561803,44.2078025477707
+51,1.4957173174353922,43.96894904458599
+52,1.4990265604796682,45.00398089171974
+53,1.5111556645411595,45.64092356687898
+54,1.4874515920687632,45.0437898089172
+55,1.4900690696801349,46.02906050955414
+56,1.5157668377943099,46.59633757961783
+57,1.468987718509261,46.62619426751592
+58,1.479781169800242,48.29816878980892
+59,1.460758952578162,47.12380573248408
+60,1.4410910849358625,47.223328025477706
+61,1.4226612581568918,48.48726114649681
+62,1.4432850612956247,48.63654458598726
+63,1.3650160412879506,48.228503184713375
+64,1.3994311018354575,49.15406050955414
+65,1.3955133561116115,50.069665605095544
+66,1.3748416695625159,50.16918789808917
+67,1.4088256480587515,50.61703821656051
+68,1.3724694753148754,51.582404458598724
+69,1.3445962610518096,50.94546178343949
+70,1.3706591641826995,52.41839171974522
+71,1.333726993032322,52.42834394904459
+72,1.3502553598895954,52.61743630573248
+73,1.3159747696985864,53.37380573248408
+74,1.3027941614958891,54.02070063694268
+75,1.2333634283132613,55.92157643312102
+76,1.2661075337677246,55.37420382165605
+77,1.297987933371477,54.81687898089172
+78,1.251036716874238,55.264729299363054
+79,1.2628659693298825,55.21496815286624
+80,1.2736652166980087,55.513535031847134
+81,1.2519430351105465,56.4390923566879
+82,1.2493545804054114,56.64808917197452
+83,1.2409714384443442,56.22014331210191
+84,1.2405882109502318,57.19546178343949
+85,1.212063352013849,58.06130573248408
+86,1.2441290187987553,56.78742038216561
+87,1.2231275526581296,57.494028662420384
+88,1.2066541686179533,58.07125796178344
+89,1.2417195773428413,57.90207006369427
+90,1.2056097908384482,58.52906050955414
+91,1.195898252307989,59.1859076433121
+92,1.1796605051702755,59.355095541401276
+93,1.2191244511847283,57.25517515923567
+94,1.156902652257567,60.2906050955414
+95,1.1701958308554,59.62380573248408
+96,1.1665378019308588,59.48447452229299
+97,1.1839087783910667,59.77308917197452
+98,1.1945306704302503,60.330414012738856
+99,1.1298365050060735,61.69386942675159
+100,1.1383399238252336,61.80334394904459
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_4_Dec3.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_4_Dec3.csv
new file mode 100644
index 00000000000..ee67335eb05
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_4_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3328692214504168,9.952229299363058
+2,2.367754199702269,9.952229299363058
+3,2.2964605389127306,17.943869426751593
+4,2.2407016010041447,17.77468152866242
+5,2.2069462590916142,18.80971337579618
+6,2.1827150226398637,22.760748407643312
+7,2.1434828733942313,23.626592356687897
+8,2.116417385210657,23.66640127388535
+9,2.0717333805788853,24.044585987261147
+10,2.0767094876356187,23.79578025477707
+11,2.0042466540245494,25.61703821656051
+12,1.9590954772985665,25.218949044585987
+13,1.9485050895411498,26.731687898089174
+14,1.915171536670369,26.124601910828027
+15,1.8810050092684996,29.050557324840764
+16,1.875895839587898,29.14012738853503
+17,1.8433430908591883,29.71735668789809
+18,1.8682987500148214,28.891321656050955
+19,1.8296442859491724,29.896496815286625
+20,1.7757360578342607,31.508757961783438
+21,1.8083985140369196,30.851910828025478
+22,1.8107435521046826,31.240047770700638
+23,1.7882406081363653,31.69785031847134
+24,1.782029034985099,31.76751592356688
+25,1.7707191219755039,31.80732484076433
+26,1.775363470338712,31.96656050955414
+27,1.7380671053175714,33.28025477707006
+28,1.742827357759901,33.17078025477707
+29,1.7604871312524104,33.130971337579616
+30,1.7394022022842601,33.33996815286624
+31,1.7162584484003152,34.305334394904456
+32,1.7169969226144681,34.375
+33,1.7572434798927064,34.8328025477707
+34,1.7028037628550439,35.81807324840764
+35,1.6806965345030378,36.44506369426752
+36,1.6975954178791897,36.30573248407644
+37,1.6955065218506344,36.21616242038217
+38,1.6482313324691384,37.460191082802545
+39,1.6548482111305187,38.495222929936304
+40,1.601717275419053,39.9781050955414
+41,1.6177124863217591,39.76910828025478
+42,1.6307126040671283,40.37619426751592
+43,1.6321950771246747,41.04299363057325
+44,1.6130662328878027,40.634952229299365
+45,1.6278909330914735,40.22691082802548
+46,1.5842759867382656,41.95859872611465
+47,1.585131854768012,41.74960191082803
+48,1.546220761955164,43.431528662420384
+49,1.528466993076786,44.16799363057325
+50,1.5077106178186501,44.62579617834395
+51,1.5354767005155041,44.19785031847134
+52,1.5241068199182013,44.81488853503185
+53,1.4862645036855322,46.84514331210191
+54,1.4480255933324242,47.03423566878981
+55,1.4321729962233525,46.6859076433121
+56,1.511262536808184,46.526671974522294
+57,1.609878883999624,44.67555732484077
+58,1.4150763993050641,48.477308917197455
+59,1.4342831760455088,48.228503184713375
+60,1.3913499792669988,48.79578025477707
+61,1.4367091352013266,48.93511146496815
+62,1.4192430069492121,49.51234076433121
+63,1.3973994482854368,50.43789808917197
+64,1.3838285686104161,51.015127388535035
+65,1.3651482314820502,50.905652866242036
+66,1.3374107263650103,52.2093949044586
+67,1.343931522339013,52.30891719745223
+68,1.3480694028222637,52.139729299363054
+69,1.3413610169841985,53.18471337579618
+70,1.345202691995414,52.4781050955414
+71,1.2902828041155627,54.24960191082803
+72,1.2794281976997472,54.93630573248408
+73,1.3533533006716685,53.51313694267516
+74,1.286735608319568,54.57802547770701
+75,1.2047087470437312,56.80732484076433
+76,1.2519132244359157,55.96138535031847
+77,1.2320692565790408,56.011146496815286
+78,1.254867082948138,55.71257961783439
+79,1.239938816447167,56.658041401273884
+80,1.2183769702152083,56.797372611464965
+81,1.2491980525338726,56.49880573248408
+82,1.2110482389759865,56.78742038216561
+83,1.220780346423957,58.10111464968153
+84,1.2080724827802864,58.190684713375795
+85,1.178122381495822,58.6484872611465
+86,1.1707646501292088,58.66839171974522
+87,1.233177563187423,58.021496815286625
+88,1.1859481270146217,58.94705414012739
+89,1.199979055079685,59.195859872611464
+90,1.129965059696489,60.001990445859875
+91,1.1650012287364644,60.23089171974522
+92,1.1224715462915458,60.977308917197455
+93,1.1577852136769873,60.42993630573248
+94,1.1430905730861007,61.04697452229299
+95,1.1415821465717,61.96257961783439
+96,1.1522894220747006,61.44506369426752
+97,1.1252991583696597,62.39052547770701
+98,1.1179095328233803,61.504777070063696
+99,1.1381052497086253,61.594347133757964
+100,1.0869520906430141,62.65923566878981
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_5_Dec3.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_5_Dec3.csv
new file mode 100644
index 00000000000..81021dc08ad
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_5_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3283424058537574,9.952229299363058
+2,2.333559302008076,10.957404458598726
+3,2.295833923254803,17.326831210191084
+4,2.263617471524864,18.600716560509554
+5,2.2306880525722623,20.92953821656051
+6,2.195079202105285,23.39769108280255
+7,2.1769336127931145,23.40764331210191
+8,2.1221889857273952,24.15406050955414
+9,2.080391132148208,23.845541401273884
+10,2.0489104841924775,24.691480891719745
+11,2.0251566050158942,25.149283439490446
+12,1.963638419558288,26.214171974522294
+13,1.9298963888435607,27.428343949044585
+14,1.9185452415684985,28.18471337579618
+15,1.8860732111961218,29.249601910828027
+16,1.8662497997283936,29.398885350318473
+17,1.8591545531704168,29.946257961783438
+18,1.8274272460087089,30.523487261146496
+19,1.8126647328115573,30.642914012738853
+20,1.7990547722312296,31.37937898089172
+21,1.7982724624074948,31.538614649681527
+22,1.798766475574226,31.79737261146497
+23,1.7725476550448471,32.294984076433124
+24,1.7364780591551665,33.25039808917197
+25,1.7829630367315499,33.06130573248408
+26,1.7247494671754777,33.95700636942675
+27,1.7751219082789815,33.638535031847134
+28,1.7521380155709139,33.359872611464965
+29,1.7025946629275182,34.942277070063696
+30,1.7088490481589251,35.25079617834395
+31,1.7250755205275907,35.13136942675159
+32,1.6905792093580696,36.07683121019108
+33,1.7002015903497198,36.99243630573248
+34,1.692167227435264,36.81329617834395
+35,1.6820267636305208,37.38057324840764
+36,1.653964877128601,37.9578025477707
+37,1.624871666264382,39.28144904458599
+38,1.6101930004775904,39.56011146496815
+39,1.651132602600535,38.96297770700637
+40,1.586364333796653,40.585191082802545
+41,1.6020739663178754,40.8937101910828
+42,1.5741806759196482,41.09275477707006
+43,1.5759590924925106,41.57046178343949
+44,1.5384944290112539,42.63535031847134
+45,1.5435815601591851,43.25238853503185
+46,1.5380534510703603,43.63057324840764
+47,1.5087023358436147,44.267515923566876
+48,1.5211139234008304,44.53622611464968
+49,1.4585053617027914,46.02906050955414
+50,1.4378184907755274,46.556528662420384
+51,1.4600889204414027,46.06886942675159
+52,1.4442956242591711,46.835191082802545
+53,1.5037466849491095,45.382165605095544
+54,1.4735850255200817,45.909633757961785
+55,1.433618001117828,47.58160828025478
+56,1.41196334513889,48.258359872611464
+57,1.4392296333981167,47.9796974522293
+58,1.404103590424653,49.22372611464968
+59,1.3797085011840626,49.94028662420382
+60,1.3759027506895125,50.408041401273884
+61,1.3888171212688374,50.13933121019108
+62,1.3717428385072452,50.656847133757964
+63,1.3543531385956296,51.13455414012739
+64,1.3377813488055186,53.32404458598726
+65,1.32260426973841,53.26433121019108
+66,1.2904853482914578,53.71218152866242
+67,1.3264367755051631,53.17476114649681
+68,1.2651510026044905,54.18988853503185
+69,1.2962711411676588,54.448646496815286
+70,1.260423456028009,55.27468152866242
+71,1.2738830785083164,55.05573248407644
+72,1.2934447283957415,55.11544585987261
+73,1.2728360170012067,55.97133757961783
+74,1.22354161055984,55.623009554140125
+75,1.1614322100475336,58.23049363057325
+76,1.2732808582342354,55.91162420382165
+77,1.1924478544551096,58.49920382165605
+78,1.2307554980751816,57.94187898089172
+79,1.2073078140331681,58.021496815286625
+80,1.2323880298122478,56.88694267515923
+81,1.2397261485931979,58.2703025477707
+82,1.2169280477390167,58.07125796178344
+83,1.1980812830530154,58.44944267515923
+84,1.2103800572407473,59.1859076433121
+85,1.2075591098730731,58.87738853503185
+86,1.2010946129537692,59.07643312101911
+87,1.1987670853639105,59.12619426751592
+88,1.1989368018071362,59.952229299363054
+89,1.1764751915719098,60.24084394904459
+90,1.1502090730484884,61.13654458598726
+91,1.1637840840467222,60.77826433121019
+92,1.155628701683822,60.9375
+93,1.1507833364662852,60.64888535031847
+94,1.153540097604132,61.086783439490446
+95,1.1448335328679176,61.52468152866242
+96,1.1596593051958994,61.902866242038215
+97,1.1189773997683434,61.91281847133758
+98,1.1133944688329271,62.539808917197455
+99,1.1255927438948565,62.261146496815286
+100,1.0941752449722046,62.7687101910828
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_6_Dec3.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_6_Dec3.csv
new file mode 100644
index 00000000000..3bf4dc7cac0
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_False_seed_6_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.327636287470532,9.952229299363058
+2,2.364818197906397,9.952229299363058
+3,2.32712066097624,17.933917197452228
+4,2.2661456180985566,22.143710191082803
+5,2.2284714370776135,22.312898089171973
+6,2.212028469249701,22.94984076433121
+7,2.178291457473852,23.01950636942675
+8,2.2047472584779095,23.089171974522294
+9,2.097225162633665,23.8953025477707
+10,2.058984781526456,24.58200636942675
+11,1.998987776458643,25.726512738853504
+12,1.954589113308366,27.856289808917197
+13,1.957644304652123,27.76671974522293
+14,1.927705253005787,28.443471337579616
+15,1.9076997383384948,28.68232484076433
+16,1.9167382079324904,28.363853503184714
+17,1.893199887245324,28.214570063694268
+18,1.8565098449682733,30.125398089171973
+19,1.848761665593287,29.866640127388536
+20,1.8677020513328018,29.538216560509554
+21,1.8379456571712616,30.254777070063696
+22,1.8350407682406675,30.6031050955414
+23,1.8407859247960863,30.812101910828027
+24,1.7981948214731398,32.14570063694268
+25,1.7775313246781659,32.38455414012739
+26,1.779415399405607,33.0812101910828
+27,1.93995925271587,29.61783439490446
+28,1.7380753216470124,33.49920382165605
+29,1.7433929215570925,34.40485668789809
+30,1.757401877907431,34.554140127388536
+31,1.7333953562815478,35.0218949044586
+32,1.7302122169239507,35.4796974522293
+33,1.6979842360611934,35.35031847133758
+34,1.7149451181387445,36.176353503184714
+35,1.6739165304572718,36.94267515923567
+36,1.6579501142927036,37.519904458598724
+37,1.6877874940823598,36.44506369426752
+38,1.6797725068535774,37.519904458598724
+39,1.683905072272963,37.71894904458599
+40,1.6497865307862591,38.83359872611465
+41,1.6811227889577294,38.684315286624205
+42,1.612454287565438,40.077627388535035
+43,1.6304087790713948,39.888535031847134
+44,1.6255612274643723,39.86863057324841
+45,1.5867104150687055,40.4359076433121
+46,1.576039869314546,40.973328025477706
+47,1.5664024482107466,41.52070063694268
+48,1.525076123559551,42.63535031847134
+49,1.562596593692804,42.74482484076433
+50,1.5082700981456003,44.21775477707006
+51,1.5137985716959474,44.59593949044586
+52,1.5102066591287115,43.99880573248408
+53,1.5023545953118878,45.19307324840764
+54,1.5251295915834464,44.715366242038215
+55,1.4831445194353723,45.352308917197455
+56,1.490599869163173,45.60111464968153
+57,1.4503670422134884,47.03423566878981
+58,1.4580768354379448,47.00437898089172
+59,1.4314022481821145,48.10907643312102
+60,1.3990224744104276,48.92515923566879
+61,1.3697738609496195,49.25358280254777
+62,1.393522759911361,49.591958598726116
+63,1.384185772033254,49.78105095541401
+64,1.4048389948097764,49.61186305732484
+65,1.4080251614758923,49.18391719745223
+66,1.392766041360843,49.203821656050955
+67,1.3763961457902458,51.00517515923567
+68,1.3683356798378525,51.30374203821656
+69,1.3112034288940915,52.34872611464968
+70,1.3612441803999007,52.07006369426752
+71,1.3699135639864928,51.65207006369427
+72,1.3214652523113664,53.32404458598726
+73,1.321005694046142,53.692277070063696
+74,1.3249006506743704,52.83638535031847
+75,1.226820104820713,55.27468152866242
+76,1.2715821311732007,54.99601910828026
+77,1.2405417876638425,55.57324840764331
+78,1.2481957848664302,55.56329617834395
+79,1.24748499264383,55.205015923566876
+80,1.2523571362920627,55.12539808917197
+81,1.2365107369271053,55.623009554140125
+82,1.2374448301685843,56.68789808917197
+83,1.2243904084157033,56.628184713375795
+84,1.309462397721163,55.76234076433121
+85,1.1883137165361148,57.792595541401276
+86,1.197614303060398,57.86226114649681
+87,1.1736928558653328,58.4593949044586
+88,1.1893404968984567,57.98168789808917
+89,1.2313943471118902,57.772691082802545
+90,1.180393242152633,59.12619426751592
+91,1.157891477369199,59.6437101910828
+92,1.1553229439030788,59.70342356687898
+93,1.2787712812423706,58.20063694267516
+94,1.1497077657158967,60.64888535031847
+95,1.1776422892406488,59.91242038216561
+96,1.139680191969416,60.44984076433121
+97,1.155124515105205,60.927547770700635
+98,1.1201047324071265,61.763535031847134
+99,1.1515277472271281,60.53941082802548
+100,1.1292107557035556,61.75358280254777
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_1_Dec3.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_1_Dec3.csv
new file mode 100644
index 00000000000..00a7208d28b
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3156141915898414,9.952229299363058
+2,2.3293647295350484,12.440286624203821
+3,2.2591875358751623,17.456210191082803
+4,2.2236461760891473,21.93471337579618
+5,2.1927865090643524,23.726114649681527
+6,2.1557277851043994,24.03463375796178
+7,2.0544038950258,24.701433121019107
+8,2.0351595202828667,25.746417197452228
+9,2.0068356406157184,25.776273885350317
+10,1.9656023105997948,27.547770700636942
+11,1.9304892318263935,28.383757961783438
+12,1.8874619371572119,29.607882165605094
+13,1.8706737323931069,30.24482484076433
+14,1.8648078213831423,30.433917197452228
+15,1.7972170501757578,31.100716560509554
+16,1.8680383650360592,30.772292993630572
+17,1.8428913089120464,30.10549363057325
+18,1.8214261569794576,31.67794585987261
+19,1.807660029192639,32.92197452229299
+20,1.8150965544828184,32.31488853503185
+21,1.8037185388006223,33.11106687898089
+22,1.7557610387255431,33.748009554140125
+23,1.765975157926037,34.753184713375795
+24,1.7543150801567515,34.76313694267516
+25,1.730486559260423,35.56926751592356
+26,1.728965875449454,35.87778662420382
+27,1.7269384800248844,36.24601910828026
+28,1.716360442957301,36.49482484076433
+29,1.7213326973520267,36.47492038216561
+30,1.7574100296968107,36.32563694267516
+31,1.704921611555063,37.44028662420382
+32,1.6521598692912205,38.69426751592356
+33,1.6377607295467596,39.37101910828026
+34,1.6535563195586964,40.40605095541401
+35,1.637840040170463,41.07285031847134
+36,1.6110917952409975,41.84912420382165
+37,1.5897698888353482,43.47133757961783
+38,1.620562312709298,42.08797770700637
+39,1.5671447371221652,44.705414012738856
+40,1.580641629589591,44.05851910828026
+41,1.5616761719345287,44.705414012738856
+42,1.5402087459139004,44.69546178343949
+43,1.5256064765772241,46.4171974522293
+44,1.4977671963394068,47.20342356687898
+45,1.4965409260646554,45.969347133757964
+46,1.4962049965645856,47.392515923566876
+47,1.4517587180350238,48.755971337579616
+48,1.5113301823852927,47.72093949044586
+49,1.421377443963555,50.547372611464965
+50,1.4076763702805635,51.244028662420384
+51,1.4682138057271386,49.80095541401274
+52,1.453693554659558,50.02985668789809
+53,1.4309830126489045,51.02507961783439
+54,1.4410430033495472,51.5625
+55,1.4004662978421352,52.11982484076433
+56,1.3538578088116493,51.87101910828026
+57,1.3419761467891134,53.23447452229299
+58,1.412059300264735,52.14968152866242
+59,1.3697842177312085,53.71218152866242
+60,1.3753962904025034,53.23447452229299
+61,1.3737046187091027,54.697452229299365
+62,1.3507050663042979,54.26950636942675
+63,1.3148464226418999,55.095541401273884
+64,1.3326569169190279,55.08558917197452
+65,1.3045840760704819,55.07563694267516
+66,1.3590862401731454,53.61265923566879
+67,1.3098578179717824,56.29976114649681
+68,1.3044928000990752,57.016321656050955
+69,1.308589356720068,56.4390923566879
+70,1.2693776135232038,57.00636942675159
+71,1.2660629350668307,57.84235668789809
+72,1.2322093225588464,57.8921178343949
+73,1.2520207223618867,57.72292993630573
+74,1.2613301983304843,57.58359872611465
+75,1.1723312872230627,60.18113057324841
+76,1.2063097972778758,59.23566878980892
+77,1.1840109855506071,59.4546178343949
+78,1.2094467631570853,58.160828025477706
+79,1.2303469511354046,59.60390127388535
+80,1.2033720206303202,59.81289808917197
+81,1.207105509035147,60.19108280254777
+82,1.1771374291675105,60.12141719745223
+83,1.1559810342302748,60.8578821656051
+84,1.1997546052477162,60.40007961783439
+85,1.1618049444666334,61.43511146496815
+86,1.1814268599649904,61.37539808917197
+87,1.15866923825756,61.64410828025478
+88,1.196973984788178,61.09673566878981
+89,1.1269365309909651,61.72372611464968
+90,1.1401704022079517,62.261146496815286
+91,1.1393203909989376,62.33081210191083
+92,1.1389091542571972,63.11703821656051
+93,1.128884658312342,63.2265127388535
+94,1.1101120102937054,63.77388535031847
+95,1.1348475946742258,63.455414012738856
+96,1.103103424333463,64.05254777070064
+97,1.1122846265507351,64.07245222929936
+98,1.0974959453959374,64.54020700636943
+99,1.1087951629784456,63.97292993630573
+100,1.0859435128558212,64.23168789808918
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_2_Dec3.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_2_Dec3.csv
new file mode 100644
index 00000000000..6aa707c3c53
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3210225439375374,9.952229299363058
+2,2.323304483085681,13.843550955414013
+3,2.262440140839595,18.670382165605094
+4,2.2384842945511934,23.288216560509554
+5,2.191287803801761,23.347929936305732
+6,2.158498235568879,22.830414012738853
+7,2.0985087824475235,24.47253184713376
+8,2.034276341177096,25.52746815286624
+9,2.002281454718037,25.816082802547772
+10,1.9730363757746994,27.348726114649683
+11,1.9424718648764738,27.69705414012739
+12,1.880394786026827,28.363853503184714
+13,1.882696148696219,29.6875
+14,1.8550264501267937,29.518312101910826
+15,1.8713544971623999,29.398885350318473
+16,1.8253604143288484,30.76234076433121
+17,1.8178755181610204,30.871815286624205
+18,1.8459070708341658,30.871815286624205
+19,1.7988980530173915,31.031050955414013
+20,1.793873133932709,31.787420382165607
+21,1.73418552404756,32.92197452229299
+22,1.7634873655950947,32.573646496815286
+23,1.8106013673126318,30.971337579617835
+24,1.7623595659899864,34.2953821656051
+25,1.7196235846561991,35.59912420382165
+26,1.762105838508363,35.4796974522293
+27,1.7331674334349905,35.25079617834395
+28,1.6930001564086623,37.0421974522293
+29,1.6457682885941427,38.17675159235669
+30,1.6773863355065608,37.94785031847134
+31,1.6938335417182582,37.649283439490446
+32,1.658447991510865,38.92316878980892
+33,1.6299813940266894,40.25676751592356
+34,1.6343702928275818,40.48566878980892
+35,1.6151828515301845,41.50079617834395
+36,1.53928310324432,42.923964968152866
+37,1.5589854603360414,42.32683121019108
+38,1.5914424012421042,42.57563694267516
+39,1.5295882057991756,44.098328025477706
+40,1.4939545461326649,45.82006369426752
+41,1.5148242552568958,45.54140127388535
+42,1.475285797362115,48.27826433121019
+43,1.540716876649553,46.944665605095544
+44,1.5232068110423482,45.74044585987261
+45,1.4409861397591366,48.52707006369427
+46,1.4491314888000488,48.66640127388535
+47,1.4671887637703283,48.586783439490446
+48,1.4540169831294163,49.88057324840764
+49,1.4658351946788228,49.761146496815286
+50,1.3977868670870544,52.05015923566879
+51,1.3921455509343725,52.44824840764331
+52,1.393821284269831,51.522691082802545
+53,1.4139145476043604,51.73168789808917
+54,1.3775475951516705,52.06011146496815
+55,1.3824379702282559,52.517914012738856
+56,1.3421245995600513,53.22452229299363
+57,1.3647238653936204,53.125
+58,1.328790615318687,53.46337579617835
+59,1.3223805951464707,54.05055732484077
+60,1.4251703525045116,50.53742038216561
+61,1.346616385089364,53.9609872611465
+62,1.3234845612459123,54.71735668789809
+63,1.3138619517065158,54.79697452229299
+64,1.318636572285063,55.264729299363054
+65,1.2825289566046114,55.83200636942675
+66,1.2908123002690115,55.69267515923567
+67,1.293733223608345,55.92157643312102
+68,1.2870041636904335,56.658041401273884
+69,1.2993445126873673,56.847133757961785
+70,1.2930583202155532,56.40923566878981
+71,1.2559680046549269,58.09116242038217
+72,1.2177606923564983,57.47412420382165
+73,1.264080666812362,58.52906050955414
+74,1.2587685493906593,58.62858280254777
+75,1.1716782731615054,60.390127388535035
+76,1.2553075085020369,59.43471337579618
+77,1.1850268920515752,59.99203821656051
+78,1.209665151538363,59.2953821656051
+79,1.188598635470032,59.8328025477707
+80,1.1915617334614894,60.60907643312102
+81,1.1694776195629386,61.60429936305732
+82,1.159850474375828,60.977308917197455
+83,1.170068675165723,61.007165605095544
+84,1.1950423485913855,61.04697452229299
+85,1.1404962137246588,61.455015923566876
+86,1.129483407849719,62.00238853503185
+87,1.2087191248395641,61.52468152866242
+88,1.1386271001427037,62.30095541401274
+89,1.1673985286882729,62.430334394904456
+90,1.1372290348551075,62.60947452229299
+91,1.1232153856830231,63.017515923566876
+92,1.1298360262706781,63.55493630573248
+93,1.1220363272223504,63.35589171974522
+94,1.1449630131387407,63.017515923566876
+95,1.1246524460756095,63.36584394904459
+96,1.1315832563266632,63.6046974522293
+97,1.0763023142602033,64.39092356687898
+98,1.1229249246560844,63.90326433121019
+99,1.0857180926450498,63.853503184713375
+100,1.08576950070205,64.37101910828025
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_4_Dec3_mu_0.001.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_4_Dec3_mu_0.001.csv
new file mode 100644
index 00000000000..17d9a4808fe
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_4_Dec3_mu_0.001.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.333659553224114,9.952229299363058
+2,2.370748688460915,9.952229299363058
+3,2.2845019458965132,18.23248407643312
+4,2.2609067980650885,21.884952229299362
+5,2.2258789448221776,22.3328025477707
+6,2.1802704038134046,23.546974522292995
+7,2.1296681469413126,24.562101910828027
+8,2.052227009633544,25.169187898089174
+9,1.9806951679241884,26.59235668789809
+10,1.999165795411274,25.885748407643312
+11,1.9874311252764076,26.861066878980893
+12,2.0569002172749515,23.029458598726116
+13,1.9140503049656084,28.861464968152866
+14,1.883727460909801,29.846735668789808
+15,1.8342193524548962,30.483678343949045
+16,1.8493002751830276,29.75716560509554
+17,1.8485199661011908,30.453821656050955
+18,1.8280614250025171,31.011146496815286
+19,1.8358380331355295,31.22014331210191
+20,1.887121970486489,29.448646496815286
+21,1.8192606086184264,32.046178343949045
+22,1.8400364521962063,31.648089171974522
+23,1.799463644908492,32.5437898089172
+24,1.7862441851075288,33.69824840764331
+25,1.7511519353101208,33.777866242038215
+26,1.7561904822185541,33.7281050955414
+27,1.7456810246607302,35.15127388535032
+28,1.7341704414149,34.07643312101911
+29,1.7538617712676905,34.62380573248408
+30,1.6540830401098652,38.05732484076433
+31,1.7135450953890563,37.10191082802548
+32,1.6724545211549018,39.022691082802545
+33,1.7347506201191314,37.25119426751592
+34,1.6637475558906605,40.027866242038215
+35,1.6744959999801248,39.87858280254777
+36,1.6150586460806002,41.281847133757964
+37,1.6216194758749312,41.81926751592356
+38,1.5860952776708421,43.22253184713376
+39,1.5908466175103644,43.13296178343949
+40,1.6093143839745006,44.317277070063696
+41,1.6779468105097486,42.35668789808917
+42,1.5862773664438041,43.929140127388536
+43,1.61748742905392,43.83957006369427
+44,1.501727070018744,45.97929936305732
+45,1.555072579414222,45.65087579617835
+46,1.585103149626665,46.6062898089172
+47,1.506126008975278,47.40246815286624
+48,1.5096527429143334,48.26831210191083
+49,1.5111903893719814,48.74601910828026
+50,1.4342075199078603,50.39808917197452
+51,1.4093611779486297,50.38813694267516
+52,1.4228182871630237,49.64171974522293
+53,1.4130863558714557,51.353503184713375
+54,1.4412856732204462,50.61703821656051
+55,1.4263644932181971,51.015127388535035
+56,1.42080505866154,51.06488853503185
+57,1.4015910739351989,51.14450636942675
+58,1.4330064551845478,52.14968152866242
+59,1.3866672834772973,53.21457006369427
+60,1.3684864241606112,53.29418789808917
+61,1.3407969444420687,53.82165605095541
+62,1.3500643945803308,53.94108280254777
+63,1.3436607604573487,53.29418789808917
+64,1.402879360375131,54.02070063694268
+65,1.3451019054765154,53.363853503184714
+66,1.3304055253411555,55.13535031847134
+67,1.304317454243921,54.56807324840764
+68,1.311379105801795,55.27468152866242
+69,1.3378974810527389,56.53861464968153
+70,1.3166584456042878,56.34952229299363
+71,1.3179566537498668,56.100716560509554
+72,1.3244999696494668,56.5187101910828
+73,1.271249343255523,57.45421974522293
+74,1.2328511127241097,58.11106687898089
+75,1.1673335148270723,58.87738853503185
+76,1.2005661642475494,57.87221337579618
+77,1.2381861798322884,58.130971337579616
+78,1.2304221027216333,58.65843949044586
+79,1.1849329744934276,57.832404458598724
+80,1.2343442090757333,58.439490445859875
+81,,10.011942675159236
+82,,10.011942675159236
+83,,10.011942675159236
+84,,10.011942675159236
+85,,10.011942675159236
+86,,10.011942675159236
+87,,10.011942675159236
+88,,10.011942675159236
+89,,10.011942675159236
+90,,10.011942675159236
+91,,10.011942675159236
+92,,10.011942675159236
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_5_Dec3_mu_0.001.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_5_Dec3_mu_0.001.csv
new file mode 100644
index 00000000000..5f7544190bf
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_5_Dec3_mu_0.001.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3170855470523715,9.952229299363058
+2,2.33058017833977,14.102308917197453
+3,2.2821624339765805,19.506369426751593
+4,2.2674132304586423,22.50199044585987
+5,2.2447051895651846,23.576831210191084
+6,2.172436003472395,24.45262738853503
+7,2.155295987038096,24.06449044585987
+8,2.0459523770459898,25.398089171974522
+9,2.0140918819767655,25.52746815286624
+10,1.9759795194978167,27.17953821656051
+11,1.92767088048777,28.18471337579618
+12,1.9162809514695671,28.881369426751593
+13,1.8867615985262924,29.48845541401274
+14,1.8725664099310613,29.58797770700637
+15,1.8280315049894296,30.513535031847134
+16,1.8204995302637672,31.37937898089172
+17,1.7952264539755074,32.03622611464968
+18,1.819389383504345,31.96656050955414
+19,1.8111963051899223,32.0859872611465
+20,1.8187942292280257,32.34474522292994
+21,1.7601770489079178,32.38455414012739
+22,1.7526249217379624,34.26552547770701
+23,1.7524516908985794,34.66361464968153
+24,1.7459573214221153,35.27070063694268
+25,1.6974166517804383,34.524283439490446
+26,1.7341931534420914,36.514729299363054
+27,1.8007917631963255,35.280652866242036
+28,1.7030954808945868,37.82842356687898
+29,1.7764669436558036,36.79339171974522
+30,1.657323609491822,40.15724522292994
+31,1.6335731289189332,40.99323248407644
+32,1.6559408242535438,41.66003184713376
+33,1.6165164564825167,42.40644904458599
+34,1.6164067808989506,42.47611464968153
+35,1.5875147839260708,43.958996815286625
+36,1.59417659006301,43.65047770700637
+37,1.5445029515369681,44.63574840764331
+38,1.5440613206025142,44.82484076433121
+39,1.540687553442208,45.48168789808917
+40,1.5055328470886133,46.56648089171974
+41,1.511408224986617,45.78025477707006
+42,1.5993357221032405,45.551353503184714
+43,1.4700645998025397,48.31807324840764
+44,1.461734825638449,48.20859872611465
+45,1.4969317055052254,48.69625796178344
+46,1.475074731620254,48.785828025477706
+47,1.5341342027020302,45.491640127388536
+48,1.3736099657739045,51.87101910828026
+49,1.40734284774513,49.432722929936304
+50,1.3724346130516878,51.69187898089172
+51,1.4140640474428796,50.04976114649681
+52,1.4603455863940489,49.36305732484077
+53,1.4236815780591054,50.25875796178344
+54,1.406348775906168,51.12460191082803
+55,1.3733201736857177,52.328821656050955
+56,1.3810400332614874,52.8562898089172
+57,1.3673194301356175,52.746815286624205
+58,1.3643333262698665,54.00079617834395
+59,1.3725325279175096,53.37380573248408
+60,1.3338661026802792,55.21496815286624
+61,1.3539330207618179,54.51831210191083
+62,1.3369687161627848,53.7718949044586
+63,1.3422748712217731,55.254777070063696
+64,1.3323277041410944,54.82683121019108
+65,1.2898811382852542,55.95143312101911
+66,1.2894572725721225,56.041003184713375
+67,1.3165194999640155,54.836783439490446
+68,1.300773804734467,56.34952229299363
+69,1.254385388580857,57.59355095541401
+70,1.2394263843062576,58.389729299363054
+71,1.245614308460503,58.608678343949045
+72,1.1886877592202205,58.98686305732484
+73,1.210095673609691,59.166003184713375
+74,1.205132637433945,60.26074840764331
+75,1.1302268053316007,61.5843949044586
+76,1.190367994414773,60.42993630573248
+77,1.210781628159201,60.13136942675159
+78,1.187818715147152,60.70859872611465
+79,1.2079266841244545,59.554140127388536
+80,1.2043758273883989,59.57404458598726
+81,1.184029860481335,60.96735668789809
+82,1.1700892269991006,60.82802547770701
+83,1.1783330710070907,61.29578025477707
+84,1.141323189826528,61.42515923566879
+85,1.182790460859894,60.788216560509554
+86,1.1517680811274582,61.69386942675159
+87,1.1543099071569503,62.350716560509554
+88,1.1500711334738762,62.40047770700637
+89,1.1113469832262415,62.59952229299363
+90,1.092725049917865,62.78861464968153
+91,1.1068163635624442,62.02229299363057
+92,1.1149000893732546,63.35589171974522
+93,1.1133522626700674,63.38574840764331
+94,1.1063350966781567,63.485270700636946
+95,1.095681524200804,64.01273885350318
+96,1.092797608132575,63.67436305732484
+97,1.0870688481695334,64.79896496815287
+98,1.074628931701563,64.58996815286625
+99,1.088046675275086,64.30135350318471
+100,1.0590674675953615,64.80891719745223
diff --git a/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_6_Dec3_mu_0.001.csv b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_6_Dec3_mu_0.001.csv
new file mode 100644
index 00000000000..c5b6e85b1d1
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fedavg_varEpoch_True_seed_6_Dec3_mu_0.001.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.331115423494084,9.952229299363058
+2,2.3505028402729398,9.952229299363058
+3,2.2919358007467476,22.014331210191084
+4,2.252286973272919,23.01950636942675
+5,2.2199908419019856,23.46735668789809
+6,2.2014541064098383,22.661226114649683
+7,2.1087787789144334,24.193869426751593
+8,2.084451065701284,24.253582802547772
+9,2.030561300599651,25.746417197452228
+10,1.9830953900221806,25.96536624203822
+11,1.9536369894720187,26.98049363057325
+12,1.9387904937100258,28.68232484076433
+13,1.912421114125829,29.0406050955414
+14,1.8462629310644356,30.493630573248407
+15,1.8810044777621129,29.707404458598727
+16,1.882471007905948,30.07563694267516
+17,1.826166436930371,31.070859872611464
+18,1.8749325366536522,30.871815286624205
+19,1.8414755087749215,32.17555732484077
+20,1.8616887163964047,32.27507961783439
+21,1.8483485492171756,32.90207006369427
+22,1.7964221975605958,34.46457006369427
+23,1.8089217296831168,34.57404458598726
+24,1.7843104623685218,33.36982484076433
+25,1.7980395183441744,35.310509554140125
+26,1.7870755985284308,35.04179936305732
+27,1.773404719723258,35.77826433121019
+28,1.6796710316542607,36.504777070063696
+29,1.7165087689260008,36.82324840764331
+30,1.6729379619003102,37.649283439490446
+31,1.7121883296662834,37.181528662420384
+32,1.6635014046529295,38.9828821656051
+33,1.7314974031630594,38.73407643312102
+34,1.6334729171862268,40.3562898089172
+35,1.6612571857537433,39.81886942675159
+36,1.621406814854616,41.451035031847134
+37,,10.011942675159236
+38,,10.011942675159236
+39,,10.011942675159236
+40,,10.011942675159236
+41,,10.011942675159236
+42,,10.011942675159236
+43,,10.011942675159236
+44,,10.011942675159236
+45,,10.011942675159236
+46,,10.011942675159236
+47,,10.011942675159236
+48,,10.011942675159236
+49,,10.011942675159236
+50,,10.011942675159236
+51,,10.011942675159236
+52,,10.011942675159236
+53,,10.011942675159236
+54,,10.011942675159236
+55,,10.011942675159236
+56,,10.011942675159236
+57,,10.011942675159236
+58,,10.011942675159236
+59,,10.011942675159236
+60,,10.011942675159236
+61,,10.011942675159236
+62,,10.011942675159236
+63,,10.011942675159236
+64,,10.011942675159236
+65,,10.011942675159236
+66,,10.011942675159236
+67,,10.011942675159236
+68,,10.011942675159236
+69,,10.011942675159236
+70,,10.011942675159236
+71,,10.011942675159236
+72,,10.011942675159236
+73,,10.011942675159236
+74,,10.011942675159236
+75,,10.011942675159236
+76,,10.011942675159236
+77,,10.011942675159236
+78,,10.011942675159236
+79,,10.011942675159236
+80,,10.011942675159236
+81,,10.011942675159236
+82,,10.011942675159236
+83,,10.011942675159236
+84,,10.011942675159236
+85,,10.011942675159236
+86,,10.011942675159236
+87,,10.011942675159236
+88,,10.011942675159236
+89,,10.011942675159236
+90,,10.011942675159236
+91,,10.011942675159236
+92,,10.011942675159236
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_1_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_1_Dec3.csv
new file mode 100644
index 00000000000..b7695e99323
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.317513590405701,10.011942675159236
+2,2.3227585500972285,16.620222929936304
+3,2.278825556396679,17.31687898089172
+4,2.2049900862821348,17.28702229299363
+5,2.1641019848501606,17.595541401273884
+6,2.12035723021076,17.74482484076433
+7,2.0921084933979497,17.923964968152866
+8,2.055248326556698,17.8343949044586
+9,2.0181264877319336,19.357085987261147
+10,1.9881900176880465,22.07404458598726
+11,1.956928676101053,21.855095541401273
+12,1.917935112479386,25.179140127388536
+13,1.9078728689509592,25.607085987261147
+14,1.8417129091396454,28.5828025477707
+15,1.8275016485505802,28.333996815286625
+16,1.833141134043408,28.105095541401273
+17,1.7917638819688444,29.189888535031848
+18,1.773127031174435,29.428742038216562
+19,1.7599657880272834,29.597929936305732
+20,1.7509957605106816,29.88654458598726
+21,1.7125494085299742,30.573248407643312
+22,1.7152185386912837,31.070859872611464
+23,1.7039620443514198,31.170382165605094
+24,1.6854081799270242,32.32484076433121
+25,1.677834677848087,32.45421974522293
+26,1.6655113681866105,32.41441082802548
+27,1.6848400504725753,32.8921178343949
+28,1.645363698339766,33.47929936305732
+29,1.6290871535137201,34.1859076433121
+30,1.6028773298688754,34.613853503184714
+31,1.6138788400941593,35.05175159235669
+32,1.6260188954650976,34.613853503184714
+33,1.5675741274645374,36.36544585987261
+34,1.5461316146668356,36.922770700636946
+35,1.5665764406228522,36.873009554140125
+36,1.5462818039450676,37.78861464968153
+37,1.5406768010680083,37.848328025477706
+38,1.5429124824560372,37.85828025477707
+39,1.5168198757110887,39.35111464968153
+40,1.515647283025608,39.95820063694268
+41,1.4807694968144605,40.973328025477706
+42,1.4756955166531216,41.41122611464968
+43,1.4610729240308142,41.560509554140125
+44,1.4495326690613084,42.46616242038217
+45,1.4646001591044626,42.02826433121019
+46,1.4423964114705468,43.11305732484077
+47,1.445245732167724,43.36186305732484
+48,1.4352921930847653,44.128184713375795
+49,1.4071293211286995,45.25278662420382
+50,1.335633987074445,48.37778662420382
+51,1.3564949779753472,46.82523885350319
+52,1.39510031034992,45.75039808917197
+53,1.368980968074434,47.23328025477707
+54,1.3781029646563683,47.15366242038217
+55,1.3729616699704699,47.80055732484077
+56,1.3489895990699718,48.447452229299365
+57,1.3685547356392926,47.68113057324841
+58,1.3301681940722618,49.75119426751592
+59,1.2986377090405508,50.9156050955414
+60,1.280193641686895,51.82125796178344
+61,1.2907490904923458,51.244028662420384
+62,1.2764518936728215,52.41839171974522
+63,1.2433513129592701,53.672372611464965
+64,1.2162286411425112,55.17515923566879
+65,1.2227498945916535,54.836783439490446
+66,1.2302325724796126,54.55812101910828
+67,1.1996513096390256,55.77229299363057
+68,1.1800583096066857,56.96656050955414
+69,1.1812749220307466,56.91679936305732
+70,1.1639962830361288,57.34474522292994
+71,1.185037746930578,56.30971337579618
+72,1.1614531673443544,58.11106687898089
+73,1.1340249746468416,59.06648089171974
+74,1.1347766446459824,58.67834394904459
+75,1.082742911235542,60.98726114649681
+76,1.1114917245640117,60.001990445859875
+77,1.110927372221734,60.171178343949045
+78,1.1017470374988143,60.09156050955414
+79,1.0758313623962887,62.27109872611465
+80,1.0638814617873757,62.40047770700637
+81,1.0572041261727643,62.480095541401276
+82,1.0614426337229979,62.569665605095544
+83,1.0410922336730228,64.04259554140127
+84,1.0421791422139308,63.90326433121019
+85,1.0514179657978617,63.61464968152866
+86,1.0380067643086621,63.84355095541401
+87,1.0376996694097094,63.2265127388535
+88,1.0258884232514982,64.51035031847134
+89,1.0235747303932337,64.40087579617834
+90,1.0069570996958739,65.48566878980891
+91,0.9859500447655939,66.14251592356688
+92,1.0323409214141264,64.15207006369427
+93,0.9749441401214357,66.64012738853503
+94,0.9594258855862222,66.9984076433121
+95,0.9779615144061434,66.56050955414013
+96,0.9652621153813259,66.83917197452229
+97,0.9474562858320346,67.49601910828025
+98,0.9233331847342716,68.72014331210191
+99,0.9408684183078208,67.71496815286625
+100,0.9410608585473079,67.80453821656052
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_2_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_2_Dec3.csv
new file mode 100644
index 00000000000..4e0940547c9
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.317281559014776,9.952229299363058
+2,2.3284126634051088,14.818869426751592
+3,2.2938161306320484,17.54578025477707
+4,2.2273687329261924,17.38654458598726
+5,2.164983667385806,17.585589171974522
+6,2.121609875351001,17.864251592356688
+7,2.0930649900132683,18.053343949044585
+8,2.0579800939863655,18.30214968152866
+9,2.0171253013003403,19.227707006369428
+10,1.9854549830126915,20.90963375796178
+11,1.9419559004959788,24.363057324840764
+12,1.9060968191001066,25.567277070063696
+13,1.8767734887493643,27.547770700636942
+14,1.844515098887644,28.214570063694268
+15,1.8515851133188623,26.940684713375795
+16,1.8188266860451667,27.916003184713375
+17,1.8023194978191595,29.946257961783438
+18,1.7993444128400962,29.279458598726116
+19,1.7757967285289886,29.64769108280255
+20,1.7440998288476544,30.752388535031848
+21,1.7348028671969273,30.523487261146496
+22,1.730203231428839,31.12062101910828
+23,1.708460484340692,31.399283439490446
+24,1.6805128124868793,31.926751592356688
+25,1.691623891994452,31.77746815286624
+26,1.6802044825948728,32.3546974522293
+27,1.7033767631858776,31.588375796178344
+28,1.6456254735873763,33.4593949044586
+29,1.654826972894608,33.11106687898089
+30,1.6082125902175903,34.723328025477706
+31,1.610076768383099,34.693471337579616
+32,1.5974302443729085,35.141321656050955
+33,1.597859656734831,35.15127388535032
+34,1.56708100950642,36.24601910828026
+35,1.5498854673592148,36.99243630573248
+36,1.559695000861101,37.13176751592356
+37,1.5400847735678314,37.83837579617835
+38,1.5050054651916407,38.455414012738856
+39,1.5290148637856646,38.37579617834395
+40,1.5292110891099189,38.89331210191083
+41,1.5143968223766158,39.440684713375795
+42,1.4850042716712708,40.40605095541401
+43,1.455088720200168,41.37141719745223
+44,1.4432589848330066,41.9984076433121
+45,1.449444992527081,41.620222929936304
+46,1.457580987814885,41.33160828025478
+47,1.4384789102396387,41.9984076433121
+48,1.4365939000609573,42.505971337579616
+49,1.4239432492833228,43.0234872611465
+50,1.3708980637750807,44.82484076433121
+51,1.4138488093758845,43.431528662420384
+52,1.3807122282161834,44.59593949044586
+53,1.3898156106851662,44.8546974522293
+54,1.3696621048981976,45.36226114649681
+55,1.3662693454961108,45.62101910828026
+56,1.378568785965063,45.64092356687898
+57,1.3505222174772031,46.725716560509554
+58,1.3320081408616085,48.059315286624205
+59,1.3289900562565797,48.397691082802545
+60,1.3200437923905197,48.66640127388535
+61,1.2952547240409122,49.05453821656051
+62,1.2839778369399393,49.83081210191083
+63,1.281483649827872,50.1890923566879
+64,1.268922805026838,50.05971337579618
+65,1.265844342055594,51.12460191082803
+66,1.261987210838658,51.552547770700635
+67,1.258567152509264,51.85111464968153
+68,1.2304436108868593,53.115047770700635
+69,1.2619890054320073,52.3984872611465
+70,1.2277923571835658,53.23447452229299
+71,1.2164468829798851,53.951035031847134
+72,1.2302090396547014,53.443471337579616
+73,1.202986911983247,54.9562101910828
+74,1.2245690051917058,54.38893312101911
+75,1.1632794062043452,56.628184713375795
+76,1.1753962632197483,56.38933121019108
+77,1.185923150010929,55.77229299363057
+78,,10.011942675159236
+79,,10.011942675159236
+80,,10.011942675159236
+81,,10.011942675159236
+82,,10.011942675159236
+83,,10.011942675159236
+84,,10.011942675159236
+85,,10.011942675159236
+86,,10.011942675159236
+87,,10.011942675159236
+88,,10.011942675159236
+89,,10.011942675159236
+90,,10.011942675159236
+91,,10.011942675159236
+92,,10.011942675159236
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_3_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_3_Dec3.csv
new file mode 100644
index 00000000000..0d9b5db5589
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.319056872349636,11.246019108280255
+2,2.3450232979598318,13.01751592356688
+3,2.332870402913185,15.764331210191083
+4,2.2539441297008733,17.665207006369428
+5,2.200398282640299,17.77468152866242
+6,2.1396267649474416,18.073248407643312
+7,2.1033118887312092,18.19267515923567
+8,2.080652495858016,18.212579617834393
+9,2.035931199219576,18.39171974522293
+10,2.0057433767683186,19.446656050955415
+11,1.9664358956039332,20.44187898089172
+12,1.9305748461158412,24.751194267515924
+13,1.8944166230547959,26.871019108280255
+14,1.8831628257301962,26.63216560509554
+15,1.8995706594673691,25.835987261146496
+16,1.8274966075921515,29.110270700636942
+17,1.824737582237098,29.219745222929937
+18,1.8015564004327083,29.309315286624205
+19,1.7621012265515175,30.155254777070063
+20,1.7331014271754368,30.53343949044586
+21,1.744538200888664,30.812101910828027
+22,1.705459985763404,31.28980891719745
+23,1.7073833084410164,31.170382165605094
+24,1.693425268124623,31.648089171974522
+25,1.6734162121062066,32.25517515923567
+26,1.655963968319498,32.961783439490446
+27,1.6687628850815401,32.822452229299365
+28,1.6791109803375925,32.32484076433121
+29,1.668835074278959,32.90207006369427
+30,1.6058211675874747,33.70820063694268
+31,1.6160292769693265,34.00676751592356
+32,1.618814370434755,34.6437101910828
+33,1.6082783352797199,34.524283439490446
+34,1.6103419194555586,34.51433121019108
+35,1.583064482470227,35.48964968152866
+36,1.5380315499700559,36.13654458598726
+37,1.5480228032276129,36.36544585987261
+38,1.5476305461992883,36.902866242038215
+39,1.5380399485302578,37.66918789808917
+40,1.524647308003371,37.63933121019108
+41,1.52955558345576,37.82842356687898
+42,1.4916533406373043,38.92316878980892
+43,1.4933992145927089,39.211783439490446
+44,1.5067899766241668,39.28144904458599
+45,1.4639890968419944,39.69944267515923
+46,1.4480176442747663,40.833996815286625
+47,1.455558425301959,40.50557324840764
+48,1.438302493399116,41.620222929936304
+49,1.4153193334105667,42.794585987261144
+50,1.3606608392326696,45.42197452229299
+51,1.4026683151342307,43.32205414012739
+52,1.4255448169768996,41.98845541401274
+53,1.3819424597321042,44.45660828025478
+54,1.394709873351322,44.25756369426752
+55,1.4109474299060312,44.068471337579616
+56,1.4247245765795373,43.55095541401274
+57,1.3783686791255976,45.17316878980892
+58,1.3449178641768778,47.01433121019108
+59,1.3380767775189346,47.531847133757964
+60,1.3255827791371924,48.119028662420384
+61,1.3545889406447198,47.1437101910828
+62,1.3123258416819725,48.86544585987261
+63,1.295397851117857,49.91042993630573
+64,1.2963938006929532,50.1890923566879
+65,1.2778365976491552,51.51273885350319
+66,1.2802819886784644,51.09474522292994
+67,1.2649931577360554,52.07006369426752
+68,1.263152537831835,52.080015923566876
+69,1.232448216076869,53.28423566878981
+70,1.2357620445026714,53.29418789808917
+71,1.2136113966346547,54.54816878980892
+72,1.1978436723636214,55.44386942675159
+73,1.2097799094619266,54.896496815286625
+74,1.174727884827146,56.35947452229299
+75,1.1220155616474758,59.00676751592356
+76,1.1235416899820803,59.42476114649681
+77,1.203846106483678,56.568471337579616
+78,1.2242563708572631,54.896496815286625
+79,1.149773919278649,58.359872611464965
+80,1.1602110783005977,58.0015923566879
+81,1.1344886657538686,59.2953821656051
+82,1.1091344880450302,60.80812101910828
+83,1.091761458451581,61.3953025477707
+84,1.1112640344413223,60.141321656050955
+85,1.097751692981477,60.63893312101911
+86,1.0829582916703193,62.07205414012739
+87,1.0843992320595273,61.8531050955414
+88,1.0567907877029128,63.156847133757964
+89,1.0636675991829794,62.91799363057325
+90,1.0615562439724138,62.96775477707006
+91,1.0617064465383055,62.679140127388536
+92,1.0210659128085824,64.98805732484077
+93,0.9985898467385845,65.50557324840764
+94,1.036714878431551,64.5203025477707
+95,1.0314311377561776,64.2515923566879
+96,1.002359115773705,65.68471337579618
+97,0.9997875865098018,65.49562101910828
+98,0.9984552093372223,65.90366242038216
+99,0.9835702704775865,66.42117834394904
+100,0.9705449316152341,66.77945859872611
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_4_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_4_Dec3.csv
new file mode 100644
index 00000000000..6bf88bcba57
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_4_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3261087912662775,10.021894904458598
+2,2.3515593033687323,9.982085987261147
+3,2.306851751485448,17.625398089171973
+4,2.2276214323226053,17.22730891719745
+5,2.1677527412487443,17.685111464968152
+6,2.11821678261848,17.963773885350317
+7,2.086785866196748,18.113057324840764
+8,2.04875708917144,18.36186305732484
+9,2.0177180319075374,20.35230891719745
+10,1.9794360627034666,22.054140127388536
+11,1.9407894262083016,25.985270700636942
+12,1.9113791588765041,27.786624203821656
+13,1.8935848087262197,27.259156050955415
+14,1.861398677917043,27.866242038216562
+15,1.8416226472064947,28.393710191082803
+16,1.8525195395111278,28.473328025477706
+17,1.815178857487478,29.010748407643312
+18,1.7936502520445805,29.120222929936304
+19,1.7809631232243435,29.81687898089172
+20,1.7600809434416946,30.354299363057326
+21,1.7804151287504062,28.562898089171973
+22,1.736003083028611,30.941480891719745
+23,1.726373005065189,31.160429936305732
+24,1.7049142866377618,31.30971337579618
+25,1.707506920881332,31.498805732484076
+26,1.688632340947534,31.66799363057325
+27,1.701200013707398,32.10589171974522
+28,1.6775113571980955,32.61345541401274
+29,1.6464275569672797,33.20063694267516
+30,1.6360152428317223,33.379777070063696
+31,1.6159283932606885,33.92714968152866
+32,1.6009774769947027,34.68351910828026
+33,1.590011355223929,35.111464968152866
+34,1.5945264085842545,35.7484076433121
+35,1.5921509987229754,35.43988853503185
+36,1.602451107304567,35.56926751592356
+37,1.5591301022061876,36.40525477707006
+38,1.5645373869853414,36.594347133757964
+39,1.5387873869792672,36.63415605095541
+40,1.5299097876639882,37.66918789808917
+41,1.5353789253599326,37.908041401273884
+42,1.5334826138368838,38.36584394904459
+43,1.5231132135269747,39.022691082802545
+44,1.4905688185600718,39.90843949044586
+45,1.5009083353030455,39.072452229299365
+46,1.4748817925240583,39.9781050955414
+47,1.4575583031223078,40.833996815286625
+48,1.469700433646038,40.84394904458599
+49,1.4714923702227842,40.92356687898089
+50,1.3962305267904973,43.730095541401276
+51,1.4092413187026978,42.9140127388535
+52,1.4493352812566576,41.96855095541401
+53,1.4039085890836775,43.093152866242036
+54,1.4356648739735791,43.172770700636946
+55,1.3978015397005021,44.08837579617835
+56,1.4005005754482973,44.934315286624205
+57,1.3695147925881064,44.83479299363057
+58,1.3826029072901247,45.20302547770701
+59,1.3602667393957733,46.09872611464968
+60,1.3736782362506648,45.79020700636943
+61,1.3400383284137507,47.113853503184714
+62,1.3141414314318614,48.30812101910828
+63,1.3182108865422049,48.258359872611464
+64,1.2991736045308933,49.31329617834395
+65,1.3056614831754356,49.46257961783439
+66,1.264577162493566,51.970541401273884
+67,1.2696671026527502,50.77627388535032
+68,1.265191097927701,51.34355095541401
+69,1.2752400048219474,51.81130573248408
+70,1.256062604059839,52.11982484076433
+71,1.2629442514887281,52.03025477707006
+72,1.221168233330842,54.07046178343949
+73,1.1908897233616775,55.43391719745223
+74,1.2135376524014079,54.24960191082803
+75,1.1442363429221378,57.45421974522293
+76,1.154370461679568,57.32484076433121
+77,1.1654253503319565,57.046178343949045
+78,1.1536167176665775,58.06130573248408
+79,1.1364724822105117,58.66839171974522
+80,1.131674334881412,58.86743630573248
+81,1.1140134642078618,60.19108280254777
+82,1.1041763796927824,60.70859872611465
+83,1.1056978129277564,60.201035031847134
+84,1.122638278326411,59.82285031847134
+85,1.1101808669460806,60.1015127388535
+86,1.0609511137008667,62.59952229299363
+87,1.065805388104384,61.97253184713376
+88,1.0389694150086421,63.6046974522293
+89,1.0550565905631728,62.36066878980892
+90,1.0341463639478015,63.66441082802548
+91,1.026776074224217,63.853503184713375
+92,1.0025297794372412,64.92834394904459
+93,1.0062623464377822,65.29657643312102
+94,1.008328069167532,64.92834394904459
+95,1.0160031144026738,64.41082802547771
+96,0.9930159107894655,65.34633757961784
+97,0.9876916700867331,65.40605095541402
+98,0.9821115751175364,65.96337579617834
+99,0.9566354299806485,66.7296974522293
+100,0.9719549288415605,66.55055732484077
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_5_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_5_Dec3.csv
new file mode 100644
index 00000000000..e6834973c77
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_5_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3200641179540353,9.952229299363058
+2,2.3326137430348974,14.759156050955413
+3,2.2943672480856536,17.54578025477707
+4,2.2189645752026017,17.486066878980893
+5,2.1824596596371597,17.74482484076433
+6,2.1257265555630824,18.212579617834393
+7,2.0978480676177202,18.312101910828027
+8,2.0629749852380934,18.282245222929937
+9,2.029276000466316,19.675557324840764
+10,1.996370539543735,21.307722929936304
+11,1.940650716708724,25.12937898089172
+12,1.9198999875670026,25.816082802547772
+13,1.875836424766832,27.826433121019107
+14,1.86781438596689,28.005573248407643
+15,1.828660272488928,28.562898089171973
+16,1.8056289390393883,29.16003184713376
+17,1.807242114832447,29.418789808917197
+18,1.7711778059127226,30.354299363057326
+19,1.7861171520439683,29.398885350318473
+20,1.7486517201563356,30.13535031847134
+21,1.728117706669364,31.12062101910828
+22,1.7183431986790554,31.399283439490446
+23,1.700866291477422,31.757563694267517
+24,1.7088133210589171,31.827229299363058
+25,1.6609564351428086,32.3546974522293
+26,1.6626551280355757,32.076035031847134
+27,1.645089166938879,32.91202229299363
+28,1.6677715854280313,32.48407643312102
+29,1.6330569693996648,33.26035031847134
+30,1.6149157809603745,33.777866242038215
+31,1.6288357418813524,34.48447452229299
+32,1.6007611075783992,34.942277070063696
+33,1.6150031408686547,34.76313694267516
+34,1.605435286357904,35.2109872611465
+35,1.5767694035912776,35.82802547770701
+36,1.5800612398013947,35.98726114649681
+37,1.54439993800631,37.58957006369427
+38,1.5474813257812694,37.55971337579618
+39,1.522053401940947,38.80374203821656
+40,1.5040113553879366,39.639729299363054
+41,1.5458406050493763,39.45063694267516
+42,1.5123681353915268,39.7093949044586
+43,1.4823242820751894,41.142515923566876
+44,1.4837903376597508,40.92356687898089
+45,1.4541151068013185,42.565684713375795
+46,1.4503898810429179,42.49601910828026
+47,1.4403325061129917,43.63057324840764
+48,1.4413731082989152,43.50119426751592
+49,1.410769252260779,44.61584394904459
+50,1.3515059124132631,47.15366242038217
+51,1.4238019384396303,44.55613057324841
+52,1.3822369461606263,46.40724522292994
+53,1.393196594183612,46.17834394904459
+54,1.4052813994656703,45.59116242038217
+55,1.3663913406384218,47.21337579617835
+56,1.3483250665057236,48.56687898089172
+57,1.3485631092338806,48.477308917197455
+58,1.3185010165165945,49.78105095541401
+59,1.3053698980124893,50.35828025477707
+60,1.306766574549827,50.318471337579616
+61,1.267537006147348,52.34872611464968
+62,1.3066887369581088,50.80613057324841
+63,1.264975130558014,52.11982484076433
+64,1.2504711963568524,53.15485668789809
+65,1.2236004733735588,54.91640127388535
+66,1.2444400662069868,53.97093949044586
+67,1.221459321535317,55.07563694267516
+68,1.237726544498638,54.73726114649681
+69,1.207326017367612,55.86186305732484
+70,1.1740631518090607,57.27507961783439
+71,1.186907345322287,56.92675159235669
+72,1.1604488025045698,57.76273885350319
+73,1.1476669311523438,58.39968152866242
+74,1.1477265897070525,58.33996815286624
+75,1.08883371854284,60.98726114649681
+76,1.0854287546151762,60.698646496815286
+77,1.0851742473377544,61.26592356687898
+78,1.0862012729523287,61.36544585987261
+79,1.1148166667883563,60.22093949044586
+80,1.0971778228784064,60.70859872611465
+81,1.0647296415772407,62.72890127388535
+82,1.0911882041366237,61.71377388535032
+83,1.062179809542978,62.55971337579618
+84,1.049756531882438,63.38574840764331
+85,1.0215218663215637,64.23168789808918
+86,1.0301199035280069,63.92316878980892
+87,1.0168022737381563,64.46058917197452
+88,1.03384304616102,63.72412420382165
+89,1.035285537030287,63.90326433121019
+90,1.0127799176866081,64.93829617834395
+91,1.0360536062793366,64.32125796178345
+92,0.9873046495352581,65.74442675159236
+93,0.9841956082423022,65.76433121019109
+94,0.9719877189891354,66.53065286624204
+95,0.9937677204988564,66.20222929936305
+96,0.9614188940661728,66.75955414012739
+97,0.9459627004945355,67.63535031847134
+98,0.9486434725439472,68.05334394904459
+99,0.9450264983116441,68.04339171974522
+100,0.971749046805558,66.86902866242038
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_6_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_6_Dec3.csv
new file mode 100644
index 00000000000..a3dc2c945af
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_False_seed_6_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3244144521701107,10.280652866242038
+2,2.3498430692466203,9.982085987261147
+3,2.3063128374184774,17.41640127388535
+4,2.2267012945405997,17.70501592356688
+5,2.1701724263513165,17.824442675159236
+6,2.1284478523169352,17.923964968152866
+7,2.096423910681609,18.09315286624204
+8,2.0614887111505884,17.983678343949045
+9,2.0257558405019673,18.740047770700638
+10,2.0004703755591327,20.332404458598727
+11,1.9728527312066144,21.83519108280255
+12,1.9409266277483315,23.40764331210191
+13,1.914400919987138,24.522292993630572
+14,1.8741953980391193,26.49283439490446
+15,1.8478120155395217,28.801751592356688
+16,1.8404861339338265,28.045382165605094
+17,1.8294284047594496,28.134952229299362
+18,1.8158291175866583,28.68232484076433
+19,1.8095412580830277,29.13017515923567
+20,1.7896723671323935,28.78184713375796
+21,1.754868684300951,29.91640127388535
+22,1.7471009341015178,30.1453025477707
+23,1.7440882587129143,30.324442675159236
+24,1.7258319391566477,29.498407643312103
+25,1.7233991486251734,31.359474522292995
+26,1.6928940639374361,32.245222929936304
+27,1.6902253696113636,32.6234076433121
+28,1.6719991819114441,33.03144904458599
+29,1.6529228702472274,34.31528662420382
+30,1.645463650393638,34.195859872611464
+31,1.6549031590200534,33.6484872611465
+32,1.6179012629636533,35.12141719745223
+33,1.6142644669599593,35.728503184713375
+34,1.6083544712917062,36.02707006369427
+35,1.6022424022103572,36.176353503184714
+36,1.5749145776602873,37.181528662420384
+37,1.5619384285750662,37.19148089171974
+38,1.5577723509187151,37.75875796178344
+39,1.56338301889456,38.017515923566876
+40,1.5354505147144293,38.52507961783439
+41,1.5360791538931002,38.81369426751592
+42,1.5188480645987639,39.59992038216561
+43,1.4798053988985196,39.40087579617835
+44,1.5043452416255976,39.57006369426752
+45,1.4824665260922378,40.99323248407644
+46,1.4888395944218726,41.12261146496815
+47,1.4597126169569175,41.47093949044586
+48,1.4266225441246276,42.13773885350319
+49,1.4244519456936295,42.38654458598726
+50,1.380249192760249,44.347133757961785
+51,1.4127755643455846,43.32205414012739
+52,1.4140273977996438,43.202627388535035
+53,1.4250790480595485,43.55095541401274
+54,1.404286598703664,43.80971337579618
+55,1.373754137640546,45.03383757961783
+56,1.4121311789105653,44.88455414012739
+57,1.3897745943373176,45.34235668789809
+58,1.3533651373188966,45.99920382165605
+59,1.3564991685235577,46.28781847133758
+60,1.3236843210876368,47.611464968152866
+61,1.3387993870267443,47.26313694267516
+62,1.306410319865889,48.755971337579616
+63,1.30612536296723,48.97492038216561
+64,1.2903116865522544,49.681528662420384
+65,1.2690733014398319,50.97531847133758
+66,1.263463890096944,50.85589171974522
+67,1.2570370709060863,51.33359872611465
+68,1.2452409073805353,52.109872611464965
+69,1.2319821920364527,53.22452229299363
+70,1.2422483449528932,52.6671974522293
+71,1.2279121951692422,53.333996815286625
+72,1.2315509960909559,52.81648089171974
+73,1.204415466755059,54.727308917197455
+74,1.1980196343865364,54.647691082802545
+75,1.1385009926595506,57.265127388535035
+76,1.1807830774100723,56.210191082802545
+77,1.1790174739375996,55.56329617834395
+78,1.1699670203931771,56.4390923566879
+79,1.1735942181508252,55.91162420382165
+80,1.1642429509739967,56.797372611464965
+81,1.14777501373534,58.31011146496815
+82,1.1193977632340353,59.1859076433121
+83,1.1476432601357722,57.92197452229299
+84,1.1180423581676118,59.34514331210191
+85,1.0810916723719068,60.88773885350319
+86,1.0883370444273492,60.53941082802548
+87,1.0913354302667508,61.086783439490446
+88,1.0861935740823199,60.619028662420384
+89,1.0624557650013335,62.16162420382165
+90,1.05482927894896,62.6890923566879
+91,1.0590154741220414,62.21138535031847
+92,1.031386842013924,63.684315286624205
+93,1.022948007295086,63.913216560509554
+94,1.0145901107484367,64.65963375796179
+95,1.0234427201520107,63.853503184713375
+96,1.0151579888762943,64.69944267515923
+97,1.005190831840418,65.00796178343948
+98,0.9911643095836518,65.515525477707
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_1_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_1_Dec3.csv
new file mode 100644
index 00000000000..5462a5e6bc6
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.31981011864486,9.952229299363058
+2,2.3270803545690644,16.401273885350317
+3,2.236011638762845,17.565684713375795
+4,2.188204462361184,18.003582802547772
+5,2.165380006383179,18.083200636942674
+6,2.0918406377172776,18.481289808917197
+7,2.035984041584525,19.2078025477707
+8,1.9866781910513616,24.97014331210191
+9,1.9335860135448966,26.880971337579616
+10,1.8882596667405147,26.373407643312103
+11,1.8962186051022476,26.20421974522293
+12,1.8427529061675831,28.81170382165605
+13,1.8003868593531809,29.74721337579618
+14,1.7796710463845806,29.88654458598726
+15,1.8387379190724367,30.384156050955415
+16,1.845039130016497,31.568471337579616
+17,1.7104304687232728,32.12579617834395
+18,1.7230374562512538,32.27507961783439
+19,1.7485516139656117,32.06608280254777
+20,1.7054309822191858,31.031050955414013
+21,1.683143002971722,32.991640127388536
+22,1.6683035101860193,34.53423566878981
+23,1.689530695319935,34.1062898089172
+24,1.6692868676155237,34.08638535031847
+25,1.6176058031191491,34.693471337579616
+26,1.6073091250316354,35.19108280254777
+27,1.569430183453165,36.086783439490446
+28,1.5652622736183701,37.45023885350319
+29,1.5459922187647241,38.017515923566876
+30,1.5250392499243377,38.13694267515923
+31,1.50202064833064,40.19705414012739
+32,1.5108314054027485,39.56011146496815
+33,1.5328771498552554,39.271496815286625
+34,1.512309779027465,39.83877388535032
+35,1.530451165642708,39.77906050955414
+36,1.503982405753652,40.555334394904456
+37,1.461535419628119,41.9187898089172
+38,1.4157442112637173,43.36186305732484
+39,1.4603690987179994,42.09792993630573
+40,1.396739786597574,45.15326433121019
+41,1.401677848427159,44.61584394904459
+42,1.4154822917500878,44.576035031847134
+43,1.3918676406714567,45.60111464968153
+44,1.4229601150865008,44.735270700636946
+45,1.37197117061372,46.357484076433124
+46,1.3780541776851485,46.50676751592356
+47,1.3585029476007837,47.94984076433121
+48,1.320797633213602,49.30334394904459
+49,1.3025498390197754,50.74641719745223
+50,1.2413258947384584,52.9359076433121
+51,1.2163602421238164,54.10031847133758
+52,1.2681184331322932,51.66202229299363
+53,1.2796791025028107,50.21894904458599
+54,1.2278536683434893,54.339171974522294
+55,1.2310541272163391,54.28941082802548
+56,1.2122824294551922,54.07046178343949
+57,1.2186445366045473,53.951035031847134
+58,1.2698134126936553,52.73686305732484
+59,1.243131643647601,54.120222929936304
+60,1.1684505548446802,57.0859872611465
+61,1.1549512337727152,57.7328821656051
+62,1.2166920137253536,55.453821656050955
+63,1.154614016128953,57.94187898089172
+64,1.151412794924086,57.832404458598724
+65,1.0975065322438622,60.76831210191083
+66,1.125882822996492,59.942277070063696
+67,1.1554146967116434,59.21576433121019
+68,1.1139833915765118,60.7484076433121
+69,1.0832213622749232,62.2312898089172
+70,1.1191623123588077,60.83797770700637
+71,1.0409755160094827,64.11226114649682
+72,1.0451143080261862,63.47531847133758
+73,1.0921003032641805,62.16162420382165
+74,,10.011942675159236
+75,,10.011942675159236
+76,,10.011942675159236
+77,,10.011942675159236
+78,,10.011942675159236
+79,,10.011942675159236
+80,,10.011942675159236
+81,,10.011942675159236
+82,,10.011942675159236
+83,,10.011942675159236
+84,,10.011942675159236
+85,,10.011942675159236
+86,,10.011942675159236
+87,,10.011942675159236
+88,,10.011942675159236
+89,,10.011942675159236
+90,,10.011942675159236
+91,,10.011942675159236
+92,,10.011942675159236
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_2_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_2_Dec3.csv
new file mode 100644
index 00000000000..007c56c2517
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.32428282992855,9.952229299363058
+2,2.3174386890071212,16.510748407643312
+3,2.2616962202035698,17.496019108280255
+4,2.223850304913369,17.983678343949045
+5,2.1498559022405344,18.312101910828027
+6,2.0937738775447676,17.84434713375796
+7,2.0556424279121837,21.705812101910826
+8,1.9705185259983038,25.189092356687897
+9,1.9262793998050083,25.248805732484076
+10,1.8903633287757824,25.94546178343949
+11,1.8533720028628209,28.25437898089172
+12,1.8260794452800873,27.50796178343949
+13,1.791961477820281,28.134952229299362
+14,1.8028962604559151,30.971337579617835
+15,1.8314284458281889,31.240047770700638
+16,1.7413975152240437,31.66799363057325
+17,1.76040525193427,30.224920382165607
+18,1.7500609394851003,31.468949044585987
+19,1.7063926549474144,31.79737261146497
+20,1.6780576113682644,32.98168789808917
+21,1.687206389797721,33.608678343949045
+22,1.683450806672406,34.583996815286625
+23,1.70664686458126,33.30015923566879
+24,1.5966202286398334,35.83797770700637
+25,1.6194573132095822,34.21576433121019
+26,1.5904999903053234,35.758359872611464
+27,1.573032574289164,37.08200636942675
+28,1.5442287473921563,38.067277070063696
+29,1.5436396378620414,37.45023885350319
+30,1.5275341105309261,36.57444267515923
+31,1.4991916812908876,38.544984076433124
+32,1.5019620755675491,38.69426751592356
+33,1.516260206319724,39.80891719745223
+34,1.545366729141041,39.43073248407644
+35,1.526906736337455,41.0828025477707
+36,1.4906442719659987,40.8937101910828
+37,1.417348074305589,43.39171974522293
+38,1.4583478087832213,42.12778662420382
+39,1.4247253723205275,44.02866242038217
+40,1.4191510669744698,43.013535031847134
+41,1.4328371263613366,44.00875796178344
+42,1.3982543315097784,43.929140127388536
+43,1.423313855365583,44.16799363057325
+44,1.4127953963674558,45.163216560509554
+45,1.4131687856783532,43.25238853503185
+46,1.4124792897777192,45.909633757961785
+47,1.3586350117519403,47.392515923566876
+48,1.3291723507984428,48.845541401273884
+49,1.3056743547415277,48.68630573248408
+50,1.2475915076626334,52.8562898089172
+51,1.3096728901954213,49.70143312101911
+52,1.2950657564363661,49.25358280254777
+53,1.2907564920984256,51.73168789808917
+54,1.2776526641693844,51.154458598726116
+55,1.2290187352781843,51.46297770700637
+56,1.2637851223064835,51.33359872611465
+57,1.307064347965702,50.78622611464968
+58,1.2671800225403658,52.65724522292994
+59,1.2207980045847073,54.169984076433124
+60,1.1866171356219395,55.24482484076433
+61,1.2352016556794476,53.40366242038217
+62,1.203970708664815,55.483678343949045
+63,1.1808205645555143,55.35429936305732
+64,1.1494090283752247,57.30493630573248
+65,1.151600067782554,57.603503184713375
+66,1.211167562159763,56.230095541401276
+67,1.133381357238551,58.409633757961785
+68,1.1619057298465898,58.051353503184714
+69,1.2784091351897853,55.72253184713376
+70,1.0778594241020785,61.52468152866242
+71,1.0602612977574586,62.27109872611465
+72,1.0830136879234558,61.5843949044586
+73,1.0724899814387037,61.88296178343949
+74,1.1194314356822117,60.619028662420384
+75,1.0437630718680704,63.34593949044586
+76,1.1226397813505429,60.67874203821656
+77,1.1048539990832091,61.27587579617835
+78,1.0811341875677656,63.3359872611465
+79,1.065729108206026,63.067277070063696
+80,1.0473899970388716,63.94307324840764
+81,1.057944452307027,63.50517515923567
+82,1.0381776857527958,64.84872611464968
+83,1.0324998847238578,64.96815286624204
+84,1.051732201864765,64.54020700636943
+85,1.000599786354478,66.0031847133758
+86,0.9968066860915749,66.13256369426752
+87,0.9817091029161101,67.11783439490446
+88,0.9653584562289487,67.88415605095541
+89,0.9999591860042256,66.43113057324841
+90,0.9418940191056319,67.93391719745223
+91,0.9727236176751981,67.82444267515923
+92,0.995132986906987,67.47611464968153
+93,0.9654969254117103,67.88415605095541
+94,0.9135257005691528,69.45660828025478
+95,0.9492163764443368,68.28224522292993
+96,0.9684970971125706,68.46138535031847
+97,0.9400283531018883,69.18789808917198
+98,0.942237958027299,69.30732484076434
+99,0.9343463778495789,69.44665605095541
+100,0.9304855424127761,69.64570063694268
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_3_Dec3.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_3_Dec3.csv
new file mode 100644
index 00000000000..41371b8f17d
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.318576755037733,14.798964968152866
+2,2.3436634859461694,13.684315286624203
+3,2.3137021824053137,15.833996815286625
+4,2.2239066354788033,16.22213375796178
+5,2.139645654684419,18.13296178343949
+6,2.119863986968994,18.312101910828027
+7,2.0594181103311526,18.172770700636942
+8,1.9774596767061074,22.36265923566879
+9,1.9499407156257873,23.457404458598727
+10,1.9016578121549765,26.443073248407643
+11,1.8564548226678448,29.03065286624204
+12,1.8155133405308814,29.637738853503183
+13,1.8543380483700211,29.737261146496817
+14,1.9037148026144428,30.31449044585987
+15,1.7695758054210882,31.15047770700637
+16,1.804499611733066,29.6875
+17,1.7662918438577349,31.787420382165607
+18,1.7175361586224502,29.75716560509554
+19,1.6829303260062152,31.956608280254777
+20,1.6581202084851112,33.68829617834395
+21,1.718699724810898,32.86226114649681
+22,1.6937123825595637,32.8125
+23,1.6135687721762688,33.70820063694268
+24,1.6256142004280334,34.07643312101911
+25,1.6010351461969363,34.91242038216561
+26,1.5681287240070902,36.55453821656051
+27,1.5617059894428131,36.2062101910828
+28,1.5399045921435022,36.29578025477707
+29,1.553810565334976,37.02229299363057
+30,1.489670344978381,38.05732484076433
+31,1.5156386513618907,38.495222929936304
+32,1.537633762238132,37.480095541401276
+33,1.5782394234541874,38.52507961783439
+34,1.5314634127222049,39.23168789808917
+35,1.5214624609916834,39.689490445859875
+36,1.471343852911785,42.1078821656051
+37,1.5118912898810806,39.74920382165605
+38,1.4295217110093232,43.05334394904459
+39,1.4262930116835673,43.16281847133758
+40,1.436829971659715,42.705015923566876
+41,1.4146741332521864,43.44148089171974
+42,1.4404134218859825,43.45143312101911
+43,1.4150942548824723,43.86942675159236
+44,1.4078693344334887,43.94904458598726
+45,1.4617881828052983,44.77507961783439
+46,1.3978098737206428,46.267914012738856
+47,1.33747956327572,47.94984076433121
+48,1.333851676078359,47.20342356687898
+49,1.2842160425368387,50.179140127388536
+50,1.2367805709504778,52.76671974522293
+51,1.3012755232252133,49.25358280254777
+52,1.3140822440195994,49.71138535031847
+53,1.28964267300952,50.11942675159236
+54,1.2681316156296214,50.89570063694268
+55,1.25238521919129,52.61743630573248
+56,1.309001599147821,50.11942675159236
+57,1.2756021679586667,51.96058917197452
+58,1.2322705642432923,53.7718949044586
+59,1.199052803075997,55.63296178343949
+60,1.2686265372926262,52.080015923566876
+61,1.2004339193842213,55.83200636942675
+62,1.1677234184210468,56.40923566878981
+63,1.1610586373669327,57.65326433121019
+64,1.1620658351357576,57.434315286624205
+65,1.20312394685806,56.19028662420382
+66,1.1692637888489255,58.48925159235669
+67,1.1284322605770865,59.96218152866242
+68,1.1938037310436274,56.68789808917197
+69,1.0864540953545054,61.922770700636946
+70,1.067044326454211,62.261146496815286
+71,1.0898799660858836,61.41520700636943
+72,1.0901951877174862,60.957404458598724
+73,1.0997136751557612,61.23606687898089
+74,1.1328100068553997,60.330414012738856
+75,1.0563614926520426,63.16679936305732
+76,1.1006004878669788,61.32563694267516
+77,1.0901535829161382,62.13176751592356
+78,,10.011942675159236
+79,,10.011942675159236
+80,,10.011942675159236
+81,,10.011942675159236
+82,,10.011942675159236
+83,,10.011942675159236
+84,,10.011942675159236
+85,,10.011942675159236
+86,,10.011942675159236
+87,,10.011942675159236
+88,,10.011942675159236
+89,,10.011942675159236
+90,,10.011942675159236
+91,,10.011942675159236
+92,,10.011942675159236
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_4_Dec3_mu_0.001.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_4_Dec3_mu_0.001.csv
new file mode 100644
index 00000000000..125f8952491
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_4_Dec3_mu_0.001.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.332164670251737,11.634156050955413
+2,2.3600634617410647,15.565286624203821
+3,2.2847265088634128,16.22213375796178
+4,2.1907860701251183,17.724920382165607
+5,2.1625176280926746,18.740047770700638
+6,2.0913792142442835,18.26234076433121
+7,2.025095403574075,19.287420382165607
+8,1.9940613576561024,21.098726114649683
+9,1.948790239680345,25.93550955414013
+10,1.8918789678318486,29.16998407643312
+11,1.8516615416593611,29.249601910828027
+12,1.8798195715922459,28.871417197452228
+13,1.8941533671822517,30.095541401273884
+14,1.816947561160774,29.796974522292995
+15,1.7963579118631448,30.364251592356688
+16,1.7748334050937822,31.110668789808916
+17,1.775861630014553,30.523487261146496
+18,1.7402516565505106,31.458996815286625
+19,1.7147097944454024,32.69307324840764
+20,1.7010173774828576,32.832404458598724
+21,1.7250190768272253,31.30971337579618
+22,1.6595818221948708,32.076035031847134
+23,1.6806901435183872,32.05613057324841
+24,1.6849109815184478,33.66839171974522
+25,1.6249606730831656,35.15127388535032
+26,1.6317910069872619,35.22093949044586
+27,1.6110359498649647,34.4546178343949
+28,1.5725787832478808,33.88734076433121
+29,1.5758311915549503,35.40007961783439
+30,1.5816088018903307,36.94267515923567
+31,1.5758677660279972,36.514729299363054
+32,1.5910379582909262,37.05214968152866
+33,1.5575890001977326,38.067277070063696
+34,1.5364814898011032,38.37579617834395
+35,1.5048534444942596,39.580015923566876
+36,1.4931848079535612,39.689490445859875
+37,1.5070037234361005,40.555334394904456
+38,1.5241172875568365,40.276671974522294
+39,1.4787513875657585,41.57046178343949
+40,1.4333156886374114,42.535828025477706
+41,1.4766970181920727,41.033041401273884
+42,1.4682770329675856,42.09792993630573
+43,1.4334955769739333,42.60549363057325
+44,1.4441563657894256,44.67555732484077
+45,1.3774640256432211,45.78025477707006
+46,1.3553641465059512,47.43232484076433
+47,1.3996198238081234,44.17794585987261
+48,1.3014150561800428,48.367834394904456
+49,1.3757337491223767,48.5171178343949
+50,1.2333780079130914,51.383359872611464
+51,1.2653272934020705,52.388535031847134
+52,1.280003587531436,50.597133757961785
+53,1.272077521700768,49.38296178343949
+54,1.2785201866155977,51.31369426751592
+55,1.337269169889438,49.402866242038215
+56,1.3142731831331922,50.7265127388535
+57,1.2196047507273924,53.085191082802545
+58,1.2036343376347973,54.279458598726116
+59,1.2967431947683832,51.582404458598724
+60,1.2092859893088128,56.16042993630573
+61,1.1867585083481613,56.070859872611464
+62,1.1393842978082644,58.59872611464968
+63,1.1955800120997582,56.27985668789809
+64,1.180055622841902,57.31488853503185
+65,1.157463842516492,58.31011146496815
+66,1.166901686009328,57.663216560509554
+67,1.1806429932071905,58.26035031847134
+68,1.1213070400960885,61.04697452229299
+69,1.0591137025766313,62.121815286624205
+70,1.0600426588088843,61.534633757961785
+71,1.084704800775856,62.00238853503185
+72,1.110198599517725,60.60907643312102
+73,1.0991034363485446,61.345541401273884
+74,1.072368211427312,62.78861464968153
+75,0.9954288176670196,65.67476114649682
+76,1.0309445026573862,64.90843949044586
+77,1.039737315694238,64.43073248407643
+78,1.0563818527634736,64.24164012738854
+79,1.0542856511796357,63.53503184713376
+80,1.0288312951470637,64.87858280254777
+81,1.043891834984919,64.6297770700637
+82,1.0278291129002906,65.515525477707
+83,0.9602611349646453,67.7249203821656
+84,1.0014710395958772,66.22213375796179
+85,0.9853204929145278,66.05294585987261
+86,1.004773197660021,66.1624203821656
+87,0.9919794262594478,66.49084394904459
+88,0.9553457870604886,67.70501592356688
+89,0.9496707312620369,68.2125796178344
+90,1.0598031324186143,63.86345541401274
+91,0.9316996597939995,68.63057324840764
+92,0.9155371075223206,69.1281847133758
+93,0.9586323361108258,68.08320063694268
+94,0.9567545432194023,68.06329617834395
+95,0.9542987657960054,68.43152866242038
+96,0.9319428334570234,69.17794585987261
+97,0.9021389962761266,70.16321656050955
+98,0.9062754868701764,70.32245222929936
+99,0.9215340690248331,69.59593949044586
+100,0.8790523702171957,70.92953821656052
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_5_Dec3_mu_0.001.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_5_Dec3_mu_0.001.csv
new file mode 100644
index 00000000000..611864a4eb8
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_5_Dec3_mu_0.001.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3233751886209864,12.689092356687897
+2,2.326752143301022,15.117436305732484
+3,2.2406746460373994,17.54578025477707
+4,2.200015509963795,17.585589171974522
+5,2.124900021370809,17.67515923566879
+6,2.0673210112152587,18.003582802547772
+7,2.0402388557506974,18.33200636942675
+8,1.9989694546742045,20.302547770700638
+9,1.9317926563275087,27.57762738853503
+10,1.8824377735708928,27.448248407643312
+11,1.8831339201350121,29.289410828025478
+12,1.9242145551997385,28.851512738853504
+13,1.798594899238295,30.65286624203822
+14,1.8013700429041675,29.25955414012739
+15,1.8186901534438893,30.165207006369428
+16,1.7717712798695655,30.513535031847134
+17,1.7198104957106766,31.22014331210191
+18,1.69781058457247,33.379777070063696
+19,1.757574130775063,31.618232484076433
+20,1.7265601742799115,30.80214968152866
+21,1.6750702463137876,32.61345541401274
+22,1.671069555981144,31.66799363057325
+23,1.6325913690457678,33.84753184713376
+24,1.599509985583603,36.116640127388536
+25,1.6126683373360118,36.27587579617835
+26,1.592764130063877,36.0171178343949
+27,1.5537425385918586,37.55971337579618
+28,1.5504689095126596,37.121815286624205
+29,1.570036510753024,38.13694267515923
+30,1.5913533124194783,36.504777070063696
+31,1.620058111324432,38.067277070063696
+32,1.5573317078268452,38.883359872611464
+33,1.5041023272617606,39.80891719745223
+34,1.49523916365994,41.391321656050955
+35,1.479119137593895,41.37141719745223
+36,1.4633240160668732,43.710191082802545
+37,1.4610535475858457,42.595541401273884
+38,1.4614848885566565,43.730095541401276
+39,1.4461102774188777,43.5609076433121
+40,1.4685331378013464,43.08320063694268
+41,1.4698412699304568,44.86464968152866
+42,1.4211195099885297,44.317277070063696
+43,1.4475286029706336,45.71058917197452
+44,1.3558572120727248,48.29816878980892
+45,1.3319543288771514,48.6265923566879
+46,1.343918844013457,48.38773885350319
+47,1.2817655213319572,50.766321656050955
+48,1.320669106237448,49.80095541401274
+49,1.3423245765600995,49.74124203821656
+50,1.2215349176886734,54.46855095541401
+51,1.2616455031048721,52.75676751592356
+52,1.2618438590104413,51.82125796178344
+53,1.242122257591053,53.42356687898089
+54,1.2896742539800656,52.607484076433124
+55,1.2744897903910108,52.82643312101911
+56,1.2008773077065777,55.682722929936304
+57,1.1927502079374472,55.75238853503185
+58,1.2266267689929646,54.35907643312102
+59,1.230928825345009,56.259952229299365
+60,1.1567878818056385,57.464171974522294
+61,1.1687966281441367,58.0015923566879
+62,1.1756701701006311,57.53383757961783
+63,1.174668044800971,58.50915605095541
+64,1.134730955218054,59.77308917197452
+65,1.1463057121653466,59.28542993630573
+66,1.1764519320931404,57.52388535031847
+67,1.084714452552188,61.484872611464965
+68,1.0763807452408372,61.3953025477707
+69,1.0687900979048128,62.52985668789809
+70,1.0961741041985287,61.564490445859875
+71,1.0746188611741279,62.878184713375795
+72,1.0768126158197975,62.98765923566879
+73,1.1083998513069881,62.151671974522294
+74,1.092948633774071,63.35589171974522
+75,1.0105081006979486,65.83399681528662
+76,1.0575302721588475,64.46058917197452
+77,1.0821689879818328,63.4156050955414
+78,1.0436086772353785,65.13734076433121
+79,1.0154315142115211,65.99323248407643
+80,1.0203678915455083,65.83399681528662
+81,1.0593194236421282,64.0625
+82,1.0174874568441112,65.52547770700637
+83,0.9946525495523101,65.86385350318471
+84,0.990163024823377,66.66003184713375
+85,0.9810423596649412,67.1875
+86,0.9999548827007319,66.98845541401273
+87,0.9669929590954143,67.7547770700637
+88,1.0009670849818333,66.95859872611464
+89,0.9952846294755389,67.59554140127389
+90,0.9374732128374136,68.71019108280255
+91,0.9173880982550846,68.95899681528662
+92,0.9679231241250493,68.42157643312102
+93,0.9589443738293496,68.5907643312102
+94,0.9315782345024644,69.4267515923567
+95,0.9497407997489735,69.46656050955414
+96,0.9256639419847233,69.49641719745223
+97,0.9199216377203632,69.95421974522293
+98,0.9123693347736529,69.80493630573248
+99,0.9006446032387436,70.11345541401273
+100,0.9684686558261798,69.17794585987261
diff --git a/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_6_Dec3_mu_0.001.csv b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_6_Dec3_mu_0.001.csv
new file mode 100644
index 00000000000..bbb03857900
--- /dev/null
+++ b/baselines/fednova/fednova/results/proximal_fednova_varEpoch_True_seed_6_Dec3_mu_0.001.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3308039258240134,9.982085987261147
+2,2.3341928652137707,14.430732484076433
+3,2.28608138090486,17.25716560509554
+4,2.197823017266146,17.366640127388536
+5,2.1159619320729735,17.73487261146497
+6,2.0765644053744663,18.371815286624205
+7,2.056024155798991,18.381767515923567
+8,2.0055505713080146,22.681130573248407
+9,1.9501451580387772,24.47253184713376
+10,1.9591030231706656,25.348328025477706
+11,1.9581790471532543,28.562898089171973
+12,1.8738752580752038,28.57285031847134
+13,1.8525162851734527,29.309315286624205
+14,1.8773574631684904,28.08519108280255
+15,1.8178536724892391,30.005971337579616
+16,1.7878017767219787,29.956210191082803
+17,1.771775235795671,30.07563694267516
+18,1.7761196611793177,30.901671974522294
+19,1.7616703912710687,31.598328025477706
+20,1.727610955572432,29.71735668789809
+21,1.6965343109361686,32.39450636942675
+22,1.6888474939735072,33.12101910828026
+23,1.6472218423891978,35.82802547770701
+24,1.6295601577515815,35.280652866242036
+25,1.621229994828534,35.42993630573248
+26,1.6251212373660628,35.41003184713376
+27,1.602142844989801,36.41520700636943
+28,1.589846054459833,36.982484076433124
+29,1.6124664021145767,37.39052547770701
+30,1.6203238349051992,37.30095541401274
+31,1.567192535491506,38.53503184713376
+32,1.5765465520749427,37.63933121019108
+33,1.5186552750836513,39.87858280254777
+34,1.5440970909823277,38.36584394904459
+35,1.5257963496408644,39.858678343949045
+36,1.523234294478301,39.022691082802545
+37,1.501398852676343,41.451035031847134
+38,1.4554496532792498,41.73964968152866
+39,1.489778498935092,41.560509554140125
+40,1.4830294794337764,42.46616242038217
+41,1.4666260086047422,41.93869426751592
+42,1.4559013486667802,44.41679936305732
+43,1.4065023964377725,44.84474522292994
+44,1.385857704338754,44.98407643312102
+45,1.4199036245892762,44.715366242038215
+46,1.3849143792109884,44.92436305732484
+47,1.3482162815750025,45.690684713375795
+48,1.3197058587317254,47.77070063694268
+49,1.306454715835061,49.8109076433121
+50,1.269059752962392,51.39331210191083
+51,1.301755104854608,47.98964968152866
+52,1.2834837823916392,49.24363057324841
+53,1.3419004378804735,48.15883757961783
+54,1.2948818799037083,49.95023885350319
+55,1.2572851708740185,50.68670382165605
+56,1.245414524700991,52.298964968152866
+57,1.3534862478827214,48.119028662420384
+58,1.24263478274558,51.552547770700635
+59,1.2323850860261614,52.53781847133758
+60,1.2164362034979899,53.52308917197452
+61,1.2451702561348108,52.975716560509554
+62,1.2066168610457402,54.24960191082803
+63,1.2041017602963053,54.6078821656051
+64,1.24777557705618,54.15007961783439
+65,1.313431821431324,53.83160828025478
+66,1.1297616616935486,58.25039808917197
+67,1.1415103696713782,57.52388535031847
+68,1.1118545243694524,58.409633757961785
+69,1.1600016404868692,57.78264331210191
+70,1.1204198629233488,57.93192675159236
+71,1.1363199694900756,57.84235668789809
+72,1.1454413567379023,57.991640127388536
+73,1.1388245710901395,58.30015923566879
+74,1.1602470665980296,58.23049363057325
+75,1.0570165761716805,62.06210191082803
+76,1.0815854585094817,61.21616242038217
+77,1.0947800210327099,60.111464968152866
+78,1.1015385146353656,61.09673566878981
+79,1.092564936276454,60.56926751592356
+80,1.0585083198395504,61.922770700636946
+81,1.0250139179503082,63.883359872611464
+82,1.0228960916494867,64.47054140127389
+83,1.004765330226558,64.40087579617834
+84,1.0029991941087564,65.37619426751593
+85,1.0189822919809135,63.913216560509554
+86,0.9971144996630917,64.69944267515923
+87,1.0010741185990109,65.4657643312102
+88,0.9972102383899081,65.90366242038216
+89,0.9986499449250045,65.97332802547771
+90,0.9462861175749712,67.62539808917198
+91,0.9847662604538499,65.98328025477707
+92,0.9612684170151972,67.60549363057325
+93,0.9749008823352255,66.93869426751593
+94,0.9606475488395448,67.0282643312102
+95,0.9189126639609124,68.80971337579618
+96,0.9458716302920299,68.55095541401273
+97,0.9372786875743016,68.72014331210191
+98,0.9400641527145531,68.66042993630573
+99,1.025105722390922,66.04299363057325
+100,0.967315807084369,67.24721337579618
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_1_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_1_Dec3.csv
new file mode 100644
index 00000000000..b9984234f6d
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.315098416273761,9.952229299363058
+2,2.337856440027808,10.519506369426752
+3,2.2765439483010845,17.207404458598727
+4,2.22455447646463,17.74482484076433
+5,2.2110284650401706,22.78065286624204
+6,2.149824983754735,21.785429936305732
+7,2.1224543668661906,23.556926751592357
+8,2.086315421541785,23.974920382165607
+9,2.0711476810418876,24.691480891719745
+10,2.0098112525453993,25.328423566878982
+11,1.9755257838850568,26.13455414012739
+12,1.927691510528516,28.294187898089174
+13,1.9316287427950816,27.040207006369428
+14,1.899698277187955,29.00079617834395
+15,1.8521906479149108,30.165207006369428
+16,1.8396973564366625,30.443869426751593
+17,1.8140030135015013,30.165207006369428
+18,1.8695901169139109,28.980891719745223
+19,1.821781297398221,30.812101910828027
+20,1.7905250939593953,31.439092356687897
+21,1.7801622964773969,32.02627388535032
+22,1.752649104519255,31.976512738853504
+23,1.7622974533943614,32.265127388535035
+24,1.80207741640176,31.84713375796178
+25,1.7312012083211523,33.49920382165605
+26,1.7055704084930905,34.06648089171974
+27,1.7052095224902888,33.95700636942675
+28,1.711177444002431,34.5640923566879
+29,1.6853135755866955,34.982085987261144
+30,1.736624691137083,34.25557324840764
+31,1.6816577068559684,35.65883757961783
+32,1.6849196762036367,36.05692675159236
+33,1.665765095668234,36.484872611464965
+34,1.6666542284048287,36.176353503184714
+35,1.6278100773027748,36.60429936305732
+36,1.6288466119462517,37.350716560509554
+37,1.6499857887340958,37.41042993630573
+38,1.624695550104615,38.465366242038215
+39,1.6034459460313153,39.83877388535032
+40,1.613893952339318,40.20700636942675
+41,1.5848291254347298,39.91839171974522
+42,1.5784353306339045,40.943471337579616
+43,1.5371476009393195,41.85907643312102
+44,1.5262270998802914,41.71974522292994
+45,1.5213908511362257,42.51592356687898
+46,1.5657064276895705,43.04339171974522
+47,1.5130913181669394,43.35191082802548
+48,1.4632667318271224,43.62062101910828
+49,1.4861029545972302,44.91441082802548
+50,1.4415780321048324,46.77547770700637
+51,1.4473370389573892,46.96457006369427
+52,1.4431290983394454,47.452229299363054
+53,1.4240832526213045,47.482085987261144
+54,1.4447427676741484,47.65127388535032
+55,1.4495679724747967,47.69108280254777
+56,1.4239779315936338,48.23845541401274
+57,1.3903029466130932,49.28343949044586
+58,1.3696297376778475,49.791003184713375
+59,1.3524930127866708,50.656847133757964
+60,1.3376504858587956,51.51273885350319
+61,1.3437763703097203,51.4828821656051
+62,1.3868736157751387,51.23407643312102
+63,1.3282797427693749,51.4828821656051
+64,1.3377866574153778,52.298964968152866
+65,1.3129025682522233,53.61265923566879
+66,1.3253401396380868,53.194665605095544
+67,1.3056597964019532,53.891321656050955
+68,1.3173768717771883,53.2046178343949
+69,1.2636647797693872,55.35429936305732
+70,1.348484317967846,54.62778662420382
+71,1.2195875659869735,56.77746815286624
+72,1.2417937961353618,56.72770700636943
+73,1.245372197810252,55.78224522292994
+74,1.2311008621932595,57.45421974522293
+75,1.1492978797596731,59.93232484076433
+76,1.2141930335646223,58.17078025477707
+77,1.20923964005367,58.59872611464968
+78,1.2069563250632802,59.1859076433121
+79,1.2116140286633923,59.20581210191083
+80,1.1685718696588163,60.09156050955414
+81,1.165917597758542,59.87261146496815
+82,1.1521826561089534,60.98726114649681
+83,1.1392407546377485,61.21616242038217
+84,1.1319843667327978,60.51950636942675
+85,1.155537183497362,60.728503184713375
+86,1.145231395390383,60.390127388535035
+87,1.1485279711188785,61.873009554140125
+88,1.1579631927666392,60.62898089171974
+89,1.1171996673201299,62.0421974522293
+90,1.154524060950917,61.733678343949045
+91,1.0968473861171941,62.89808917197452
+92,1.0948532899473882,63.236464968152866
+93,1.1170398691657242,62.85828025477707
+94,1.0802056884310047,63.50517515923567
+95,1.0858875953467788,63.89331210191083
+96,1.0744325195907787,64.26154458598727
+97,1.0734240761987723,64.04259554140127
+98,1.0857135786372385,63.097133757961785
+99,1.0549505690860141,64.47054140127389
+100,1.0703523272921325,64.32125796178345
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_2_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_2_Dec3.csv
new file mode 100644
index 00000000000..06bb9c0fdca
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.323466275148331,9.952229299363058
+2,2.3487883206385716,9.952229299363058
+3,2.2808813471703013,17.11783439490446
+4,2.240513557081769,18.531050955414013
+5,2.213022259390278,22.75079617834395
+6,2.15295278950102,22.999601910828027
+7,2.1328407070439335,23.50716560509554
+8,2.1122883998664324,23.736066878980893
+9,2.073956640662661,24.37300955414013
+10,2.0258204246022897,24.591958598726116
+11,1.976819170508415,25.288614649681527
+12,1.9645711639124877,25.328423566878982
+13,1.9187730945599306,27.030254777070063
+14,1.9333772818753674,26.064888535031848
+15,1.8692992530810606,28.383757961783438
+16,1.8414717624141912,29.6875
+17,1.8119541778685941,30.04578025477707
+18,1.8536140182215697,29.45859872611465
+19,1.803924865024105,30.443869426751593
+20,1.8025869313319018,30.86186305732484
+21,1.7618995608797499,31.976512738853504
+22,1.7898432335276513,30.931528662420384
+23,1.7485907161311738,32.434315286624205
+24,1.7605761380711937,32.48407643312102
+25,1.743215579136162,33.07125796178344
+26,1.7282477708379174,33.23049363057325
+27,1.742697487211531,34.80294585987261
+28,1.7508670213116202,35.41003184713376
+29,1.7454238560549014,34.15605095541401
+30,1.7680819550896907,33.9171974522293
+31,1.657139300540754,37.6890923566879
+32,1.6954226341976482,36.35549363057325
+33,1.6603296478842473,37.738853503184714
+34,1.6722210531781434,37.569665605095544
+35,1.6462219953536987,37.74880573248408
+36,1.6204258628711579,39.082404458598724
+37,1.651900043912754,38.744028662420384
+38,1.6445934263763913,39.74920382165605
+39,1.6220688030218622,40.50557324840764
+40,1.590855087444281,41.05294585987261
+41,1.5781808134856496,41.361464968152866
+42,1.5672793532632718,41.79936305732484
+43,1.5337202465458282,42.07802547770701
+44,1.546882406161849,42.99363057324841
+45,1.5217988916263459,42.923964968152866
+46,1.5267101966651382,43.431528662420384
+47,1.486888017624047,44.735270700636946
+48,1.472653646378001,44.8546974522293
+49,1.496505322729706,45.44187898089172
+50,1.4511285450807803,46.76552547770701
+51,1.4264497164708034,46.76552547770701
+52,1.4699144014127694,46.28781847133758
+53,1.4399466233648313,46.74562101910828
+54,1.3969843934296042,47.919984076433124
+55,1.4356390260587073,47.830414012738856
+56,1.3975805127696626,48.984872611464965
+57,1.3451321481899092,49.95023885350319
+58,1.3839698824912878,50.21894904458599
+59,1.3858487970510107,50.21894904458599
+60,1.3985539150845474,49.850716560509554
+61,1.3876737006910287,50.8359872611465
+62,1.3523399298358116,52.19944267515923
+63,1.3301775516218441,52.61743630573248
+64,1.3109115384946204,52.517914012738856
+65,1.3039750411252307,53.45342356687898
+66,1.2977817658406154,54.02070063694268
+67,1.2963411291693425,54.448646496815286
+68,1.289435508144889,54.080414012738856
+69,1.289232185691785,54.48845541401274
+70,1.2767832636073897,54.697452229299365
+71,1.291308511973946,55.702627388535035
+72,1.281802067711095,54.98606687898089
+73,1.2684164950802068,55.99124203821656
+74,1.2781846534674335,56.41918789808917
+75,1.1967287636866235,58.25039808917197
+76,1.2493930796908725,57.294984076433124
+77,1.221498523927798,57.8125
+78,1.2394554854198625,58.52906050955414
+79,1.2093251074195668,58.62858280254777
+80,1.2252991757575113,58.28025477707006
+81,1.2197124183557595,58.7281050955414
+82,1.1807742232729674,58.42953821656051
+83,1.1912473333869011,59.43471337579618
+84,1.1723994047019133,59.32523885350319
+85,1.2800010970443676,57.34474522292994
+86,1.1876720505155576,58.190684713375795
+87,1.1723668051373428,60.19108280254777
+88,1.1725884960715178,59.73328025477707
+89,1.179050163098961,60.05175159235669
+90,1.1652895493112552,60.68869426751592
+91,1.1660986709746586,60.22093949044586
+92,1.142228449226185,60.90764331210191
+93,1.137061162739043,61.78343949044586
+94,1.1442972843054753,60.98726114649681
+95,1.1570586820316922,61.594347133757964
+96,1.1204857602240934,61.116640127388536
+97,1.1084931135936906,62.02229299363057
+98,1.1601466301140513,61.843152866242036
+99,1.1381644678723282,62.28105095541401
+100,1.113477860286737,62.509952229299365
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_3_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_3_Dec3.csv
new file mode 100644
index 00000000000..76086321062
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3285531754706317,9.952229299363058
+2,2.3654619356629194,9.96218152866242
+3,2.3148523394469245,16.968550955414013
+4,2.27810956869915,17.207404458598727
+5,2.2135774664058805,18.958996815286625
+6,2.1859006669111314,21.954617834394906
+7,2.1378809456612653,23.63654458598726
+8,2.1619099150797365,23.23845541401274
+9,2.0732571790172796,24.80095541401274
+10,2.0726065514193976,24.910429936305732
+11,1.9795100780049706,26.62221337579618
+12,1.9749686938182565,27.348726114649683
+13,1.910833066436136,28.732085987261147
+14,1.9184879163268265,28.761942675159236
+15,1.8766120186277255,29.418789808917197
+16,1.8777815665409063,30.21496815286624
+17,1.8216498642210748,30.911624203821656
+18,1.8243526174763964,31.369426751592357
+19,1.8039295141863976,31.458996815286625
+20,1.8242056893694931,30.015923566878982
+21,1.814560458918286,30.523487261146496
+22,1.8002953225639975,31.538614649681527
+23,1.7548981479778412,32.31488853503185
+24,1.779968604160722,32.48407643312102
+25,1.7637105360152616,32.852308917197455
+26,1.7721984333293452,32.41441082802548
+27,1.7117962943520515,33.32006369426752
+28,1.7709698692248885,33.051353503184714
+29,1.7246121547784015,34.04657643312102
+30,1.761610577820213,34.195859872611464
+31,1.7285936653234397,34.04657643312102
+32,1.6869528680849986,35.46974522292994
+33,1.6894164837090073,36.455015923566876
+34,1.6847156969604977,36.36544585987261
+35,1.678504987127462,36.455015923566876
+36,1.6358946941460772,36.99243630573248
+37,1.6700523947454562,37.83837579617835
+38,1.6715692357652505,37.569665605095544
+39,1.6500292279917723,38.05732484076433
+40,1.6027081840357202,38.95302547770701
+41,1.6359784048833665,39.35111464968153
+42,1.6054035470743848,39.968152866242036
+43,1.604127869484531,40.51552547770701
+44,1.588912450583877,40.22691082802548
+45,1.5950988052756923,40.96337579617835
+46,1.5526322521221865,42.43630573248408
+47,1.5632283292758238,42.2671178343949
+48,1.5278441237795883,43.52109872611465
+49,1.5608733839290156,43.03343949044586
+50,1.503746925645573,44.87460191082803
+51,1.5355708697798904,44.50636942675159
+52,1.4926049063919455,44.46656050955414
+53,1.4971838817474947,45.073646496815286
+54,1.4962773581219326,45.45183121019108
+55,1.467399329136891,45.11345541401274
+56,1.4867308086650386,45.41202229299363
+57,1.4850102708597852,46.25796178343949
+58,1.4599204124159115,47.17356687898089
+59,1.4499942155400658,47.482085987261144
+60,1.4286031760987203,48.14888535031847
+61,1.4068254862621332,49.49243630573248
+62,1.3884757795151632,48.54697452229299
+63,1.3719631418301041,49.87062101910828
+64,1.3593191789214019,50.50756369426752
+65,1.4154139081383967,50.517515923566876
+66,1.351789884506517,51.015127388535035
+67,1.3825372791594002,50.0
+68,1.3575056578702986,51.92078025477707
+69,1.3246925279593011,52.498009554140125
+70,1.339612803261751,52.169585987261144
+71,1.3444197716986297,52.27906050955414
+72,1.330508306147946,53.5828025477707
+73,1.2908758574230657,53.97093949044586
+74,1.3360207137788178,53.443471337579616
+75,1.2522397663942568,55.264729299363054
+76,1.297100572829034,54.110270700636946
+77,1.2584782975494482,54.81687898089172
+78,1.2801251081144733,55.13535031847134
+79,1.2693661834783614,55.01592356687898
+80,1.3058928638506846,54.2296974522293
+81,1.2813535700937746,55.5234872611465
+82,1.2704921444510198,56.0609076433121
+83,1.284829007592171,55.642914012738856
+84,1.2291330064937567,56.57842356687898
+85,1.2117739384341393,57.34474522292994
+86,1.2236582746930942,57.14570063694268
+87,1.242034708238711,57.05613057324841
+88,1.232121764854261,57.09593949044586
+89,1.211444827401714,57.5437898089172
+90,1.1932390848542476,57.91202229299363
+91,1.1922940813052427,57.90207006369427
+92,1.2242926070644597,58.807722929936304
+93,1.1768954388654915,59.15605095541401
+94,1.1684875332625808,59.03662420382165
+95,1.1666060443137103,59.96218152866242
+96,1.196403312455317,60.06170382165605
+97,1.1734215712091725,59.93232484076433
+98,1.1842217635197245,60.05175159235669
+99,1.151553297878071,60.917595541401276
+100,1.1517793699434609,60.001990445859875
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_4_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_4_Dec3.csv
new file mode 100644
index 00000000000..a9344b84406
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_4_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3257128584916424,9.952229299363058
+2,2.3682007516265675,9.952229299363058
+3,2.2990773225286203,17.70501592356688
+4,2.264329805495633,18.69028662420382
+5,2.1979098608539362,20.322452229299362
+6,2.164816665041978,22.014331210191084
+7,2.153661846355268,23.228503184713375
+8,2.1205387107885567,23.576831210191084
+9,2.0636465982267054,24.28343949044586
+10,2.0343253976979834,24.45262738853503
+11,2.003464094392813,25.19904458598726
+12,1.96862015450836,27.776671974522294
+13,1.93187928503486,27.428343949044585
+14,1.9264483383506725,27.647292993630572
+15,1.8969829674738987,28.115047770700638
+16,1.8585981502654447,29.88654458598726
+17,1.8341806891617503,30.025875796178344
+18,1.8332432007334034,30.812101910828027
+19,1.847976124970017,29.71735668789809
+20,1.8068483665490607,31.001194267515924
+21,1.808039576384672,31.011146496815286
+22,1.738753127444322,32.10589171974522
+23,1.7750636407524158,31.83718152866242
+24,1.7461367663304517,32.93192675159236
+25,1.83322019334052,31.96656050955414
+26,1.734885259039083,33.777866242038215
+27,1.7840523249024798,32.8921178343949
+28,1.7310755791937469,34.50437898089172
+29,1.7175504265317492,34.57404458598726
+30,1.7164430641064978,34.68351910828026
+31,1.7083575125712498,34.93232484076433
+32,1.6613009833985832,35.88773885350319
+33,1.6644547638619782,36.10668789808917
+34,1.682807098528382,36.13654458598726
+35,1.640875984149374,37.20143312101911
+36,1.6409729779905575,38.077229299363054
+37,1.618058241856326,38.823646496815286
+38,1.6957292078406947,37.22133757961783
+39,1.5829515859579584,39.639729299363054
+40,1.7108366861464872,37.519904458598724
+41,1.559394064982226,39.84872611464968
+42,1.5784516357312537,41.3515127388535
+43,1.5705118490632173,41.47093949044586
+44,1.5470114050397448,42.366640127388536
+45,1.5687286770267852,42.46616242038217
+46,1.5407611982078309,42.62539808917197
+47,1.5106236471492014,44.00875796178344
+48,1.5147261110840329,43.87937898089172
+49,1.4923679752714316,44.546178343949045
+50,1.455465634916998,46.02906050955414
+51,1.4969496537166036,45.64092356687898
+52,1.4505785954226353,46.6859076433121
+53,1.4663648893878718,48.49721337579618
+54,1.442742423646769,47.56170382165605
+55,1.465631609509705,47.40246815286624
+56,1.4301050529358492,47.74084394904459
+57,1.4128159193476295,48.2484076433121
+58,1.4073445827338347,48.97492038216561
+59,1.4050036380245428,48.88535031847134
+60,1.3708834139404782,49.87062101910828
+61,1.3813689635817412,50.67675159235669
+62,1.335260830107768,50.736464968152866
+63,1.3842236054171422,50.47770700636943
+64,1.3385737488983542,51.214171974522294
+65,1.339955105523395,52.03025477707006
+66,1.3358723228904092,52.3984872611465
+67,1.3150682532863252,52.219347133757964
+68,1.298680578067804,53.125
+69,1.3193801789526727,53.0453821656051
+70,1.3199887647750272,53.48328025477707
+71,1.2998607834433293,54.697452229299365
+72,1.243542980995907,55.1453025477707
+73,1.2472853394830303,55.652866242038215
+74,1.3164761556181939,53.41361464968153
+75,1.200980187980992,57.19546178343949
+76,1.2656719483387697,54.91640127388535
+77,1.2455966647263546,55.89171974522293
+78,1.2168759502423037,56.38933121019108
+79,1.2143318349388754,57.294984076433124
+80,1.2053051712406668,57.44426751592356
+81,1.206967518967428,57.19546178343949
+82,1.2005811265319775,58.051353503184714
+83,1.185360090368113,58.359872611464965
+84,1.178354038554392,59.1062898089172
+85,1.161377242036686,59.47452229299363
+86,1.134725017912069,59.166003184713375
+87,1.1645015436372939,59.47452229299363
+88,1.1320551637631313,61.13654458598726
+89,1.154139031270507,60.370222929936304
+90,1.1414722640802906,61.2062101910828
+91,1.1539799916516444,61.03702229299363
+92,1.1098731517032454,61.88296178343949
+93,1.1191980455331743,62.45023885350319
+94,1.1315414624609006,60.340366242038215
+95,1.133795601547144,62.06210191082803
+96,1.1431587516881858,61.79339171974522
+97,1.1133974167951353,62.88813694267516
+98,1.1107740766683203,62.93789808917197
+99,1.1072230339050293,63.18670382165605
+100,1.0919726733948774,63.42555732484077
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_5_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_5_Dec3.csv
new file mode 100644
index 00000000000..1458e9f3ab6
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_5_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3261282018795133,9.952229299363058
+2,2.344807527627155,9.96218152866242
+3,2.2863548758682932,17.41640127388535
+4,2.2756532802703275,18.939092356687897
+5,2.258827645307893,22.969745222929937
+6,2.195717693893773,23.347929936305732
+7,2.192596669409685,23.79578025477707
+8,2.124985895339091,24.34315286624204
+9,2.0646798937184037,25.019904458598727
+10,2.0368810360598717,25.298566878980893
+11,2.0319249349035275,25.179140127388536
+12,1.9643333535285512,26.811305732484076
+13,1.95663742578713,27.348726114649683
+14,1.8916230482660281,29.23964968152866
+15,1.8818028603389765,29.29936305732484
+16,1.927175877959865,27.199442675159236
+17,1.830762740153416,29.667595541401273
+18,1.8860216512801542,28.592754777070063
+19,1.8106606006622314,30.672770700636942
+20,1.8425343173324682,29.88654458598726
+21,1.8338072345514966,30.294585987261147
+22,1.8242379723081164,31.7078025477707
+23,1.7790103087759321,32.42436305732484
+24,1.7597520898102195,32.69307324840764
+25,1.7515804957432353,33.48925159235669
+26,1.7405321909363862,34.49442675159236
+27,1.748784697739182,34.583996815286625
+28,1.7482100937776506,35.031847133757964
+29,1.698432469064263,36.086783439490446
+30,1.684297588980122,36.46496815286624
+31,1.6979818047991224,37.3109076433121
+32,1.664109163223558,36.52468152866242
+33,1.680640135601068,38.00756369426752
+34,1.6758690708002466,37.28105095541401
+35,1.6811399201678623,38.19665605095541
+36,1.6676196376229548,37.60947452229299
+37,1.6685638291061304,39.0625
+38,1.608441377141673,40.107484076433124
+39,1.5764115297110977,41.222133757961785
+40,1.5995785749641953,39.828821656050955
+41,1.6082524744568356,41.21218152866242
+42,1.576624083670841,41.38136942675159
+43,1.5913445569907025,41.96855095541401
+44,1.539028661266254,42.82444267515923
+45,1.546350092644904,42.99363057324841
+46,1.5145688664381671,44.03861464968153
+47,1.528316251791207,44.80493630573248
+48,1.50755170727991,44.95421974522293
+49,1.5843883851531204,43.83957006369427
+50,1.4800822309627655,46.28781847133758
+51,1.426861801724525,47.780652866242036
+52,1.4513222396753396,47.46218152866242
+53,1.4141722006402957,47.59156050955414
+54,1.4617737410174814,47.37261146496815
+55,1.4214916510187137,47.95979299363057
+56,1.3889910066203706,49.29339171974522
+57,1.3659772508463282,49.53224522292994
+58,1.4268569392003831,49.24363057324841
+59,1.40575153129116,48.427547770700635
+60,1.395666372244525,49.78105095541401
+61,1.3706199204086498,51.214171974522294
+62,1.3108918754158505,51.323646496815286
+63,1.3571762340084004,52.189490445859875
+64,1.335791998608097,51.87101910828026
+65,1.341822493607831,52.19944267515923
+66,1.3240352299562685,52.886146496815286
+67,1.3069520232024465,53.43351910828026
+68,1.2876859265527907,54.05055732484077
+69,1.3076640769934198,52.56767515923567
+70,1.3046062588691711,53.98089171974522
+71,1.2838152016803717,54.16003184713376
+72,1.2680606162472137,55.10549363057325
+73,1.2609794132269112,56.29976114649681
+74,1.2345086901810518,56.041003184713375
+75,1.1715018183562407,58.0015923566879
+76,1.2568641377102798,56.91679936305732
+77,1.2096166792948535,56.55851910828026
+78,1.2855331370025684,56.80732484076433
+79,1.196938306662687,56.658041401273884
+80,1.246288017862162,56.0609076433121
+81,1.2277057174664394,57.86226114649681
+82,1.2170130523147098,58.09116242038217
+83,1.1985959790314837,57.7328821656051
+84,1.2240088479534077,57.34474522292994
+85,1.1815188162645716,58.7281050955414
+86,1.1713874613403514,59.42476114649681
+87,1.1862385899397978,59.88256369426752
+88,1.1654070209545695,59.355095541401276
+89,1.230965736944964,59.15605095541401
+90,1.1575936219494813,60.80812101910828
+91,1.1531452859283253,60.56926751592356
+92,1.1365315644604386,61.30573248407644
+93,1.1472842826205454,60.98726114649681
+94,1.1180110843318283,60.7484076433121
+95,1.1328913558060956,61.116640127388536
+96,1.109844853923579,61.932722929936304
+97,1.1469529897544035,62.14171974522293
+98,1.09671987849436,62.848328025477706
+99,1.1256488702099794,61.24601910828026
+100,1.083526035023343,63.59474522292994
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_6_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_6_Dec3.csv
new file mode 100644
index 00000000000..a128dca7178
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_False_seed_6_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.333965530820713,9.952229299363058
+2,2.357863819523222,11.514729299363058
+3,2.3073379310073365,19.934315286624205
+4,2.2724602192070833,20.949442675159236
+5,2.218626069415147,21.964570063694268
+6,2.2103775382801225,22.91998407643312
+7,2.151092839089169,22.98964968152866
+8,2.1052965852105694,23.736066878980893
+9,2.0714114160294743,23.96496815286624
+10,2.0444195300910124,24.562101910828027
+11,1.9924939422850396,25.378184713375795
+12,2.005679951351919,25.62699044585987
+13,1.9294419691061517,28.06528662420382
+14,1.940396917094091,26.940684713375795
+15,1.8970197256962964,28.463375796178344
+16,1.8960979721348756,28.06528662420382
+17,1.8577176195800684,28.891321656050955
+18,1.860651183280216,29.468550955414013
+19,1.8389720438392299,29.767117834394906
+20,1.836010532014689,30.294585987261147
+21,1.8158057032117418,30.851910828025478
+22,1.8380485773086548,30.89171974522293
+23,1.7887446606994435,31.747611464968152
+24,1.842593110291062,29.956210191082803
+25,1.7970748881625522,32.27507961783439
+26,1.790601864741866,32.822452229299365
+27,1.7773216871698951,33.5390127388535
+28,1.7710255764092608,34.524283439490446
+29,1.77255768912613,34.24562101910828
+30,1.7724094512356314,34.67356687898089
+31,1.7133402976260823,34.922372611464965
+32,1.718969932786978,35.7484076433121
+33,1.6950881944340506,35.84792993630573
+34,1.6894611887111786,36.24601910828026
+35,1.6872999037906622,36.7734872611465
+36,1.6644591776428708,37.519904458598724
+37,1.666480101597537,38.50517515923567
+38,1.6551824542367535,38.24641719745223
+39,1.639491803327184,38.544984076433124
+40,1.6195538939943739,39.689490445859875
+41,1.588538318682628,39.67953821656051
+42,1.622480962686478,40.50557324840764
+43,1.6041445557478886,41.13256369426752
+44,1.6860352443282012,40.67476114649681
+45,1.5678306711707146,42.06807324840764
+46,1.5697739359679495,42.12778662420382
+47,1.5246303445973974,42.844347133757964
+48,1.5486837511609315,43.769904458598724
+49,1.5492160730301194,43.58081210191083
+50,1.4975614319941042,45.67078025477707
+51,1.4620170927351448,45.60111464968153
+52,1.462179414026297,45.98925159235669
+53,1.47844786780655,45.65087579617835
+54,1.442201646270266,45.491640127388536
+55,1.4195317834805532,48.457404458598724
+56,1.4527172161515352,47.392515923566876
+57,1.443949482243532,47.860270700636946
+58,1.435226962824536,48.60668789808917
+59,1.4259769878569681,48.27826433121019
+60,1.4069889556070803,49.63176751592356
+61,1.4269873139205251,49.12420382165605
+62,1.3938029116126383,49.58200636942675
+63,1.3748475578939838,49.990047770700635
+64,1.4097705726410932,50.33837579617835
+65,1.4133357007032747,50.74641719745223
+66,1.3741058399722834,51.1046974522293
+67,1.304228616368239,52.945859872611464
+68,1.33787515550662,52.78662420382165
+69,1.3174102837872352,52.56767515923567
+70,1.369038693844133,53.105095541401276
+71,1.383254609290202,52.53781847133758
+72,1.3162937950176798,53.83160828025478
+73,1.2771745510162062,53.83160828025478
+74,1.3083601278863894,54.21974522292994
+75,1.2245172926574757,56.05095541401274
+76,1.2673011562626832,55.86186305732484
+77,1.286227634757947,55.85191082802548
+78,1.2477420617820352,55.56329617834395
+79,1.2857425660844062,55.38415605095541
+80,1.271236868800631,56.20023885350319
+81,1.237036626430074,56.46894904458599
+82,1.2741309013336328,55.91162420382165
+83,1.2408196087096148,57.205414012738856
+84,1.2107216609511406,57.51393312101911
+85,1.2415018199355738,57.5437898089172
+86,1.2425652047631088,57.32484076433121
+87,1.2117182570657912,58.36982484076433
+88,1.1734093226444948,58.09116242038217
+89,1.2231050843645812,58.36982484076433
+90,1.193019713565802,58.15087579617835
+91,1.3194695954110212,56.259952229299365
+92,1.174490580513219,59.60390127388535
+93,1.1756449087410217,59.60390127388535
+94,1.1538755905096698,59.48447452229299
+95,1.1530497260154433,59.96218152866242
+96,1.1471694077655767,60.340366242038215
+97,1.1617654770802541,60.08160828025478
+98,1.1586311144433963,59.90246815286624
+99,1.112465106757583,61.285828025477706
+100,1.1361416578292847,60.25079617834395
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_1_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_1_Dec3.csv
new file mode 100644
index 00000000000..936c9c021db
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3171806578423566,9.952229299363058
+2,2.3161499895107975,17.018312101910826
+3,2.2593577318130786,17.665207006369428
+4,2.224910573594889,23.20859872611465
+5,2.18152047570344,23.815684713375795
+6,2.099919057196113,24.41281847133758
+7,2.1126238661966505,24.51234076433121
+8,2.040565070832611,25.58718152866242
+9,2.0125887507845643,26.025079617834393
+10,1.976196813735233,28.453423566878982
+11,1.9502596817198832,28.035429936305732
+12,1.927351994119632,28.960987261146496
+13,1.8803515024245925,29.74721337579618
+14,1.8899626018135411,28.931130573248407
+15,1.8875222661692626,29.896496815286625
+16,1.9067413062806342,29.388933121019107
+17,1.8579178539810666,30.80214968152866
+18,1.849715954938512,31.399283439490446
+19,1.7986317280751125,32.882165605095544
+20,1.800214381734277,32.464171974522294
+21,1.788710636697757,32.92197452229299
+22,1.8054065461371356,33.14092356687898
+23,1.8051729020039746,33.767914012738856
+24,1.7801599335518612,34.394904458598724
+25,1.7726715005886782,34.46457006369427
+26,1.7787873122342832,35.07165605095541
+27,1.748221923591225,36.255971337579616
+28,1.7259355221584345,36.03702229299363
+29,1.6943521598342117,37.63933121019108
+30,1.6807940044220846,38.047372611464965
+31,1.6329102698405078,38.465366242038215
+32,1.6649996710431045,38.75398089171974
+33,1.6660041786303186,39.00278662420382
+34,1.6302533111754496,39.73925159235669
+35,1.663052435893162,40.644904458598724
+36,1.6059714555740356,41.21218152866242
+37,1.5988158276126643,41.78941082802548
+38,1.592546970980942,42.01831210191083
+39,1.5642544957482891,44.04856687898089
+40,1.6380711512960446,42.71496815286624
+41,1.5568458669504541,44.23765923566879
+42,1.519542276479636,45.28264331210191
+43,1.512171056619875,44.994028662420384
+44,1.5029737205262397,46.078821656050955
+45,1.5031975036973406,45.76035031847134
+46,1.5058311542887597,48.00955414012739
+47,1.4737037891035627,47.113853503184714
+48,1.4641765766083055,48.12898089171974
+49,1.4359541637882305,49.52229299363057
+50,1.4008346666955644,51.711783439490446
+51,1.4058067540454258,50.85589171974522
+52,1.3845661969701195,50.97531847133758
+53,1.4174281616879116,52.189490445859875
+54,1.35914263983441,52.2093949044586
+55,1.3827601139712486,52.388535031847134
+56,1.390297649013009,52.58757961783439
+57,1.35953993098751,53.3937101910828
+58,1.3281808009572849,54.65764331210191
+59,1.3550412988966438,52.65724522292994
+60,1.278298006695547,55.44386942675159
+61,1.341233622496295,54.369028662420384
+62,1.319410433055489,54.82683121019108
+63,1.3722867737909792,53.363853503184714
+64,1.3097198787768176,56.1703821656051
+65,1.2523249786370878,56.15047770700637
+66,1.3097393053352453,56.13057324840764
+67,1.2758295706882599,56.80732484076433
+68,1.2801658921181016,57.45421974522293
+69,1.2779074163193915,57.90207006369427
+70,1.2898074673239592,57.91202229299363
+71,1.2797374588668726,58.797770700636946
+72,1.2173670982099642,59.59394904458599
+73,1.2190008212806314,59.49442675159236
+74,1.2287693513426812,59.51433121019108
+75,1.1463942611293427,61.72372611464968
+76,1.2106905070839413,60.83797770700637
+77,1.2219884103270853,60.2109872611465
+78,1.2302024763101225,59.982085987261144
+79,1.1989624310450948,61.315684713375795
+80,1.1603717978592891,61.74363057324841
+81,1.17882004475138,61.6640127388535
+82,1.16731097060404,62.00238853503185
+83,1.158657202295437,62.65923566878981
+84,1.1463340042503016,62.93789808917197
+85,1.1529374137805526,62.679140127388536
+86,1.144753782612503,63.16679936305732
+87,1.122070068766357,63.86345541401274
+88,1.1398101665411786,63.35589171974522
+89,1.1537133861499227,63.42555732484077
+90,1.1640828062014974,63.55493630573248
+91,1.1240035363822987,63.76393312101911
+92,1.107066699653674,63.6046974522293
+93,1.1787660030802345,63.266321656050955
+94,1.0949138930648754,64.49044585987261
+95,1.1171948321306022,64.5203025477707
+96,1.0721901006000056,65.45581210191082
+97,1.081814701769762,65.45581210191082
+98,1.0859216774345204,64.99800955414013
+99,1.0919327052535526,65.09753184713375
+100,1.0677139580629433,65.56528662420382
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_2_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_2_Dec3.csv
new file mode 100644
index 00000000000..2992b820f37
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.317762330838829,9.952229299363058
+2,2.314884289055114,14.798964968152866
+3,2.2610698034808894,19.635748407643312
+4,2.2232258319854736,23.138933121019107
+5,2.17917364266268,23.875398089171973
+6,2.1594115981630457,24.15406050955414
+7,2.1103991991395405,23.616640127388536
+8,2.0503128470888563,25.268710191082803
+9,1.9859518837776913,25.766321656050955
+10,1.9461528472839646,27.328821656050955
+11,1.9044560497733438,28.602707006369428
+12,1.8935849955127497,28.871417197452228
+13,1.8654418561109312,30.473726114649683
+14,1.9405074727003742,27.328821656050955
+15,1.9124419970117557,28.523089171974522
+16,1.8071222297704903,31.329617834394906
+17,1.8153368265006193,31.269904458598727
+18,1.78618532229381,32.98168789808917
+19,1.86611772190993,30.782245222929937
+20,1.7854131938545568,32.8921178343949
+21,1.7693518445749952,33.23049363057325
+22,1.7625077446554875,34.51433121019108
+23,1.7021335583583566,35.54936305732484
+24,1.7995659705180271,34.96218152866242
+25,1.7042453334589673,35.87778662420382
+26,1.72859872222706,35.06170382165605
+27,1.6989239552977737,36.982484076433124
+28,1.6610256775169616,38.28622611464968
+29,1.658191971718126,38.58479299363057
+30,1.6666244632878882,38.37579617834395
+31,1.6432029570743536,39.80891719745223
+32,1.6298912087823176,40.45581210191083
+33,1.6140697716148036,40.644904458598724
+34,1.609640065272143,41.02308917197452
+35,1.5749763910937462,42.41640127388535
+36,1.573251466082919,43.41162420382165
+37,1.4838618184350858,45.21297770700637
+38,1.5436649451589888,43.88933121019108
+39,1.4995060620034577,44.38694267515923
+40,1.5417871862460093,44.904458598726116
+41,1.4933777174372582,45.551353503184714
+42,1.566203020940161,45.2328821656051
+43,1.468080917741083,47.641321656050955
+44,1.4819035097292275,46.835191082802545
+45,1.4380261898040771,49.05453821656051
+46,1.4048829276090975,49.52229299363057
+47,1.4363270975222253,49.94028662420382
+48,1.4055778395598102,50.12937898089172
+49,1.4248574000255319,49.77109872611465
+50,1.363719998271602,52.92595541401274
+51,1.3663171226051962,52.31886942675159
+52,1.3795468370625927,52.358678343949045
+53,1.4143511330246166,52.080015923566876
+54,1.3969739614778263,52.776671974522294
+55,1.372708792899065,53.32404458598726
+56,1.3491569142432729,53.164808917197455
+57,1.3286981138454121,53.94108280254777
+58,1.3460517909116805,53.951035031847134
+59,1.3156961027983647,55.40406050955414
+60,1.336571980433859,55.21496815286624
+61,1.3230574514455855,55.82205414012739
+62,1.314771592617035,56.02109872611465
+63,1.293406800479646,56.50875796178344
+64,1.2796124922242134,56.05095541401274
+65,1.250173754373174,57.016321656050955
+66,1.2854488924810081,56.658041401273884
+67,1.2853171366035558,57.215366242038215
+68,1.2440201347800577,57.95183121019108
+69,1.245103023993741,57.75278662420382
+70,,10.011942675159236
+71,,10.011942675159236
+72,,10.011942675159236
+73,,10.011942675159236
+74,,10.011942675159236
+75,,10.011942675159236
+76,,10.011942675159236
+77,,10.011942675159236
+78,,10.011942675159236
+79,,10.011942675159236
+80,,10.011942675159236
+81,,10.011942675159236
+82,,10.011942675159236
+83,,10.011942675159236
+84,,10.011942675159236
+85,,10.011942675159236
+86,,10.011942675159236
+87,,10.011942675159236
+88,,10.011942675159236
+89,,10.011942675159236
+90,,10.011942675159236
+91,,10.011942675159236
+92,,10.011942675159236
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_3_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_3_Dec3.csv
new file mode 100644
index 00000000000..f5b94ee32bb
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fedavg_varEpoch_True_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3298327695032595,9.952229299363058
+2,2.35711239097984,9.952229299363058
+3,2.291669001245195,17.14769108280255
+4,2.2302437193074804,22.691082802547772
+5,2.184029919326685,21.128582802547772
+6,2.153707992499042,23.86544585987261
+7,2.1008470483646273,24.193869426751593
+8,2.048969163256846,25.87579617834395
+9,2.0274119126568935,26.054936305732483
+10,1.9644073149201218,26.801353503184714
+11,1.9341991433672086,28.662420382165607
+12,1.9016002340681235,29.418789808917197
+13,1.8669152054817053,29.697452229299362
+14,1.9080346017886118,28.57285031847134
+15,1.8138348258984316,31.27985668789809
+16,1.7891945064447488,31.658041401273884
+17,1.7744468351837936,32.41441082802548
+18,1.8425328420225981,30.89171974522293
+19,1.8102006479433388,32.38455414012739
+20,1.7283429195926447,33.5390127388535
+21,1.7510857855438426,33.81767515923567
+22,1.811167813410425,33.14092356687898
+23,1.7564858767637022,33.638535031847134
+24,1.7168584644414817,35.42993630573248
+25,1.7260042520085717,35.98726114649681
+26,1.6749096364732001,36.116640127388536
+27,1.7472501727426129,36.05692675159236
+28,1.7095191311684383,37.33081210191083
+29,1.7028017492051337,37.818471337579616
+30,1.6890203732593803,37.44028662420382
+31,1.6732367603642166,38.485270700636946
+32,1.6781796103070497,38.11703821656051
+33,1.7001907119325772,38.55493630573248
+34,1.5912069256897945,40.91361464968153
+35,1.6340639568438196,41.90883757961783
+36,1.6579018170666542,39.3312101910828
+37,1.6246151726716642,42.57563694267516
+38,1.6399096037931502,42.67515923566879
+39,1.5407003194663176,45.17316878980892
+40,1.5602316780454795,44.317277070063696
+41,1.5884619070466157,44.69546178343949
+42,1.509517999970989,47.5218949044586
+43,1.5310269837166852,45.59116242038217
+44,1.5204646594964775,47.17356687898089
+45,1.5371819628272088,46.725716560509554
+46,1.524842061814229,46.914808917197455
+47,1.4470269535757174,48.71616242038217
+48,1.496143416234642,48.74601910828026
+49,1.4745185261319398,49.49243630573248
+50,1.4087872277399538,51.89092356687898
+51,1.4783683787485598,50.10947452229299
+52,1.4290137222618053,52.26910828025478
+53,1.4285061594786916,52.159633757961785
+54,1.467561481864589,50.61703821656051
+55,1.3659306620336642,51.154458598726116
+56,1.4318216856877515,51.492834394904456
+57,1.3711483091305776,52.557722929936304
+58,1.3645690558062997,53.79179936305732
+59,1.4074680896321679,52.388535031847134
+60,1.3630276246435324,54.369028662420384
+61,1.4020400199161214,53.49323248407644
+62,1.3121037175700923,54.866640127388536
+63,1.3514161778103775,54.40883757961783
+64,1.3526850111165625,54.896496815286625
+65,1.3544097182097707,54.57802547770701
+66,1.3496999767175906,55.24482484076433
+67,1.3490746241466256,55.10549363057325
+68,1.3052261764076865,55.623009554140125
+69,1.3361587680069504,56.14052547770701
+70,1.2861725703166549,56.797372611464965
+71,1.2735075438098542,57.245222929936304
+72,1.3052819230753905,56.74761146496815
+73,1.2966536302475413,56.7078025477707
+74,1.2623032684538775,56.240047770700635
+75,1.171484485173681,58.21058917197452
+76,1.2488224373501577,58.220541401273884
+77,1.252366475618569,58.638535031847134
+78,1.2130101835651763,58.59872611464968
+79,1.2498150953821316,59.28542993630573
+80,1.1988909297687993,59.27547770700637
+81,1.2363772616264925,59.07643312101911
+82,1.2290112493903773,59.554140127388536
+83,1.2149650689902578,60.56926751592356
+84,1.2049139984853707,60.19108280254777
+85,1.176341578459284,60.76831210191083
+86,1.186043937115153,60.41003184713376
+87,1.201699774736052,60.71855095541401
+88,1.1894946064159369,60.43988853503185
+89,1.1902627257784462,60.80812101910828
+90,1.1788726840049597,61.27587579617835
+91,1.190172308569501,61.43511146496815
+92,1.1787632005229878,61.5843949044586
+93,1.173830801134656,61.96257961783439
+94,1.1621336693976336,61.96257961783439
+95,1.1797626701889523,61.285828025477706
+96,1.150402984421724,62.54976114649681
+97,1.1271544896113646,62.738853503184714
+98,1.1416426692039343,63.326035031847134
+99,1.160589372656148,63.28622611464968
+100,1.1250231801324588,63.03742038216561
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_1_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_1_Dec3.csv
new file mode 100644
index 00000000000..7927040090a
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.315104797387579,15.10748407643312
+2,2.3260210638592955,16.580414012738853
+3,2.28365945967899,17.018312101910826
+4,2.2111056853251854,17.406449044585987
+5,2.1490962786279666,17.57563694267516
+6,2.1127017402345207,17.963773885350317
+7,2.0845411886834793,18.003582802547772
+8,2.0617601188125123,18.043391719745223
+9,2.020969150931972,18.998805732484076
+10,1.9786929241411246,21.407245222929937
+11,1.9331608539933611,23.01950636942675
+12,1.8941924177157652,25.019904458598727
+13,1.8944581936878764,24.45262738853503
+14,1.8332013514391177,28.274283439490446
+15,1.825117329882968,28.523089171974522
+16,1.8080959745273468,28.55294585987261
+17,1.7686849247877765,29.478503184713375
+18,1.7711238686446171,29.667595541401273
+19,1.7472322678110401,29.826831210191084
+20,1.7114847898483276,30.951433121019107
+21,1.7206215319360139,30.82205414012739
+22,1.728438775250866,30.772292993630572
+23,1.6870678807519803,31.66799363057325
+24,1.6711741526415393,31.916799363057326
+25,1.65371130226524,32.10589171974522
+26,1.6629289115310475,32.47412420382165
+27,1.6791106432106844,32.75278662420382
+28,1.6610858334097893,33.30015923566879
+29,1.6405503499280116,33.73805732484077
+30,1.6479292804268515,33.89729299363057
+31,1.6095530736218593,34.80294585987261
+32,1.5938689685930871,35.031847133757964
+33,1.5989497467211098,35.15127388535032
+34,1.56522613498056,36.37539808917197
+35,1.5489937499829918,36.72372611464968
+36,1.574865690462149,37.11186305732484
+37,1.5393632088497187,38.067277070063696
+38,1.521383968887815,38.913216560509554
+39,1.5234160575137776,39.23168789808917
+40,1.4854691681588532,40.445859872611464
+41,1.4812940321150858,40.25676751592356
+42,1.5320029008160732,39.0625
+43,1.4824049670225496,41.09275477707006
+44,1.4738725636415422,41.30175159235669
+45,1.4329258567967993,42.24721337579618
+46,1.4778273105621338,41.34156050955414
+47,1.4430260255837897,42.96377388535032
+48,1.4422416504780957,42.71496815286624
+49,1.414145255544383,44.46656050955414
+50,1.3545647214172751,47.57165605095541
+51,1.3608640394393046,46.78542993630573
+52,1.3950842877102505,45.720541401273884
+53,1.3846154714086254,45.889729299363054
+54,1.3847015200147204,46.40724522292994
+55,1.3826055033191753,46.307722929936304
+56,1.3340929427723975,48.676353503184714
+57,1.32647246008466,49.0843949044586
+58,1.3103613648444983,49.8109076433121
+59,1.296227425147014,50.318471337579616
+60,1.2762422314874686,51.33359872611465
+61,1.2567550790537694,52.84633757961783
+62,1.252274065640322,52.73686305732484
+63,1.2559963263523806,52.76671974522293
+64,1.2548289541985578,53.17476114649681
+65,1.2425169193061294,53.41361464968153
+66,1.3033622453926474,50.70660828025478
+67,1.2338150367615328,53.84156050955414
+68,1.1895141430721161,56.488853503184714
+69,1.1981907456543794,56.34952229299363
+70,1.2134540092413593,55.36425159235669
+71,1.1679677150811358,57.31488853503185
+72,1.1554026804911863,58.29020700636943
+73,1.1384975348308588,59.21576433121019
+74,1.1407738848097007,59.056528662420384
+75,1.0894177806605199,61.594347133757964
+76,1.1283674281873521,59.60390127388535
+77,1.1309005526980018,59.753184713375795
+78,1.130795302284751,60.330414012738856
+79,1.1060485744931896,60.728503184713375
+80,1.087908006397782,61.285828025477706
+81,1.0822441801903353,62.121815286624205
+82,1.0626317892864252,62.848328025477706
+83,1.0704573123318375,62.24124203821656
+84,1.0789131301983146,62.60947452229299
+85,1.0509935659208116,63.35589171974522
+86,1.0540300641849543,63.73407643312102
+87,1.0746613870001143,62.07205414012739
+88,1.053147126534942,63.2265127388535
+89,1.01313672779472,64.8984872611465
+90,1.0061024393245672,65.30652866242038
+91,0.9811442042611966,66.07285031847134
+92,0.9904579748013976,66.3515127388535
+93,0.9867918635629545,66.77945859872611
+94,0.9784311063730033,66.85907643312102
+95,0.9937766877708921,66.12261146496816
+96,0.9783846246209115,66.50079617834395
+97,0.9609432448247436,66.77945859872611
+98,0.9480376877602498,67.89410828025478
+99,0.9474712838033202,68.11305732484077
+100,0.9404911079983802,68.16281847133757
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_2_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_2_Dec3.csv
new file mode 100644
index 00000000000..f0f8dc0427a
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3210621821652553,9.952229299363058
+2,2.33184570871341,10.4796974522293
+3,2.285424016843176,17.15764331210191
+4,2.216387540671476,16.978503184713375
+5,2.1618236409630747,17.456210191082803
+6,2.117807229613043,17.63535031847134
+7,2.0862768858101717,17.943869426751593
+8,2.052160153723067,18.670382165605094
+9,2.004997902615055,19.844745222929937
+10,1.9576816930892362,23.85549363057325
+11,1.9497562031837026,22.671178343949045
+12,1.9147363680942802,25.895700636942674
+13,1.8921080691039942,25.87579617834395
+14,1.8692180715548765,27.24920382165605
+15,1.8484045282291,27.746815286624205
+16,1.8248192216180692,28.174761146496817
+17,1.7949494958683183,29.667595541401273
+18,1.7923618517104227,30.095541401273884
+19,1.766240251292089,30.10549363057325
+20,1.7612026140188715,30.254777070063696
+21,1.7405842535055367,30.82205414012739
+22,1.7262152425802437,31.429140127388536
+23,1.6991300301946652,31.69785031847134
+24,1.70669464244964,31.568471337579616
+25,1.6737710875310716,32.742834394904456
+26,1.6802855805986245,32.52388535031847
+27,1.653413758156406,33.30015923566879
+28,1.6508483962648233,33.190684713375795
+29,1.6394462927131896,33.548964968152866
+30,1.633474069036496,33.608678343949045
+31,1.5919016812257707,35.80812101910828
+32,1.6024055313912167,34.25557324840764
+33,1.584324297631622,36.49482484076433
+34,1.5568788416066748,36.75358280254777
+35,1.562315649287716,37.13176751592356
+36,1.5686827396890919,37.38057324840764
+37,1.5444498677162608,38.05732484076433
+38,1.5371561202274007,38.47531847133758
+39,1.5230295923864765,39.00278662420382
+40,1.5275894449015333,39.609872611464965
+41,1.4716827877008232,40.644904458598724
+42,1.4913360131014683,40.42595541401274
+43,1.4770933473186127,40.7046178343949
+44,1.4334840425260507,41.948646496815286
+45,1.45891783571547,41.44108280254777
+46,1.4399281884454618,42.15764331210191
+47,1.4804486112230142,40.92356687898089
+48,1.409187941034888,43.41162420382165
+49,1.4024751224335592,44.22770700636943
+50,1.3561452687925595,46.12858280254777
+51,1.3493062341289155,46.48686305732484
+52,1.3766252531367502,45.1234076433121
+53,1.3606374461180086,46.138535031847134
+54,1.3750066157359226,45.630971337579616
+55,1.3435126125432884,46.45700636942675
+56,1.3281810670901255,47.58160828025478
+57,1.3138972482863505,48.427547770700635
+58,1.2981571650049488,49.233678343949045
+59,1.3231063139666417,47.96974522292994
+60,1.2962356209754944,49.80095541401274
+61,1.2769347615302749,49.930334394904456
+62,1.266708990570846,51.02507961783439
+63,1.261244315250664,51.23407643312102
+64,1.2537907696073982,52.517914012738856
+65,1.2409277471007816,52.65724522292994
+66,1.2238047760762987,53.55294585987261
+67,1.2231052369828437,53.25437898089172
+68,1.22216305003804,54.01074840764331
+69,1.211393605371949,54.697452229299365
+70,1.2206465051432325,54.21974522292994
+71,1.1765960253727663,55.92157643312102
+72,1.201137514251053,55.75238853503185
+73,1.1771395806294338,56.568471337579616
+74,1.152673157157412,56.857085987261144
+75,1.113830071725663,58.86743630573248
+76,1.1368588482498363,57.75278662420382
+77,1.1954587375282482,56.658041401273884
+78,1.1282154033138494,58.70820063694268
+79,1.127738923783515,58.67834394904459
+80,1.1228320909913179,59.09633757961783
+81,1.1120972773831361,59.67356687898089
+82,1.0855386572278989,60.12141719745223
+83,1.065429972994859,61.26592356687898
+84,1.0545014663107077,61.74363057324841
+85,1.0792869120646433,61.116640127388536
+86,1.0788076618674454,60.957404458598724
+87,1.0786574023544409,61.26592356687898
+88,1.0600148374867286,61.88296178343949
+89,1.0495036885996534,62.708996815286625
+90,1.0305332298491412,63.18670382165605
+91,1.043065076421021,63.067277070063696
+92,1.040035002930149,63.25636942675159
+93,1.0177269016101862,64.30135350318471
+94,1.0120814822282,64.53025477707007
+95,1.027845085806148,64.01273885350318
+96,0.9952852346335247,64.90843949044586
+97,1.029985146537708,64.3312101910828
+98,0.9820650667901252,66.33160828025478
+99,0.9698017209198824,66.3017515923567
+100,0.9851367431841079,65.54538216560509
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_3_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_3_Dec3.csv
new file mode 100644
index 00000000000..e74d55c43e9
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3199906273252644,10.619028662420382
+2,2.344547958131049,10.778264331210192
+3,2.3331558400658285,17.665207006369428
+4,2.246501372877959,17.486066878980893
+5,2.1758382927839923,17.764729299363058
+6,2.1556734894491303,17.376592356687897
+7,2.092506854397476,18.36186305732484
+8,2.085138530488227,18.172770700636942
+9,2.0268479206000163,18.431528662420384
+10,1.9983871279248766,19.038614649681527
+11,1.9589628429169867,20.989251592356688
+12,1.9364035516787486,23.556926751592357
+13,1.8877565503879716,26.771496815286625
+14,1.8686993828245029,27.53781847133758
+15,1.829021926138811,28.78184713375796
+16,1.819847058338724,29.45859872611465
+17,1.8185040411675812,28.861464968152866
+18,1.8142925721065255,29.428742038216562
+19,1.7618285698495852,30.59315286624204
+20,1.7464169635894193,30.76234076433121
+21,1.735921292547967,31.100716560509554
+22,1.7567533846873387,30.354299363057326
+23,1.6955365139967318,32.13574840764331
+24,1.6953731911956884,32.02627388535032
+25,1.682507535454574,32.464171974522294
+26,1.671998845543831,32.93192675159236
+27,1.6512294703987753,32.792595541401276
+28,1.6487934490677658,33.379777070063696
+29,1.625056453571198,33.68829617834395
+30,1.6340319457327483,33.6484872611465
+31,1.61326921213964,34.23566878980892
+32,1.577061002421531,34.79299363057325
+33,1.5765688100438209,34.922372611464965
+34,1.582812701820568,35.758359872611464
+35,1.5735228076861922,36.007165605095544
+36,1.536245237490174,37.07205414012739
+37,1.526554007439097,36.703821656050955
+38,1.5475337429411093,37.97770700636943
+39,1.541651898888266,37.77866242038217
+40,1.5187541231228288,38.31608280254777
+41,1.4959593449428583,39.19187898089172
+42,1.51339887965257,38.61464968152866
+43,1.5110007334666646,39.64968152866242
+44,1.489702357608042,40.216958598726116
+45,1.4990559990998287,39.76910828025478
+46,1.4955920064525239,40.644904458598724
+47,1.4736669336914257,40.93351910828026
+48,1.4570230070952397,41.55055732484077
+49,1.4647515123816812,41.24203821656051
+50,1.3807958835249494,44.64570063694268
+51,1.435878952597357,41.9187898089172
+52,1.4274825047535502,42.87420382165605
+53,1.4594915862296038,40.88375796178344
+54,1.3849158879298313,44.8546974522293
+55,1.401944393564941,44.25756369426752
+56,1.374998960525367,45.491640127388536
+57,1.3725914264180858,45.45183121019108
+58,1.3461277257105349,46.805334394904456
+59,1.3530224751514994,46.466958598726116
+60,1.3793465635579103,45.98925159235669
+61,1.3490510252630634,47.223328025477706
+62,1.329806331995946,48.258359872611464
+63,1.31005409720597,48.69625796178344
+64,1.3081831484083917,48.91520700636943
+65,1.3345957178219108,48.228503184713375
+66,1.3011915357249557,50.13933121019108
+67,1.2806591683891928,50.80613057324841
+68,1.2669797847225408,51.40326433121019
+69,1.2615591021859722,52.169585987261144
+70,1.2444968781653483,52.64729299363057
+71,1.2321586593700822,53.71218152866242
+72,1.2470663474623565,53.105095541401276
+73,1.2735343560291703,52.58757961783439
+74,1.2208911431063512,54.48845541401274
+75,1.1546592131541793,58.051353503184714
+76,1.1697419126322315,57.67316878980892
+77,1.1632610483534018,57.91202229299363
+78,1.1576539851297998,57.832404458598724
+79,1.1653700057108691,57.34474522292994
+80,1.1688612270507084,57.68312101910828
+81,1.1671629255744302,58.07125796178344
+82,1.1663920051732641,57.56369426751592
+83,1.1383825912597074,58.966958598726116
+84,1.104478851245467,60.9375
+85,1.0837610861298386,61.902866242038215
+86,1.0982752461342296,61.455015923566876
+87,1.0970012219088852,60.27070063694268
+88,1.1096454050130904,60.001990445859875
+89,1.0982850023136017,61.04697452229299
+90,1.060265708501172,62.65923566878981
+91,1.0616325682895198,62.54976114649681
+92,1.0523872379284755,63.25636942675159
+93,1.031965898480385,63.83359872611465
+94,1.0597132402620497,62.99761146496815
+95,1.019922460720038,64.68949044585987
+96,1.0094370826794083,64.8984872611465
+97,1.0614238347217535,62.45023885350319
+98,1.010189239006893,65.01791401273886
+99,0.9923610463263882,65.67476114649682
+100,1.0035776275738029,65.45581210191082
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_4_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_4_Dec3.csv
new file mode 100644
index 00000000000..2e3771ee303
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_4_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3265080376035847,10.788216560509554
+2,2.348465722077971,10.021894904458598
+3,2.3260630741240873,16.789410828025478
+4,2.2540617824360063,16.73964968152866
+5,2.1588023407444075,17.67515923566879
+6,2.1412409270644948,17.625398089171973
+7,2.1075834347184297,17.914012738853504
+8,2.070081549085629,18.19267515923567
+9,2.0364567489381047,18.630573248407643
+10,1.9959108730789963,20.033837579617835
+11,1.976537163090554,22.143710191082803
+12,1.9260592301180408,25.009952229299362
+13,1.8922959573709281,27.816480891719745
+14,1.8673124624665376,27.63734076433121
+15,1.8449549530721774,29.120222929936304
+16,1.8271800962982663,29.14012738853503
+17,1.7842064040481664,29.856687898089174
+18,1.7909650066096312,30.005971337579616
+19,1.7604795990476183,30.463773885350317
+20,1.7514672803271347,30.7921974522293
+21,1.7644758907852658,30.712579617834393
+22,1.7233453404371906,31.140525477707005
+23,1.7312301989573582,31.30971337579618
+24,1.7021149062806633,31.79737261146497
+25,1.6876605354296934,31.857085987261147
+26,1.704269173038993,32.11584394904459
+27,1.694101817288976,32.55374203821656
+28,1.6707786465906034,32.68312101910828
+29,1.637502833536476,32.822452229299365
+30,1.6364231891692824,33.42953821656051
+31,1.61962623656935,34.056528662420384
+32,1.6140485758994036,34.355095541401276
+33,1.5899127592706377,34.66361464968153
+34,1.593933606603343,34.51433121019108
+35,1.5938462056931417,35.46974522292994
+36,1.585784589409069,35.788216560509554
+37,1.579340593070741,36.007165605095544
+38,1.569418361232539,36.733678343949045
+39,1.54916065665567,37.11186305732484
+40,1.5336756782167276,37.52985668789809
+41,1.5171471667137875,38.13694267515923
+42,1.535977671100835,37.7687101910828
+43,1.5165299982022329,38.84355095541401
+44,1.4896786152177555,39.76910828025478
+45,1.4839063579109824,40.276671974522294
+46,1.4753575742624367,40.48566878980892
+47,1.4727329835770235,40.694665605095544
+48,1.4626605062727716,41.24203821656051
+49,1.4473735777435788,41.9187898089172
+50,1.3791278714586974,45.05374203821656
+51,1.4104657013704822,43.30214968152866
+52,1.4204856643251553,43.26234076433121
+53,1.4362682225597891,43.24243630573248
+54,1.3759325788279249,46.20820063694268
+55,1.389002083213466,46.048964968152866
+56,1.3822320980630862,45.25278662420382
+57,1.370627620417601,46.05891719745223
+58,1.3608799367953257,47.083996815286625
+59,1.3526695108717415,48.03941082802548
+60,1.3471092122375585,47.641321656050955
+61,1.3139577196661834,49.402866242038215
+62,1.3086634126438457,49.69148089171974
+63,1.3161848722749454,49.32324840764331
+64,1.2787934048160625,50.77627388535032
+65,1.2920136911094569,50.75636942675159
+66,1.2558282165770318,52.517914012738856
+67,1.2346507417168586,53.48328025477707
+68,1.2162883520885637,54.38893312101911
+69,1.210828943617025,55.065684713375795
+70,1.19645188568504,55.39410828025478
+71,1.1756404296607728,56.66799363057325
+72,1.1875291595793074,56.29976114649681
+73,1.1752315569835103,57.05613057324841
+74,1.1564692847288338,58.379777070063696
+75,1.1003052770711814,60.53941082802548
+76,1.1482556891289486,58.25039808917197
+77,1.1374990389605237,58.69824840764331
+78,1.1148605012589958,59.68351910828026
+79,1.102874192082958,60.360270700636946
+80,1.1094279923256796,60.05175159235669
+81,1.0604454354875406,62.54976114649681
+82,1.1005184616252874,61.04697452229299
+83,1.1158332672848064,60.90764331210191
+84,1.0887541801306853,61.65406050955414
+85,1.0663990082254835,62.66918789808917
+86,1.0550837494005822,62.97770700636943
+87,1.030121976023267,64.49044585987261
+88,1.0179227727233984,64.7093949044586
+89,1.0258066160663677,64.09235668789809
+90,1.0007069847386354,65.53542993630573
+91,0.9889320700791231,65.85390127388536
+92,0.9922785493218975,65.61504777070064
+93,0.9867820751135516,66.13256369426752
+94,1.0140298384769706,65.21695859872611
+95,0.9563467168504265,67.50597133757962
+96,0.9638854029831613,66.90883757961784
+97,0.9629493116573163,66.88893312101911
+98,0.9483788784142513,67.71496815286625
+99,0.9291016113985876,68.08320063694268
+100,0.9563307762145996,67.35668789808918
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_5_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_5_Dec3.csv
new file mode 100644
index 00000000000..194e4971654
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_5_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.3209229700124947,9.952229299363058
+2,2.3369239348514825,17.396496815286625
+3,2.2842304569900413,17.21735668789809
+4,2.21466275081513,17.60549363057325
+5,2.166867366262302,17.80453821656051
+6,2.121183775792456,17.963773885350317
+7,2.086550834831918,18.172770700636942
+8,2.052600133950543,18.16281847133758
+9,2.0159612894058228,20.093550955414013
+10,1.9738247181959212,21.964570063694268
+11,1.9507204514400216,24.37300955414013
+12,1.9253248720412042,24.93033439490446
+13,1.876286070817595,28.284235668789808
+14,1.8712343714039796,27.587579617834393
+15,1.8379872908258135,29.050557324840764
+16,1.8170565784357156,29.189888535031848
+17,1.7929996730415685,29.408837579617835
+18,1.796822648898811,29.528264331210192
+19,1.7475147930679806,30.742436305732483
+20,1.7601069044914974,30.264729299363058
+21,1.7533337864906164,30.70262738853503
+22,1.712155247190196,30.7921974522293
+23,1.683953383925614,31.47890127388535
+24,1.6729382565067072,31.976512738853504
+25,1.6800418401220043,32.27507961783439
+26,1.665586402461787,32.434315286624205
+27,1.65294974472872,33.09116242038217
+28,1.6293529142999346,33.01154458598726
+29,1.6236198601449372,33.25039808917197
+30,1.6133419981428012,34.414808917197455
+31,1.6124947055889542,34.27547770700637
+32,1.6018111918382585,35.390127388535035
+33,1.6094300549501066,36.03702229299363
+34,1.576545922619522,36.116640127388536
+35,1.5640958570371009,37.11186305732484
+36,1.5333297761382572,37.62937898089172
+37,1.5432646722550605,38.077229299363054
+38,1.5308068155483077,38.24641719745223
+39,1.5279333948329756,39.09235668789809
+40,1.5197120851771846,38.236464968152866
+41,1.4876148723492957,40.445859872611464
+42,1.4849564095211636,40.14729299363057
+43,1.4716567681853179,40.833996815286625
+44,1.4575075138906004,41.978503184713375
+45,1.453014097395976,42.07802547770701
+46,1.4246623121249449,43.45143312101911
+47,1.4436965945419993,42.794585987261144
+48,1.4189290886471986,44.21775477707006
+49,1.4225328302687141,43.83957006369427
+50,1.3389827066166387,47.840366242038215
+51,1.379874581743957,45.75039808917197
+52,1.3581095246752357,47.024283439490446
+53,1.3541999409912497,47.00437898089172
+54,1.3563067419513775,47.54179936305732
+55,1.3600461930985663,47.442277070063696
+56,1.324563169934947,48.91520700636943
+57,1.327215452482746,48.86544585987261
+58,1.3110638321584958,49.72133757961783
+59,1.3044206264672007,50.0796178343949
+60,1.2880814956251982,50.796178343949045
+61,1.2947004558933768,50.32842356687898
+62,1.2739049837847425,52.14968152866242
+63,1.2178445253402563,53.97093949044586
+64,1.254139494744076,53.0453821656051
+65,1.2230704183791095,53.93113057324841
+66,1.2031940927930698,55.02587579617835
+67,1.2131105767693489,54.369028662420384
+68,1.175433565856545,56.36942675159236
+69,1.1799361474195105,56.11066878980892
+70,1.194132591508756,55.702627388535035
+71,1.1459354367225794,57.87221337579618
+72,1.155981286316161,57.42436305732484
+73,1.143575815258512,57.98168789808917
+74,1.1162095984835534,59.57404458598726
+75,1.0711976726343677,61.21616242038217
+76,1.0999910865619684,59.90246815286624
+77,1.084553015839522,60.977308917197455
+78,1.1089243072613029,59.972133757961785
+79,1.060910107223851,61.83320063694268
+80,1.0797623972983876,60.917595541401276
+81,1.08508862963148,61.06687898089172
+82,1.0719293765960984,61.43511146496815
+83,1.0851415634914567,61.285828025477706
+84,1.0568338359237477,62.19148089171974
+85,1.0207197089104136,63.883359872611464
+86,1.0314952021191834,63.36584394904459
+87,1.0199989983989934,63.853503184713375
+88,0.9930964541283382,65.20700636942675
+89,0.9806179882614476,66.03304140127389
+90,0.9833162180177725,66.09275477707007
+91,1.0059637283063998,64.42078025477707
+92,1.0217062663880123,64.83877388535032
+93,0.9463275447013272,67.04816878980891
+94,0.9653334207595534,66.82921974522293
+95,0.9626150518465953,66.66998407643312
+96,0.9285611981039594,67.77468152866243
+97,0.9502406746718535,67.17754777070064
+98,0.9297696989812668,67.98367834394904
+99,0.9319639084445444,68.01353503184713
+100,0.9144133416710386,68.4812898089172
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_6_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_6_Dec3.csv
new file mode 100644
index 00000000000..2be31cf9e27
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_False_seed_6_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.323170036267323,11.29578025477707
+2,2.3476749195414746,10.738455414012739
+3,2.3094645518406183,16.968550955414013
+4,2.2170605537997687,17.24721337579618
+5,2.1648550094312924,17.585589171974522
+6,2.1258710402591974,17.983678343949045
+7,2.0889906420069897,18.13296178343949
+8,2.0533471031553425,17.87420382165605
+9,2.0173369266424968,18.81966560509554
+10,1.980418455828527,21.74562101910828
+11,1.9515831774207437,23.387738853503183
+12,1.9255661205121666,24.004777070063696
+13,1.8995675524328923,26.263933121019107
+14,1.9340127812828987,23.46735668789809
+15,1.8692498191906388,26.53264331210191
+16,1.867427232918466,26.642117834394906
+17,1.8435813621350914,27.27906050955414
+18,1.8188765466592873,28.423566878980893
+19,1.7816400383688082,29.777070063694268
+20,1.7895047786129508,29.279458598726116
+21,1.7674286897015419,29.926353503184714
+22,1.736599068732778,30.553343949044585
+23,1.7387556164128006,30.583200636942674
+24,1.7111573933036464,31.369426751592357
+25,1.7091061165378352,31.429140127388536
+26,1.7092156098906401,31.886942675159236
+27,1.6960373175371983,32.33479299363057
+28,1.6637079601834535,33.61863057324841
+29,1.643879387029417,33.65843949044586
+30,1.6360393899261572,34.583996815286625
+31,1.6251435925246804,34.524283439490446
+32,1.6190608398170228,35.25079617834395
+33,1.6384300031479757,35.867834394904456
+34,1.5966422125032753,36.74363057324841
+35,1.6017811814690852,37.11186305732484
+36,1.5684013435035755,37.72890127388535
+37,1.5735089444810417,37.62937898089172
+38,1.5741873691036443,37.37062101910828
+39,1.5492727900766263,37.649283439490446
+40,1.5282463905917612,39.50039808917197
+41,1.5363738620357148,39.32125796178344
+42,1.5198387636500559,39.20183121019108
+43,1.5322043242727874,39.32125796178344
+44,1.488476131372391,40.694665605095544
+45,1.5129829660342757,40.29657643312102
+46,1.468661473055554,41.580414012738856
+47,1.4458467952764718,42.49601910828026
+48,1.4736575670303054,41.38136942675159
+49,1.4428180296709583,43.30214968152866
+50,1.3852857176665287,44.53622611464968
+51,1.3963288873623891,43.62062101910828
+52,1.4216365214366062,43.341958598726116
+53,1.4051692007453578,44.068471337579616
+54,1.4080775907844494,44.55613057324841
+55,1.3935169718068117,44.92436305732484
+56,1.3554217974851086,46.138535031847134
+57,1.3385878102794575,46.81528662420382
+58,1.3420242617844016,46.666003184713375
+59,1.348436042761347,47.04418789808917
+60,1.3349300759613134,47.671178343949045
+61,1.3231583757764975,48.09912420382165
+62,1.3299932859505816,48.49721337579618
+63,1.2939354989938676,49.64171974522293
+64,1.2844839551646239,50.29856687898089
+65,1.2698227155740094,51.02507961783439
+66,1.2650193484725467,51.28383757961783
+67,1.2492882544827308,51.87101910828026
+68,1.245330235001388,52.109872611464965
+69,1.232016976471919,52.44824840764331
+70,1.2356244857144203,52.886146496815286
+71,1.2242896917519297,53.02547770700637
+72,1.294633028613534,51.46297770700637
+73,1.205980751924454,53.76194267515923
+74,1.1715272330934074,55.314490445859875
+75,1.1178062186119662,58.409633757961785
+76,1.1464271215116901,57.09593949044586
+77,1.1460535298487184,57.58359872611465
+78,1.1186232756657206,58.996815286624205
+79,1.1072798485209228,59.1062898089172
+80,1.0913811614558955,60.09156050955414
+81,1.079599334176179,61.13654458598726
+82,1.0642208946738274,62.091958598726116
+83,1.086357113282392,60.50955414012739
+84,1.107784345271481,59.8328025477707
+85,1.059586747057119,61.96257961783439
+86,1.0844638248917404,60.917595541401276
+87,1.0618516795194832,61.71377388535032
+88,1.028358872529048,63.405652866242036
+89,1.0594662613929458,62.2312898089172
+90,1.0122817902807977,64.18192675159236
+91,1.011283139893963,64.39092356687898
+92,1.0067660804766758,64.57006369426752
+93,0.9936128782618577,65.00796178343948
+94,0.9792866312014828,66.05294585987261
+95,1.0086930189163061,65.41600318471338
+96,0.972898439616914,66.13256369426752
+97,0.9951403999024895,65.32643312101911
+98,0.9554996190557055,66.74960191082802
+99,0.9357917153151931,67.61544585987261
+100,0.9595367536423313,67.22730891719745
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_1_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_1_Dec3.csv
new file mode 100644
index 00000000000..2e82d3d07c6
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_1_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.317422857709751,9.952229299363058
+2,2.315345864387075,16.520700636942674
+3,2.230932061079961,17.436305732484076
+4,2.1855118494884223,17.90406050955414
+5,2.1759652096754425,18.23248407643312
+6,2.0841863572977153,18.39171974522293
+7,2.0277935744850497,19.317277070063696
+8,1.976873764566555,26.194267515923567
+9,1.9050889447995811,26.92078025477707
+10,1.8374265341242408,28.433519108280255
+11,1.8474833851407289,28.134952229299362
+12,1.8186124737854976,28.81170382165605
+13,1.76847372161355,30.473726114649683
+14,1.7423642653568534,30.66281847133758
+15,1.77360634211522,31.130573248407643
+16,1.804514446076314,31.44904458598726
+17,1.7272089036406986,32.13574840764331
+18,1.7071246227641015,31.916799363057326
+19,1.7092719161586396,32.215366242038215
+20,1.6857397556304932,31.84713375796178
+21,1.652788580602901,33.59872611464968
+22,1.6331311411159053,34.87261146496815
+23,1.635786274436173,34.554140127388536
+24,1.642183461766334,34.225716560509554
+25,1.5835483582915775,34.26552547770701
+26,1.6102467798123694,33.31011146496815
+27,1.5740839258121078,36.35549363057325
+28,1.5688973346333595,37.03224522292994
+29,1.543909225494239,37.96775477707006
+30,1.5121322080587885,38.36584394904459
+31,1.5019000844590982,39.61982484076433
+32,1.5043539917393096,40.057722929936304
+33,1.5246041474069,39.45063694267516
+34,1.5403842781759371,39.29140127388535
+35,1.621570273569435,38.92316878980892
+36,1.5265084930286286,40.85390127388535
+37,1.4758203811706252,41.38136942675159
+38,1.4373788674166248,43.21257961783439
+39,1.4822998768205096,41.30175159235669
+40,1.418031204278302,44.52627388535032
+41,1.4523296637140262,43.21257961783439
+42,1.3915442691487112,44.83479299363057
+43,1.3773244429545797,45.54140127388535
+44,1.398947904823692,45.21297770700637
+45,1.3774229804421687,46.835191082802545
+46,1.3709150446448357,45.20302547770701
+47,1.3955913463215919,46.70581210191083
+48,1.3044706628580762,49.432722929936304
+49,1.2832908098864708,50.46775477707006
+50,1.2415438734801711,52.916003184713375
+51,1.2383386283923106,52.4781050955414
+52,1.2629424413298345,52.388535031847134
+53,1.270345842003063,51.26393312101911
+54,1.2171339730548252,53.84156050955414
+55,1.2367674708366394,53.781847133757964
+56,1.233558447877313,53.00557324840764
+57,1.2284201786016962,54.32921974522293
+58,1.2451291824602018,53.84156050955414
+59,1.2081015147980612,55.27468152866242
+60,1.1863474052423124,56.399283439490446
+61,1.1440658094776663,57.245222929936304
+62,1.2277068381856202,55.27468152866242
+63,1.1897015450107065,56.857085987261144
+64,1.1184641388571186,58.98686305732484
+65,1.1270065163351168,60.001990445859875
+66,1.1347854004544058,59.32523885350319
+67,1.1545618373876925,59.394904458598724
+68,1.1376394329556994,59.952229299363054
+69,1.1300721859476368,60.24084394904459
+70,1.1314961633105187,60.390127388535035
+71,1.0468371719311758,63.53503184713376
+72,1.029604573538349,63.64450636942675
+73,1.055295162899479,63.1468949044586
+74,1.058193756516572,63.13694267515923
+75,1.0029658219616884,65.37619426751593
+76,1.0704203046810854,63.126990445859875
+77,1.0803023143938393,62.55971337579618
+78,1.076910487785461,63.2265127388535
+79,1.0505587447221112,63.86345541401274
+80,1.0384932388165953,64.80891719745223
+81,1.0356739599993274,64.63972929936305
+82,1.044576655907236,64.39092356687898
+83,1.0137810467914412,65.99323248407643
+84,1.0231728276629357,65.71457006369427
+85,0.9951013095059972,66.04299363057325
+86,0.9187637241023361,68.69028662420382
+87,0.9617091402126725,67.30692675159236
+88,0.9836467094482131,67.12778662420382
+89,0.9541527560562085,67.71496815286625
+90,0.9856158624029463,67.51592356687898
+91,0.9315506944990462,68.640525477707
+92,0.9373066759413216,68.49124203821655
+93,0.9455711682131336,68.60071656050955
+94,0.93044430359154,68.79976114649682
+95,0.908236103262871,69.95421974522293
+96,0.9521328554411602,68.72014331210191
+97,0.9595020022361901,68.75995222929936
+98,0.9285405999535967,69.02866242038216
+99,0.9440389195824884,68.62062101910828
+100,0.8905244276022456,70.8499203821656
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_2_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_2_Dec3.csv
new file mode 100644
index 00000000000..fe24a5caea5
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_2_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.323053435914835,9.952229299363058
+2,2.321219178521709,12.032245222929935
+3,2.2553766700112896,17.41640127388535
+4,2.197638183642345,18.13296178343949
+5,2.1433301025135503,16.391321656050955
+6,2.0567372536203665,19.19785031847134
+7,2.0252218550177896,24.41281847133758
+8,1.94583511656257,27.0203025477707
+9,1.8820141789260183,28.463375796178344
+10,1.8515147714857842,28.732085987261147
+11,1.8625184707580857,28.05533439490446
+12,1.7912364370504004,30.11544585987261
+13,1.7656986994348514,29.866640127388536
+14,1.7752910548714316,30.871815286624205
+15,1.8094612367593559,30.981289808917197
+16,1.7273729242336977,31.439092356687897
+17,1.7388568501563588,31.329617834394906
+18,1.7277991331306992,32.50398089171974
+19,1.7080323711322372,32.016321656050955
+20,1.652882606360563,33.130971337579616
+21,1.6659074452272646,34.34514331210191
+22,1.6895655978257489,33.84753184713376
+23,1.6708387667965736,33.12101910828026
+24,1.5836748871833655,33.966958598726116
+25,1.6145125050453624,34.056528662420384
+26,1.5727502836543283,36.116640127388536
+27,1.5552789390466775,37.75875796178344
+28,1.5865115094336735,37.37062101910828
+29,1.576968161163816,37.490047770700635
+30,1.5170947320901664,38.326035031847134
+31,1.5100541782986587,38.24641719745223
+32,1.5193407497588236,40.15724522292994
+33,1.566812023235734,38.326035031847134
+34,1.5663833648535856,39.659633757961785
+35,1.5111284035785941,40.416003184713375
+36,1.481950078040931,41.29179936305732
+37,1.4525175975386504,41.978503184713375
+38,1.4925338713226803,42.44625796178344
+39,1.5857112415277275,37.738853503184714
+40,1.4375476275280024,41.69984076433121
+41,1.4327905648832868,44.16799363057325
+42,1.4869527892701944,40.863853503184714
+43,1.4485413572590822,43.88933121019108
+44,1.404489765501326,44.5859872611465
+45,1.3912333819516904,43.99880573248408
+46,1.3922362722408999,46.54657643312102
+47,1.370101078300719,48.288216560509554
+48,1.3457654570318331,48.55692675159236
+49,1.3362862175437296,47.7109872611465
+50,1.2471910115260227,51.68192675159236
+51,1.3234738885976707,50.46775477707006
+52,1.2769316389302539,50.796178343949045
+53,1.2847694166147026,51.40326433121019
+54,1.2547558174011813,52.68710191082803
+55,1.2468236388674208,51.22412420382165
+56,1.2453281552928268,53.45342356687898
+57,1.2661642667594228,52.468152866242036
+58,1.263974366673998,53.5828025477707
+59,1.2211132634217572,54.85668789808917
+60,1.180359404178182,56.75756369426752
+61,1.23881491012634,54.38893312101911
+62,1.2902242237595236,53.99084394904459
+63,1.1461129044271579,56.74761146496815
+64,1.1151548282356019,60.1015127388535
+65,1.1719910692257487,58.11106687898089
+66,1.1705578273269022,59.11624203821656
+67,1.1612006270202102,58.857484076433124
+68,1.1357968183839398,60.68869426751592
+69,1.1828867599463007,59.335191082802545
+70,1.0984602528772536,61.88296178343949
+71,1.0390061853797572,64.19187898089172
+72,1.0674376833211086,62.96775477707006
+73,1.1217731385473992,61.3953025477707
+74,1.107467794114617,62.44028662420382
+75,1.0259245945389863,64.71934713375796
+76,1.1129859329029252,62.40047770700637
+77,1.0718858777337772,63.39570063694268
+78,1.082857313429474,63.83359872611465
+79,1.0557884247439682,64.36106687898089
+80,1.045524617289282,64.41082802547771
+81,1.0791358837656155,64.16202229299363
+82,1.020971412111999,66.49084394904459
+83,1.0022026972406228,66.50079617834395
+84,0.9902754435493688,66.93869426751593
+85,0.9882410935535553,67.87420382165605
+86,0.9684641756069888,67.3765923566879
+87,0.9414551438419683,68.13296178343948
+88,0.9535409941035471,68.79976114649682
+89,0.9533791395888966,68.25238853503184
+90,0.9736516568691108,68.50119426751593
+91,0.9507168795272802,69.03861464968153
+92,0.9703008236399122,68.84952229299363
+93,0.940281855642416,68.43152866242038
+94,0.9097011353179907,69.86464968152866
+95,0.9574422492722797,68.33200636942675
+96,0.9708465455443995,68.08320063694268
+97,0.9406123966168446,68.92914012738854
+98,0.9721986125608918,68.859474522293
+99,0.9053933656519386,70.10350318471338
+100,0.9318133774836352,70.22292993630573
diff --git a/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_3_Dec3.csv b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_3_Dec3.csv
new file mode 100644
index 00000000000..a021d1894bd
--- /dev/null
+++ b/baselines/fednova/fednova/results/vanilla_fednova_varEpoch_True_seed_3_Dec3.csv
@@ -0,0 +1,101 @@
+round,test_loss,test_accuracy
+1,2.322097668981856,11.335589171974522
+2,2.3512930186690797,16.441082802547772
+3,2.296800385614869,15.92356687898089
+4,2.212728873939271,18.351910828025478
+5,2.127976627106879,18.242436305732483
+6,2.120145565385272,18.2921974522293
+7,2.0629556057559455,19.088375796178344
+8,1.9776615071448551,21.307722929936304
+9,1.967238001003387,23.07921974522293
+10,1.9365011567522765,25.109474522292995
+11,1.8895385128677271,28.84156050955414
+12,1.8438930184977829,28.393710191082803
+13,1.8740499110738182,29.09036624203822
+14,1.878917267368098,30.82205414012739
+15,1.773752624821511,31.399283439490446
+16,1.7917554310172985,31.28980891719745
+17,1.7760224031035308,31.67794585987261
+18,1.7565414206996846,31.588375796178344
+19,1.7005135937101523,32.58359872611465
+20,1.6944802346502899,33.15087579617835
+21,1.7396390794948409,32.822452229299365
+22,1.6872477713663867,33.160828025477706
+23,1.6420213568742108,34.554140127388536
+24,1.6783971391665709,33.578821656050955
+25,1.6217271590688427,34.67356687898089
+26,1.5867052731240632,36.315684713375795
+27,1.5953486580757579,36.514729299363054
+28,1.5969599735964635,36.38535031847134
+29,1.5778622095751915,35.390127388535035
+30,1.5358969565409764,38.1468949044586
+31,1.56532223209454,37.181528662420384
+32,1.5776945997954934,37.65923566878981
+33,1.6106544467294293,37.350716560509554
+34,1.5362199279153423,40.25676751592356
+35,1.5382185711222849,38.61464968152866
+36,1.4640603460324038,41.82921974522293
+37,1.533822179599932,40.14729299363057
+38,1.454336076785045,43.36186305732484
+39,1.4849179193472406,40.416003184713375
+40,1.47137078737757,41.98845541401274
+41,1.45907281310695,41.839171974522294
+42,1.4891309199059846,40.13734076433121
+43,1.4549119426945971,42.764729299363054
+44,1.4599462527378348,41.192277070063696
+45,1.4257656647141572,44.63574840764331
+46,1.4135652499593747,44.486464968152866
+47,1.338828225044688,47.23328025477707
+48,1.3825534749182926,44.82484076433121
+49,1.307464861566094,47.701035031847134
+50,1.2776346293983945,49.10429936305732
+51,1.3441938298523046,47.701035031847134
+52,1.3212076729270303,49.402866242038215
+53,1.3360372546372141,47.55175159235669
+54,1.300278852320021,48.7062101910828
+55,1.343466666094057,49.05453821656051
+56,1.3805833485475771,47.72093949044586
+57,1.31434104359074,49.47253184713376
+58,1.269891818997207,51.323646496815286
+59,1.2222657788331341,53.09514331210191
+60,1.3029375323064767,49.56210191082803
+61,1.2575010425725561,51.90087579617835
+62,1.217766563224185,54.110270700636946
+63,1.2282358385195398,53.76194267515923
+64,1.2324566241282566,55.39410828025478
+65,1.2165237243767757,54.16003184713376
+66,1.177224106849379,55.901671974522294
+67,1.215111520260003,55.24482484076433
+68,1.2429355538574753,53.83160828025478
+69,1.1372564423615765,59.01671974522293
+70,1.0938499269971422,60.30055732484077
+71,1.1212072566056708,59.06648089171974
+72,1.1461041133115246,58.51910828025478
+73,1.1461375670827878,58.548964968152866
+74,1.1358057063096647,58.748009554140125
+75,1.0694336010392305,61.843152866242036
+76,1.1292571493774464,59.056528662420384
+77,1.1200311574966284,60.7484076433121
+78,,10.011942675159236
+79,,10.011942675159236
+80,,10.011942675159236
+81,,10.011942675159236
+82,,10.011942675159236
+83,,10.011942675159236
+84,,10.011942675159236
+85,,10.011942675159236
+86,,10.011942675159236
+87,,10.011942675159236
+88,,10.011942675159236
+89,,10.011942675159236
+90,,10.011942675159236
+91,,10.011942675159236
+92,,10.011942675159236
+93,,10.011942675159236
+94,,10.011942675159236
+95,,10.011942675159236
+96,,10.011942675159236
+97,,10.011942675159236
+98,,10.011942675159236
+99,,10.011942675159236
+100,,10.011942675159236
diff --git a/baselines/fednova/fednova/server.py b/baselines/fednova/fednova/server.py
new file mode 100644
index 00000000000..2fd7d42cde5
--- /dev/null
+++ b/baselines/fednova/fednova/server.py
@@ -0,0 +1,5 @@
+"""Create global evaluation function.
+
+Optionally, also define a new Server class (please note this is not needed in most
+settings).
+"""
diff --git a/baselines/fednova/fednova/strategy.py b/baselines/fednova/fednova/strategy.py
new file mode 100644
index 00000000000..91adb57b691
--- /dev/null
+++ b/baselines/fednova/fednova/strategy.py
@@ -0,0 +1,166 @@
+"""FedNova strategy."""
+
+from logging import INFO
+from typing import Dict, List, Optional, Tuple, Union
+
+import numpy as np
+from flwr.common import (
+ Metrics,
+ NDArray,
+ NDArrays,
+ Parameters,
+ Scalar,
+ ndarrays_to_parameters,
+ parameters_to_ndarrays,
+)
+from flwr.common.logger import log
+from flwr.common.typing import FitRes
+from flwr.server.client_proxy import ClientProxy
+from flwr.server.strategy import FedAvg
+from flwr.server.strategy.aggregate import aggregate
+from omegaconf import DictConfig
+
+
+class FedNova(FedAvg):
+ """FedNova."""
+
+ def __init__(self, exp_config: DictConfig, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ # Maintain a momentum buffer for the weight updates across rounds of training
+ self.global_momentum_buffer: List[NDArray] = []
+ if self.initial_parameters is not None:
+ self.global_parameters: List[NDArray] = parameters_to_ndarrays(
+ self.initial_parameters
+ )
+
+ self.exp_config = exp_config
+ self.lr = exp_config.optimizer.lr
+
+ # momentum parameter for the server/strategy side momentum buffer
+ self.gmf = exp_config.optimizer.gmf
+ self.best_test_acc = 0.0
+
+ def aggregate_fit(
+ self,
+ server_round: int,
+ results: List[Tuple[ClientProxy, FitRes]],
+ failures: List[Union[Tuple[ClientProxy, FitRes], BaseException]],
+ ):
+ """Aggregate the results from the clients."""
+ if not results:
+ return None, {}
+
+ # Do not aggregate if there are failures and failures are not accepted
+ if not self.accept_failures and failures:
+ return None, {}
+
+ # Compute tau_effective from summation of local client tau: Eqn-6: Section 4.1
+ local_tau = [res.metrics["tau"] for _, res in results]
+ tau_eff = np.sum(local_tau)
+
+ aggregate_parameters = []
+
+ for _client, res in results:
+ params = parameters_to_ndarrays(res.parameters)
+ # compute the scale by which to weight each client's gradient
+ # res.metrics["local_norm"] contains total number of local update steps
+ # for each client
+ # res.metrics["weight"] contains the ratio of client dataset size
+ # Below corresponds to Eqn-6: Section 4.1
+ scale = tau_eff / float(res.metrics["local_norm"])
+ scale *= float(res.metrics["weight"])
+
+ aggregate_parameters.append((params, scale))
+
+ # Aggregate all client parameters with a weighted average using the scale
+ # calculated above
+ agg_cum_gradient = aggregate(aggregate_parameters)
+
+ # In case of Server or Hybrid Momentum, we decay the aggregated gradients
+ # with a momentum factor
+ self.update_server_params(agg_cum_gradient)
+
+ return ndarrays_to_parameters(self.global_parameters), {}
+
+ def update_server_params(self, cum_grad: NDArrays):
+ """Update the global server parameters by aggregating client gradients."""
+ for i, layer_cum_grad in enumerate(cum_grad):
+ if self.gmf != 0:
+ # check if it's the first round of aggregation, if so, initialize the
+ # global momentum buffer
+
+ if len(self.global_momentum_buffer) < len(cum_grad):
+ buf = layer_cum_grad / self.lr
+ self.global_momentum_buffer.append(buf)
+
+ else:
+ # momentum updates using the global accumulated weights buffer
+ # for each layer of network
+ self.global_momentum_buffer[i] *= self.gmf
+ self.global_momentum_buffer[i] += layer_cum_grad / self.lr
+
+ self.global_parameters[i] -= self.global_momentum_buffer[i] * self.lr
+
+ else:
+ # weight updated eqn: x_new = x_old - gradient
+ # the layer_cum_grad already has all the learning rate multiple
+ self.global_parameters[i] -= layer_cum_grad
+
+ def evaluate(
+ self, server_round: int, parameters: Parameters
+ ) -> Optional[Tuple[float, Dict[str, Scalar]]]:
+ """Overide default evaluate method to save model parameters."""
+ if self.evaluate_fn is None:
+ # No evaluation function provided
+ return None
+
+ parameters_ndarrays = parameters_to_ndarrays(parameters)
+ eval_res = self.evaluate_fn(server_round, parameters_ndarrays, {})
+
+ if eval_res is None:
+ return None
+
+ loss, metrics = eval_res
+ accuracy = float(metrics["accuracy"])
+
+ if accuracy > self.best_test_acc:
+ self.best_test_acc = accuracy
+
+ # Save model parameters and state
+ if server_round == 0:
+ return None
+
+ np.savez(
+ f"{self.exp_config.checkpoint_path}bestModel_"
+ f"{self.exp_config.exp_name}_{self.exp_config.strategy}_"
+ f"varEpochs_{self.exp_config.var_local_epochs}.npz",
+ self.global_parameters,
+ [loss, self.best_test_acc],
+ self.global_momentum_buffer,
+ )
+
+ log(INFO, "Model saved with Best Test accuracy %.3f: ", self.best_test_acc)
+
+ return loss, metrics
+
+
+def weighted_average(metrics: List[Tuple[int, Metrics]]) -> Metrics:
+ """Aggregate the client metrics via weighted average for evaluation.
+
+ Parameters
+ ----------
+ metrics : List[Tuple[int, Metrics]]
+ The list of metrics to aggregate.
+
+ Returns
+ -------
+ Metrics
+ The weighted average metric.
+ """
+ # Multiply accuracy of each client by number of examples used
+ accuracies = [num_examples * m["accuracy"] for num_examples, m in metrics]
+ examples = [num_examples for num_examples, _ in metrics]
+
+ # Aggregate and return custom metric (weighted average)
+ return {"accuracy": np.sum(accuracies) / np.sum(examples)}
diff --git a/baselines/fednova/fednova/utils.py b/baselines/fednova/fednova/utils.py
new file mode 100644
index 00000000000..f3f7de1e8ac
--- /dev/null
+++ b/baselines/fednova/fednova/utils.py
@@ -0,0 +1,185 @@
+"""Utility functions for FedNova such as computing accuracy, plotting results, etc."""
+
+
+import glob
+import os
+from typing import List, Tuple
+
+import matplotlib.pyplot as plt
+import numpy as np
+import pandas as pd
+import torch
+from flwr.common import Metrics
+from omegaconf import DictConfig
+
+
+def comp_accuracy(output, target, topk=(1,)):
+ """Compute accuracy over the k top predictions wrt the target."""
+ with torch.no_grad():
+ maxk = max(topk)
+ batch_size = target.size(0)
+
+ _, pred = output.topk(maxk, 1, True, True)
+ pred = pred.t()
+ correct = pred.eq(target.view(1, -1).expand_as(pred))
+
+ res = []
+ for k in topk:
+ correct_k = correct[:k].view(-1).float().sum(0, keepdim=True)
+ res.append(correct_k.mul_(100.0 / batch_size))
+ return res
+
+
+def weighted_average(metrics: List[Tuple[int, Metrics]]) -> Metrics:
+ """Return weighted average of accuracy metrics."""
+ # Multiply accuracy of each client by number of examples used
+ accuracies = [num_examples * m["accuracy"] for num_examples, m in metrics]
+ examples = [num_examples for num_examples, _ in metrics]
+
+ # Aggregate and return custom metric (weighted average)
+ return {"accuracy": np.sum(accuracies) / np.sum(examples)}
+
+
+def fit_config(exp_config: DictConfig, server_round: int):
+ """Return training configuration dict for each round.
+
+ Learning rate is reduced by a factor after set rounds.
+ """
+ config = {}
+
+ lr = exp_config.optimizer.lr
+
+ if exp_config.lr_scheduling:
+ if server_round == int(exp_config.num_rounds / 2):
+ lr = exp_config.optimizer.lr / 10
+
+ elif server_round == int(exp_config.num_rounds * 0.75):
+ lr = exp_config.optimizer.lr / 100
+
+ config["lr"] = lr
+ config["server_round"] = server_round
+ return config
+
+
+# pylint: disable=too-many-locals, too-many-statements
+def generate_plots(
+ local_solvers: List[str], strategy: List[str], var_epochs: bool, momentum_plot=False
+):
+ """Generate plots for all experiments, saved in directory _static."""
+ root_path = "multirun/"
+ save_path = "_static/"
+
+ def load_exp(exp_name: str, strat: str, var_epoch: bool):
+ exp_dirs = os.path.join(
+ root_path,
+ f"optimizer_{exp_name.lower()}_strategy_"
+ f"{strat.lower()}_var_local_epochs_{var_epoch}",
+ )
+ exp_files = glob.glob(f"{exp_dirs}/*/*.csv")
+
+ exp_df = [pd.read_csv(f) for f in exp_files]
+ exp_df = [df for df in exp_df if not df.isna().any().any()]
+
+ assert len(exp_df) >= 1, (
+ f"Atleast one results file must contain non-NaN values. "
+ f"NaN values found in all seed runs of {exp_df}"
+ )
+ return exp_df
+
+ def get_confidence_interval(data):
+ """Return 95% confidence intervals along with mean."""
+ avg = np.mean(data, axis=0)
+ std = np.std(data, axis=0)
+ lower = avg - 1.96 * std / np.sqrt(len(data))
+ upper = avg + 1.96 * std / np.sqrt(len(data))
+ return avg, lower, upper
+
+ # create tuple combination of experiment configuration for plotting
+ # [("vanilla", "fedavg", True), ("vanilla", "fednova", True)]
+ max_exp_len = max([len(local_solvers), len(strategy)])
+ optim_exp_len = int(max_exp_len / len(local_solvers))
+ strategy_exp_len = int(max_exp_len / len(strategy))
+ var_epochs_len = int(max_exp_len)
+ exp_list = list(
+ zip(
+ local_solvers * optim_exp_len,
+ strategy * strategy_exp_len,
+ [var_epochs] * var_epochs_len,
+ )
+ )
+
+ exp_data = [load_exp(*args) for args in exp_list]
+
+ # Iterate over each experiment
+ plt.figure()
+ title = ""
+ for i, data_dfs in enumerate(exp_data):
+ # Iterate over multiple seeds of same experiment
+ combined_data = np.array([df["test_accuracy"].values for df in data_dfs])
+
+ mean, lower_ci, upper_ci = get_confidence_interval(combined_data)
+
+ epochs = np.arange(1, len(mean) + 1)
+
+ optimizer, server_strategy, variable_epoch = exp_list[i]
+
+ # Assign more readable legends for each plot according to paper
+ if optimizer == "proximal" and server_strategy == "FedAvg":
+ label = "FedProx"
+ elif optimizer.lower() in ["server", "hybrid"]:
+ label = optimizer
+ elif optimizer.lower() == "vanilla" and momentum_plot:
+ label = "No Momentum"
+ else:
+ label = server_strategy
+
+ plt.plot(epochs, mean, label=label)
+ plt.fill_between(epochs, lower_ci, upper_ci, alpha=0.3)
+
+ if optimizer == "momentum":
+ optimizer_label = "SGD-M"
+ elif optimizer == "proximal":
+ optimizer_label = "SGD w/ Proximal"
+ else:
+ optimizer_label = "SGD"
+
+ if var_epochs:
+ title = f"Local Solver: {optimizer_label}, Epochs ~ U(2, 5)"
+ else:
+ title = f"Local Solver: {optimizer_label}, Epochs = 2"
+
+ print(
+ f"---------------------Local Solver: {optimizer.upper()}, "
+ f"Strategy: {server_strategy.upper()} Local Epochs Fixed: {variable_epoch}"
+ f"---------------------"
+ )
+ print(f"Number of valid(not NaN) seeds for this experiment: {len(data_dfs)}")
+
+ print(f"Test Accuracy: {mean[-1]:.2f} ± {upper_ci[-1] - mean[-1]:.2f}")
+
+ if momentum_plot:
+ title = "Comparison of Momentum Schemes: FedNova"
+ save_name = "momentum_plot"
+ else:
+ save_name = local_solvers[0]
+
+ plt.ylabel("Test Accuracy %", fontsize=12)
+ plt.xlabel("Communication rounds", fontsize=12)
+ plt.xlim([0, 103])
+ plt.ylim([30, 80])
+ plt.legend(loc="lower right", fontsize=12)
+ plt.grid()
+ plt.title(title, fontsize=15)
+ plt.savefig(f"{save_path}testAccuracy_{save_name}_varEpochs_{var_epochs}.png")
+
+ plt.show()
+
+
+if __name__ == "__main__":
+ for type_epoch_exp in [False, True]:
+ for solver in ["vanilla", "momentum", "proximal"]:
+ generate_plots([solver], ["FedAvg", "FedNova"], type_epoch_exp)
+
+ generate_plots(
+ ["Hybrid", "Server", "Vanilla"], ["FedNova"], True, momentum_plot=True
+ )
diff --git a/baselines/fednova/pyproject.toml b/baselines/fednova/pyproject.toml
new file mode 100644
index 00000000000..c9cc257239e
--- /dev/null
+++ b/baselines/fednova/pyproject.toml
@@ -0,0 +1,144 @@
+[build-system]
+requires = ["poetry-core>=1.4.0"]
+build-backend = "poetry.masonry.api"
+
+[tool.poetry]
+name = "fednova" # <----- Ensure it matches the name of your baseline directory containing all the source code
+version = "1.0.0"
+description = "Flower Baselines"
+license = "Apache-2.0"
+authors = ["The Flower Authors "]
+readme = "README.md"
+homepage = "https://flower.dev"
+repository = "https://github.com/adap/flower"
+documentation = "https://flower.dev"
+classifiers = [
+ "Development Status :: 3 - Alpha",
+ "Intended Audience :: Developers",
+ "Intended Audience :: Science/Research",
+ "License :: OSI Approved :: Apache Software License",
+ "Operating System :: MacOS :: MacOS X",
+ "Operating System :: POSIX :: Linux",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3 :: Only",
+ "Programming Language :: Python :: 3.8",
+ "Programming Language :: Python :: 3.9",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: Implementation :: CPython",
+ "Topic :: Scientific/Engineering",
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
+ "Topic :: Scientific/Engineering :: Mathematics",
+ "Topic :: Software Development",
+ "Topic :: Software Development :: Libraries",
+ "Topic :: Software Development :: Libraries :: Python Modules",
+ "Typing :: Typed",
+]
+
+[tool.poetry.dependencies]
+# tested with python == 3.10.11
+python = ">=3.10.0, <3.11.0"
+flwr = { extras = ["simulation"], version = "1.5.0" }
+hydra-core = "1.3.2" # don't change this
+torch = { url = "https://download.pytorch.org/whl/cu117/torch-2.0.1%2Bcu117-cp310-cp310-linux_x86_64.whl"}
+torchvision = { url = "https://download.pytorch.org/whl/cu117/torchvision-0.15.2%2Bcu117-cp310-cp310-linux_x86_64.whl"}
+numpy = "1.21.6"
+matplotlib = "3.5.3"
+pandas = "1.3.5"
+
+[tool.poetry.dev-dependencies]
+isort = "==5.11.5"
+black = "==23.1.0"
+docformatter = "==1.5.1"
+mypy = "==1.4.1"
+pylint = "==2.8.2"
+flake8 = "==3.9.2"
+pytest = "==6.2.4"
+pytest-watch = "==4.2.0"
+ruff = "==0.0.272"
+types-requests = "==2.27.7"
+virtualenv = "20.21.0"
+
+[tool.isort]
+line_length = 88
+indent = " "
+multi_line_output = 3
+include_trailing_comma = true
+force_grid_wrap = 0
+use_parentheses = true
+
+[tool.black]
+line-length = 88
+target-version = ["py38", "py39", "py310", "py311"]
+
+[tool.pytest.ini_options]
+minversion = "6.2"
+addopts = "-qq"
+testpaths = [
+ "flwr_baselines",
+]
+
+[tool.mypy]
+ignore_missing_imports = true
+strict = false
+plugins = "numpy.typing.mypy_plugin"
+
+[tool.pylint."MESSAGES CONTROL"]
+disable = "bad-continuation,duplicate-code,too-few-public-methods,useless-import-alias"
+good-names = "i,j,k,_,x,y,X,Y,lr,K,N,m,n,v,mu,p,g,df"
+signature-mutators="hydra.main.main"
+
+[tool.pylint.typecheck]
+generated-members="numpy.*, torch.*, tensorflow.*"
+
+[[tool.mypy.overrides]]
+module = [
+ "importlib.metadata.*",
+ "importlib_metadata.*",
+]
+follow_imports = "skip"
+follow_imports_for_stubs = true
+disallow_untyped_calls = false
+
+[[tool.mypy.overrides]]
+module = "torch.*"
+follow_imports = "skip"
+follow_imports_for_stubs = true
+
+[tool.docformatter]
+wrap-summaries = 88
+wrap-descriptions = 88
+
+[tool.ruff]
+target-version = "py38"
+line-length = 88
+select = ["D", "E", "F", "W", "B", "ISC", "C4"]
+fixable = ["D", "E", "F", "W", "B", "ISC", "C4"]
+ignore = ["B024", "B027"]
+exclude = [
+ ".bzr",
+ ".direnv",
+ ".eggs",
+ ".git",
+ ".hg",
+ ".mypy_cache",
+ ".nox",
+ ".pants.d",
+ ".pytype",
+ ".ruff_cache",
+ ".svn",
+ ".tox",
+ ".venv",
+ "__pypackages__",
+ "_build",
+ "buck-out",
+ "build",
+ "dist",
+ "node_modules",
+ "venv",
+ "proto",
+]
+
+[tool.ruff.pydocstyle]
+convention = "numpy"
diff --git a/doc/source/ref-changelog.md b/doc/source/ref-changelog.md
index a25d8c3914b..7168386eaf0 100644
--- a/doc/source/ref-changelog.md
+++ b/doc/source/ref-changelog.md
@@ -12,6 +12,8 @@
- FedVSSL [#2412](https://github.com/adap/flower/pull/2412)
+ - FedNova [#2179](https://github.com/adap/flower/pull/2179)
+
## v1.6.0 (2023-11-28)
### Thanks to our contributors