diff --git a/.dockerignore b/.dockerignore index 50127a91d..29404d838 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,143 +1,23 @@ -# Project -results -output -docs - -# Git -.git - -# Pantsbuild -.pants.d -.pants.workdir.file_lock -.pants.workdir.file_lock.lock_message - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging +**/__pycache__ +*,cover +*.log +*.pyc +*.pyd +*.pyo .Python -build/ -develop-eggs/ -#dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ +.cache .coverage .coverage.* -.cache -nosetests.xml +.git +.github +.tox +Dockerfile coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don’t work, or not -# install all needed dependencies. -#Pipfile.lock - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ +docs +env +nosetests.xml +pip-delete-this-directory.txt +pip-log.txt +scripts +tests venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -#  -.DS_Store - -# Editors -.idea -.vscode diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 7441c6c09..000000000 --- a/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -root = true - -[*] -end_of_line = lf -insert_final_newline = true -charset = utf-8 - -[*.py] -indent_style = space -indent_size = 4 diff --git a/.github/workflows/development-e2e-tests.yml b/.github/workflows/development-e2e-tests.yml new file mode 100644 index 000000000..2387bb5bd --- /dev/null +++ b/.github/workflows/development-e2e-tests.yml @@ -0,0 +1,13 @@ +name: Comment-based E2E test + +on: + pull_request_review_comment: + types: [created] + +jobs: + e2e: + runs-on: ubuntu-18.04 + steps: + - name: logging + if: github.event.comment.body == '/run e2e' + run: echo "$GITHUB_REF" diff --git a/.github/workflows/development.yml b/.github/workflows/development.yml new file mode 100644 index 000000000..1f0f4301c --- /dev/null +++ b/.github/workflows/development.yml @@ -0,0 +1,57 @@ +name: Lint and test (development) + +on: + pull_request: + branches: + - development +jobs: + development: + runs-on: ubuntu-18.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Python 3.6 + uses: actions/setup-python@v1 + with: + python-version: 3.6 + + - name: Cache pip packages + uses: actions/cache@v1 + with: + path: ~/.cache/pip + key: pip-dev-${{ hashFiles('setup.py') }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade setuptools + pip install -e .[dev] + + - name: black + run: | + black --line-length 100 --check setup.py xain_fl tests + + - name: isort + run: | + isort --check-only --indent=4 -rc setup.py xain_fl tests + + - name: pylint + run: | + pylint --rcfile=.pylintrc xain_fl tests + + - name: mypy + continue-on-error: true + run: | + mypy xain_fl tests + + - name: Sphinx check + env: + SPHINXOPTS: "-W" + run: | + cd docs/ + make docs + + - name: PyTest + run: | + pytest -v diff --git a/.github/workflows/main.yml b/.github/workflows/master.yml similarity index 69% rename from .github/workflows/main.yml rename to .github/workflows/master.yml index 1a7ba752c..bd29df39e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/master.yml @@ -1,4 +1,4 @@ -name: Lint and test +name: Lint and test (master) on: pull_request: @@ -20,7 +20,7 @@ jobs: uses: actions/cache@v1 with: path: ~/.cache/pip - key: pip-${{ hashFiles('setup.py') }} + key: pip-master-${{ hashFiles('setup.py') }} - name: Install dependencies run: | @@ -30,22 +30,20 @@ jobs: - name: black run: | - black --check --exclude "xain_fl/cproto/.*_pb2.*" \ - setup.py conftest.py benchmarks examples xain_fl + black --line-length 100 --check setup.py xain_fl tests - name: isort run: | - isort --check-only --indent=4 -rc setup.py conftest.py benchmarks \ - examples xain_fl + isort --check-only --indent=4 -rc setup.py xain_fl tests - name: pylint run: | - pylint --rcfile=pylint.ini benchmarks examples xain_fl + pylint --rcfile=.pylintrc xain_fl tests - name: mypy continue-on-error: true run: | - mypy benchmarks examples/* xain_fl + mypy xain_fl tests - name: Sphinx check env: diff --git a/.gitignore b/.gitignore index bf81b6e6b..0fefa5da5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,3 @@ -# Project specific files and directories -config.cfg -output/* -results - -# Pantsbuild -.pants.d -.pants.workdir.file_lock -.pants.workdir.file_lock.lock_message - # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/.isort.cfg b/.isort.cfg index a6252817c..0baf8d4be 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -1,7 +1,8 @@ [settings] -multi_line_output=3 -include_trailing_comma=True force_grid_wrap=0 +force_sort_within_sections=True +include_trailing_comma=True +known_third_party=xain_proto,xain_sdk +line_length=100 +multi_line_output=3 use_parentheses=True -line_length=88 -skip_glob=*_pb2* diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 000000000..12b7c1a60 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,19 @@ +[MESSAGES CONTROL] + +disable=bad-continuation,redefined-builtin,duplicate-code,fixme + +[TYPECHECK] + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +# See: https://github.com/pytorch/pytorch/issues/701#issuecomment-378048755 +generated-members=numpy.*,torch.* + +# ignore auto generated grpc files +ignore-patterns= + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=TODO,FIXME diff --git a/.readthedocs.yml b/.readthedocs.yml index 32f3de7a3..3ad81aab8 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -14,4 +14,4 @@ python: - method: pip path: . extra_requirements: - - docs \ No newline at end of file + - docs diff --git a/CHANGELOG.md b/CHANGELOG.md index aa62a7d6d..e707c83a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,66 @@ For reference, the possible headings are: ## [Unreleased] +## [0.3.0] - 2020-01-21 + +- XP-505 cleanup docstrings in xain_fl.coordinator (#228) +- XP-498 more generic shebangs (#229) +- XP-510 allow for zero epochs on cli (#227) +- XP-508 Replace circleci badge (#225) +- XP-505 docstrings cleanup (#224) +- XP-333 Replace numproto with xain-proto (#220) +- XP-499 Remove conftest, exclude tests folder (#223) +- XP-480 revise message names (#222) +- XP-436 Reinstate FINISHED heartbeat from Coordinator (#219) +- XP-308 store aggregated weights in S3 buckets (#215) +- XP-308 store aggregated weights in S3 buckets (#215) +- XP-422 ai metrics (#216) +- XP-119 Fix gRPC testing setup so that it can run on macOS (#217) +- XP-433 Fix docker headings (#218) +- Xp 373 add sdk as dependency in fl (#214) +- DO-49 Create initial buckets (#213) +- XP-424 Remove unused packages (#212) +- XP-271 fix pylint issues (#210) +- XP-374 Clean up docs (#211) +- DO-43 docker compose minio (#208) +- XP-384 remove unused files (#209) +- XP-357 make controller parametrisable (#201) +- XP 273 scripts cleanup (#206) +- XP-385 Fix docs badge (#204) +- XP-354 Remove proto files (#200) +- DO-17 Add Dockerfiles, dockerignore and docs (#202) +- XP-241 remove legacy participant and sdk dir (#199) +- XP-168 update setup.py (#191) +- XP-261 move tests to own dir (#197) +- XP-257 cleanup cproto dir (#198) +- XP-265 move benchmarks to separate repo (#193) +- XP-255 update codeowners and authors in setup (#195) +- XP-255 update codeowners and authors in setup (#195) +- XP-229 Update Readme.md (#189) +- XP-337 Clean up docs before generation (#188) +- XP-264 put coordinator as own package (#183) +- XP-272 Archive rust code (#186) +- Xp 238 add participant selection (#179) +- XP-229 Update readme (#185) +- XP-334 Add make docs into docs make file (#184) +- XP-291 harmonize docs styles (#181) +- XP-300 Update docs makefile (#180) +- XP-228 Update readme (#178) +- XP-248 use structlog (#173) +- XP-207 model framework agnostic (#166) +- XAIN-284 rename package name (#176) +- XP-251 Add ability to pass params per cmd args to coordinator (#174) +- XP-167 Add gitter badge (#171) +- Hotfix badge versions and style (#170) +- Integrate docs with readthedocs (#169) +- add pull request template (#168) + +## [0.2.0] - 2019-12-02 + +### Changed + +- Renamed package from xain to xain-fl + ## [0.1.0] - 2019-09-25 The first public release of **XAIN** @@ -32,9 +92,3 @@ The first public release of **XAIN** [unreleased]: https://github.com/xainag/xain-fl/pulls?utf8=%E2%9C%93&q=merged%3A%3E2019-09-25+ [0.1.0]: https://github.com/xainag/xain-fl/pulls?utf8=%E2%9C%93&q=merged%3A%3C%3D2019-09-25+ - -## [0.2.0] - 2019-12-02 - -### Changed - -- Renamed package from xain to xain-fl diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index 0fe679937..000000000 --- a/CODEOWNERS +++ /dev/null @@ -1,25 +0,0 @@ -# See for details: https://help.github.com/en/articles/about-code-owners - -# Default code owners -* @danieljanes @tanertopal @r-marques - -## CI config -/.circleci/ @r-marques @tanertopal - -## Benchmarks -/benchmarks/benchmark/ @danieljanes @tanertopal -/benchmarks/generator/ @tanertopal -/benchmarks/ops/ @tanertopal - -## Protobufs -/protobuf/ @r-marques - -## Scripts -/scripts/ @tanertopal @danieljanes - -## Python packages -/xain_fl/datasets/ @tanertopal -/xain_fl/fl/ @danieljanes -/xain_fl/grpc/ @r-marques @finiteprods -/xain_fl/helpers/ @danieljanes @tanertopal -/xain_fl/types/ @danieljanes @tanertopal diff --git a/Dockerfile b/Dockerfile index 3cbf49473..55ebc6283 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,29 @@ -FROM python:3.6.8-slim +FROM python:3.6-alpine -WORKDIR /opt/app +ENV USER="xain" +ENV HOST="0.0.0.0" +ENV PORT="50051" +ENV PATH="/home/${USER}/.local/bin:${PATH}" -# Create output directory as its expected -RUN mkdir output +RUN addgroup -S ${USER} && adduser -S ${USER} -G ${USER} +RUN apk update && apk add python3-dev build-base git -# Upgrade pip and setuptools -RUN python -m pip install -U pip==19.3.1 setuptools==41.6.0 +WORKDIR /app -# First copy scripts and setup.py to install dependencies -# and avoid reinstalling dependencies when only changing the code -COPY setup.py setup.py +COPY setup.py . +COPY xain_fl xain_fl/ +COPY README.md . -# These files are needed for the setup.py to work -COPY xain_fl/__version__.py xain_fl/__version__.py -COPY README.md README.md +RUN pip install -v . -# Install only install_requires -RUN python setup.py egg_info && \ - LN=$(awk '/tensorflow/{ print NR; exit }' xain_fl.egg-info/requires.txt) && \ - IR=$(head -n $LN xain_fl.egg-info/requires.txt | awk '{gsub(/\[.+\]/,"");}1') && \ - python -m pip install $IR +# Remove everything, including dot files +RUN rm -rf ..?* .[!.]* * -COPY xain_fl xain_fl -COPY protobuf protobuf +# Drop down to a non-root user +USER ${USER} -RUN python -m pip install . +COPY --chown=${USER}:${USER} test_array.npy test_array.npy +COPY --chown=${USER}:${USER} docker/entrypoint.sh entrypoint.sh +RUN chmod +x entrypoint.sh + +ENTRYPOINT ["./entrypoint.sh"] diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 000000000..4ea14a35c --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,12 @@ +FROM python:3.6-alpine + +RUN apk update && apk add python3-dev build-base git + +WORKDIR /app +COPY setup.py . +COPY xain_fl xain_fl/ +COPY README.md . + +RUN pip install -v -e . + +CMD ["python3", "setup.py", "--fullname"] diff --git a/README.md b/README.md index fa281d20f..70a9e5009 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,14 @@ -[![CircleCI](https://img.shields.io/circleci/build/github/xainag/xain-fl/master?style=flat-square)](https://circleci.com/gh/xainag/xain-fl/tree/master) -[![PyPI](https://img.shields.io/pypi/v/xain-fl?style=flat-square)](https://pypi.org/project/xain-fl/) -[![GitHub license](https://img.shields.io/github/license/xainag/xain-fl?style=flat-square)](https://github.com/xainag/xain-fl/blob/master/LICENSE) -[![Documentation Status](https://readthedocs.org/projects/xain/badge/?version=latest&style=flat-square)](https://docs.xain.io/en/latest/?badge=latest) +[![Workflow Lint and test (master)](https://github.com/xainag/xain-fl/workflows/Lint%20and%20test%20%28master%29/badge.svg)](https://github.com/xainag/xain-fl) +[![PyPI](https://img.shields.io/pypi/v/xain-fl)](https://pypi.org/project/xain-fl/) +[![GitHub license](https://img.shields.io/github/license/xainag/xain-fl)](https://github.com/xainag/xain-fl/blob/master/LICENSE) +[![Documentation Status](https://readthedocs.org/projects/xain-fl/badge/?version=latest)](https://xain-fl.readthedocs.io/en/latest/?badge=latest) [![Gitter chat](https://badges.gitter.im/xainag.png)](https://gitter.im/xainag) # XAIN -The XAIN project is building a GDPR-compliance layer for machine learning. The approach relies on Federated Learning -as enabling technology that allows production AI applications to be fully privacy compliant. +The XAIN project is building a privacy layer for machine learning so that AI projects can meet compliance such as +GDPR and CCPA. The approach relies on Federated Learning as enabling technology that allows production AI +applications to be fully privacy compliant. Federated Learning also enables different use-cases that are not strictly privacy related such as connecting data lakes, reaching higher model performance in unbalanced datasets and utilising AI models on the edge. @@ -27,21 +28,24 @@ $ python -m pip install xain-fl ## Install from source -To clone this repository and to install the XAIN-FL project, please execute the following commands: +Clone this repository: ```shell -$ git clone https://github.com/xainag/xain-fl.git -$ cd xain-fl - -$ sh scripts/setup.sh +git clone https://github.com/xainag/xain-fl.git ``` -### Verify Installation +Install this project with the `dev` profile (**NOTE**: it is +recommended to install the project in a virtual environment): -You can verify the installation by running the tests +```shell +cd xain-fl +pip install -e '.[dev]' +``` + +Verify the installation by running the tests ```shell -$ pytest +pytest ``` ### Building the Documentation @@ -76,6 +80,53 @@ For more information about the CLI and its arguments, run: $ python xain_fl/cli.py --help ``` +### Run the Coordinator from a Docker image + +There are two docker-compose files, one for development and one for release. + +#### Development image + +To run the coordinator's development image, first build the Docker image: + +```shell +$ docker build -t xain-fl-dev -f Dockerfile.dev . +``` + +Then run the image, mounting the directory as a Docker volume, and call the +entrypoint: + +```shell +$ docker run -v $(pwd):/app -v '/app/xain_fl.egg-info' xain-fl-dev coordinator +``` + +#### Release image + +To run the coordinator's release image, first build it: + +```shell +$ docker build -t xain-fl . +``` + +And then run it (this example assumes you'll want to use the default port): + +```shell +$ docker run -p 50051:50051 xain-fl +``` + +### Docker-compose + +#### Development + +```shell +$ docker-compose -f docker-compose-dev.yml up +``` + +#### Release + +```shell +$ docker-compose up +``` + ## Related Papers and Articles - [An introduction to XAIN’s GDPR-compliance Layer for Machine Learning](https://medium.com/xain/an-introduction-to-xains-gdpr-compliance-layer-for-machine-learning-f7c321b31b06) diff --git a/benchmarks/aggregate.py b/benchmarks/aggregate.py deleted file mode 100644 index 706dc00cf..000000000 --- a/benchmarks/aggregate.py +++ /dev/null @@ -1,23 +0,0 @@ -"""Used as entry_point for console_script `aggregate` in `setup.py`. - -Expects the following flags: - - - group_name - -Example: - aggregate --group_name=GROUP_NAME -""" -from absl import app, flags - -from benchmarks.benchmark.aggregation import aggregation - -FLAGS = flags.FLAGS - - -def main(): - flags.mark_flag_as_required("group_name") - app.run(main=aggregation.main) - - -if __name__ == "__main__": - main() diff --git a/benchmarks/benchmark/__init__.py b/benchmarks/benchmark/__init__.py deleted file mode 100644 index b6e3ec107..000000000 --- a/benchmarks/benchmark/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -"""Extensive benchmark suite to evaluate convergence properties of federated learning -in different settings. The main module in which those scenarious are configured is -`benchmark.py`. -""" -from absl import flags - -from .benchmark import benchmarks - -flags.DEFINE_string("benchmark_name", None, f"One of: {[k for k in benchmarks]}") - -flags.DEFINE_string( - "group_name", None, "Group name used to gather the tasks of one benchmark" -) diff --git a/benchmarks/benchmark/aggregation/__init__.py b/benchmarks/benchmark/aggregation/__init__.py deleted file mode 100644 index e81873a94..000000000 --- a/benchmarks/benchmark/aggregation/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Provides various aggregations which can be used per benchmark scenario -as seen in ~benchmarks.benchmark.benchmark.benchmarks -""" diff --git a/benchmarks/benchmark/aggregation/aggregation.py b/benchmarks/benchmark/aggregation/aggregation.py deleted file mode 100644 index 03443d645..000000000 --- a/benchmarks/benchmark/aggregation/aggregation.py +++ /dev/null @@ -1,60 +0,0 @@ -"""Provides compositions of aggregation functions identified by unique names -to be used in benchmark scenario configuration -""" -import os -from typing import Callable, Dict - -from absl import flags - -from benchmarks.benchmark.aggregation import ( - final_task_accuracies, - learning_rate, - participant_hist, - task_accuracies, -) -from benchmarks.helpers import storage -from xain_fl.logger import get_logger - -FLAGS = flags.FLAGS - - -logger = get_logger(__name__) - - -def _aggregate(): - """Calls aggregation defined in a benchmark groups config.json file""" - fname = os.path.join(FLAGS.results_dir, FLAGS.group_name, "config.json") - config = storage.read_json(fname) - - aggregation_name = config["aggregation_name"] - - aggregations[aggregation_name]() - - -def _flul_aggregation(): - logger.info("flul_aggregation started") - task_accuracies.aggregate() - learning_rate.aggregate() - participant_hist.participant_history() - - -def _cpp_aggregation(): - logger.info("cpp_aggregation started") - task_accuracies.aggregate() - final_task_accuracies.aggregate() - participant_hist.participant_history() - - -aggregations: Dict[str, Callable] = { - "flul-aggregation": _flul_aggregation, - "cpp-aggregation": _cpp_aggregation, - "vol-aggregation": _flul_aggregation, -} - - -def main(_): - """Used by ~benchmarks.aggregate.main to create an aggregation of benchmark results - identified by the commandline flag `--group_name`. Has to be invoked through - abseil `app.run`. - """ - _aggregate() diff --git a/benchmarks/benchmark/aggregation/conftest.py b/benchmarks/benchmark/aggregation/conftest.py deleted file mode 100644 index 125fb0c37..000000000 --- a/benchmarks/benchmark/aggregation/conftest.py +++ /dev/null @@ -1,71 +0,0 @@ -import json -import os -from pathlib import Path - -import pytest - -# TODO: Use TaskResults class to read/write task results -# to have one central way of reading/writing results - -results_unitary = { - # Does not contain all keys which are in a actual results.json file - # just the ones nessecary for the currently existing tests - "task_name": "unitary", - "task_label": "unitary label", - "partition_id": 0, - "hist_opt_configs": None, -} - - -results_federated = { - # Does not contain all keys which are in a actual results.json file - # just the ones nessecary for the currently existing tests - "task_name": "federated", - "task_label": "federated label", - "partition_id": None, - "hist_opt_configs": [ - [{"learning_rate": 0.1}, {"learning_rate": 0.1}], - [{"learning_rate": 0.2}, {"learning_rate": 0.2}], - ], -} - - -@pytest.fixture -def group_dir(tmpdir): - """Group dir with one unitary and one federated task each containing a results.json""" - task_unitary_dir = Path(tmpdir).joinpath("unitary") - task_federated_dir = Path(tmpdir).joinpath("federated") - - os.makedirs(task_unitary_dir) - os.makedirs(task_federated_dir) - - unitary_results_fname = task_unitary_dir.joinpath("results.json") - federated_results_fname = task_federated_dir.joinpath("results.json") - - with open(unitary_results_fname, "w") as outfile: - json.dump(results_unitary, outfile, indent=2, sort_keys=True) - - with open(federated_results_fname, "w") as outfile: - json.dump(results_federated, outfile, indent=2, sort_keys=True) - - return tmpdir - - -@pytest.fixture -def unitary_results_json_fname(tmpdir): - fname = Path(tmpdir).joinpath("results.json") - - with open(fname, "w") as outfile: - json.dump(results_unitary, outfile, indent=2, sort_keys=True) - - return str(fname) - - -@pytest.fixture -def federated_results_json_fname(tmpdir): - fname = Path(tmpdir).joinpath("results.json") - - with open(fname, "w") as outfile: - json.dump(results_federated, outfile, indent=2, sort_keys=True) - - return str(fname) diff --git a/benchmarks/benchmark/aggregation/final_task_accuracies.py b/benchmarks/benchmark/aggregation/final_task_accuracies.py deleted file mode 100644 index 1e6331e63..000000000 --- a/benchmarks/benchmark/aggregation/final_task_accuracies.py +++ /dev/null @@ -1,128 +0,0 @@ -import os -from typing import Dict, List, Optional, Tuple - -from absl import flags - -from benchmarks.helpers import storage -from xain_fl.logger import get_logger -from xain_fl.types import PlotValues, XticksLabels, XticksLocations - -from .plot import plot -from .results import GroupResult, TaskResult - -FLAGS = flags.FLAGS - - -logger = get_logger(__name__) - - -def _read_task_values(task_result: TaskResult) -> Tuple[bool, str, float]: - """Reads unitary and federated accuracy from results.json - - Args: - fname (str): path to results.json file containing required fields - - Returns - class, label, final_accuracy (str, str, float): e.g. ("VisionTask", "cpp01", 0.92) - """ - return ( - task_result.is_unitary(), - task_result.get_label(), - task_result.get_final_accuracy(), - ) - - -def read_all_task_values(group_dir: str) -> List[Tuple[bool, str, float]]: - """ - Reads results directory for given group id and - extracts values from results.json files - - Args: - group_dir (str): path to directory to be read - - """ - task_results = GroupResult(group_dir).get_results() - # Read accuracies from each file and return list of values in tuples - return [_read_task_values(task_result) for task_result in task_results] - - -def group_values_by_class( - values: List[Tuple[bool, str, float]] -) -> Dict[str, List[Tuple[str, float]]]: - # Group values by task_class - unitary_values = [v for v in values if v[0]] - federated_values = [v for v in values if not v[0]] - - grouped_values = { - "Unitary": [(label, acc) for _, label, acc in unitary_values], - "Federated": [(label, acc) for _, label, acc in federated_values], - } - - return grouped_values - - -def _prepare_aggregation_data( - group_name: str -) -> Tuple[List[PlotValues], Optional[Tuple[XticksLocations, XticksLabels]]]: - """Constructs and returns curves and xticks_args. - - Args: - group_name (str): group name for which to construct the curves - - Returns: - A tuple containing a list of `PlotValues` and a list of tuples - containing (`XticksLocations`, `XticksLabels`) - - """ - group_dir = os.path.join(FLAGS.results_dir, group_name) - # List of tuples (benchmark_name, unitary_accuracy, federated_accuracy) - values = read_all_task_values(group_dir=group_dir) - values = sorted(values, key=lambda v: v[1], reverse=True) # sort by - - assert values, "No values for group found" - - grouped_values = group_values_by_class(values) - task_classes = [k for k in grouped_values] - indices = list(range(1, len(grouped_values[task_classes[0]]) + 1)) - labels = [label for label, _ in grouped_values[task_classes[0]]] - - data: List[PlotValues] = [] - - for task_class in grouped_values: - task_class_values = [acc for _, acc in grouped_values[task_class]] - plot_values = (task_class, task_class_values, indices) - data.append(plot_values) - - return (data, (indices, labels)) - - -def aggregate() -> str: - """Plots IID and Non-IID dataset performance comparision - Expects FLAGS.group_name to be set - - Returns: - str: Absolut path to saved plot - """ - group_name = FLAGS.group_name - dname = storage.create_output_subdir(group_name) - fname = storage.fname_with_default_dir("plot_final_task_accuracies.png", dname) - - (data, xticks_args) = _prepare_aggregation_data(group_name) - - assert len(data) == 2, "Expecting a list of two curves" - - fpath = plot( - data, - title="", # TODO - xlabel="IID / Non-IID", - ylabel="Accuracy", - fname=fname, - ylim_max=1.0, - xlim_max=12, - xticks_args=xticks_args, - legend_loc="upper right", - ) - - logger.info("Data plotted and saved in file", filepath=fpath) - - return fpath diff --git a/benchmarks/benchmark/aggregation/final_task_accuracies_test.py b/benchmarks/benchmark/aggregation/final_task_accuracies_test.py deleted file mode 100644 index 723a120cd..000000000 --- a/benchmarks/benchmark/aggregation/final_task_accuracies_test.py +++ /dev/null @@ -1,95 +0,0 @@ -import os - -import pytest -from absl import flags - -from xain_fl.helpers import sha1 - -from . import final_task_accuracies -from .results import TaskResult - -FLAGS = flags.FLAGS - - -@pytest.mark.integration -def test_read_all_task_values(monkeypatch, group_name, results_dir): - # Prepare - other_group_name = "other_group" - assert group_name != other_group_name # just in case - - group_dir = os.path.join(results_dir, group_name) - other_group_dir = os.path.join(results_dir, other_group_name) - - files = [ - f"{group_dir}/task_1/results.json", - f"{group_dir}/task_2/results.json", - f"{other_group_dir}/task_1/results.json", - f"{other_group_dir}/task_2/results.json", - ] - - for fname in files: - dname = os.path.dirname(fname) - os.makedirs(dname) - with open(fname, "x") as f: - f.write("{}") - f.close() - - def mock_read_task_values(task_result: TaskResult): - return task_result - - monkeypatch.setattr( - final_task_accuracies, "_read_task_values", mock_read_task_values - ) - - # Execute - actual_results = final_task_accuracies.read_all_task_values(group_dir) - - # Assert - assert len(actual_results) == 2 - - for r in actual_results: - isinstance(r, TaskResult) - - -@pytest.mark.integration -def test_plot_final_task_accuracies(output_dir, group_name, monkeypatch): - # Prepare - data = [ - ( - "unitary", - [0.96, 0.90, 0.81, 0.72, 0.63, 0.54, 0.45, 0.36, 0.27, 0.18, 0.09], - range(1, 12, 1), - ), - ( - "federated", - [0.92, 0.89, 0.87, 0.85, 0.83, 0.81, 0.80, 0.79, 0.78, 0.77, 0.77], - range(1, 12, 1), - ), - ] - fname = f"plot_final_task_accuracies.png" - expected_filepath = os.path.join(output_dir, group_name, fname) - expected_sha1 = "09270962b7be7d8a92961603712b229bd107cdb3" - - xticks_locations = range(1, 12, 1) - xticks_labels = [chr(i) for i in range(65, 77, 1)] # A, B, ..., K - - def mock_prepare_aggregation_data(_: str): - return (data, (xticks_locations, xticks_labels)) - - monkeypatch.setattr( - final_task_accuracies, - "_prepare_aggregation_data", - mock_prepare_aggregation_data, - ) - - # Execute - actual_filepath = final_task_accuracies.aggregate() - - # If any error occurs we will be able to look at the plot. If the the ploting - # logic is changed the file under this path can be used to get the new hash - # after evaluating the rendered plot - print(actual_filepath) - - # Assert - assert expected_filepath == actual_filepath - assert expected_sha1 == sha1.checksum(actual_filepath), "Checksum not matching" diff --git a/benchmarks/benchmark/aggregation/learning_rate.py b/benchmarks/benchmark/aggregation/learning_rate.py deleted file mode 100644 index 96cdf6ceb..000000000 --- a/benchmarks/benchmark/aggregation/learning_rate.py +++ /dev/null @@ -1,115 +0,0 @@ -import os -from typing import List, Optional, Tuple - -from absl import flags - -from benchmarks.helpers import storage -from xain_fl.logger import get_logger -from xain_fl.types import PlotValues - -from .plot import plot -from .results import GroupResult, TaskResult - -FLAGS = flags.FLAGS - - -logger = get_logger(__name__) - - -def _read_task_values(task_result: TaskResult) -> Tuple[str, Optional[List[float]]]: - """Reads unitary and federated accuracy from results.json - - Args: - fname (str): path to results.json file containing required fields - - Returns - class, label, final_accuracy (str, str, float): e.g. ("VisionTask", "cpp01", 0.92) - """ - return (task_result.get_label(), task_result.get_learning_rates()) - - -def read_all_task_values(group_dir: str) -> List[Tuple[str, List[float]]]: - """ - Reads results directory for given group_dir and returns a list of - tuples with label and list of learning rates - - Args: - group_dir (str): path to directory to be read - - """ - task_results = GroupResult(group_dir).get_results() - # Reatur accuracies from each file and return list of values in tuples - all_tasks = [_read_task_values(task_result) for task_result in task_results] - - federated_tasks = [ - (label, learning_rates) - for label, learning_rates in all_tasks - if learning_rates is not None - ] - - return federated_tasks - - -def _prepare_aggregation_data(group_name: str) -> List[PlotValues]: - """Constructs and returns learning rate curves - - Args: - group_name (str): group name for which to construct the curves - - Returns: - A list of `PlotValues`. - """ - group_dir = os.path.join(FLAGS.results_dir, group_name) - # List of tuples (benchmark_name, unitary_accuracy, federated_accuracy) - labels_and_lrs = read_all_task_values(group_dir=group_dir) - - assert labels_and_lrs, "No values for group found" - - return [ - (label, lrs, [i for i in range(1, len(lrs) + 1, 1)]) - for label, lrs in labels_and_lrs - ] - - -def aggregate() -> str: - """Plots learning rate for federated tasks in a group - Expects FLAGS.group_name to be set - - Returns: - str: Absolut path to saved plot - """ - group_name = FLAGS.group_name - dname = storage.create_output_subdir(group_name) - fname = storage.fname_with_default_dir("plot_learning_rates.png", dname) - - data = _prepare_aggregation_data(group_name) - - ylim_max: float = 0 - xlim_max = 0 - - for _, lrs, ylabel in data: - if ylabel is not None: - xlim_max = max(ylabel + [xlim_max]) - - for lr in lrs: - ylim_max = max(lr, ylim_max) - - ylim_max *= 1.1 - xlim_max += 1 - - assert data, "Expecting a list with at least one item" - - fpath = plot( - data, - title="Optimizer learning rates for federated training tasks", - xlabel="round", - ylabel="learning rate", - fname=fname, - ylim_max=ylim_max, - xlim_max=xlim_max, - legend_loc="upper right", - ) - - logger.info("Data plotted and saved in file", filepath=fpath) - - return fpath diff --git a/benchmarks/benchmark/aggregation/learning_rate_test.py b/benchmarks/benchmark/aggregation/learning_rate_test.py deleted file mode 100644 index 617b2988c..000000000 --- a/benchmarks/benchmark/aggregation/learning_rate_test.py +++ /dev/null @@ -1,56 +0,0 @@ -import os - -import pytest -from absl import flags - -from xain_fl.helpers import sha1 -from xain_fl.logger import get_logger - -from . import learning_rate - -FLAGS = flags.FLAGS - -logger = get_logger(__name__) - - -@pytest.mark.integration -def test_read_all_task_values(group_dir): - # Prepare - expected_results = [("federated label", [0.1, 0.2])] - - # Execute - actual_results = learning_rate.read_all_task_values(group_dir) - - # Assert - assert actual_results == expected_results - - -@pytest.mark.integration -def test_plot_learning_rate(output_dir, group_name, monkeypatch): - # Prepare - data = [ - ("federated 1 - label", [0.10, 0.05, 0.03, 0.02], [1, 2, 3, 4]), - ("federated 2 - label", [0.09, 0.07, 0.06, 0.04], [1, 2, 3, 4]), - ] - fname = f"plot_learning_rates.png" - expected_filepath = os.path.join(output_dir, group_name, fname) - expected_sha1 = "599daf7563f41289a8eed2b59aba3c5d312eeab1" - - def mock_prepare_aggregation_data(_: str): - return data - - monkeypatch.setattr( - learning_rate, "_prepare_aggregation_data", mock_prepare_aggregation_data - ) - - # Execute - actual_filepath = learning_rate.aggregate() - - # If any error occurs we will be able to look at the plot. If the the ploting - # logic is changed the file under this path can be used to get the new hash - # after evaluating the rendered plot - logger.info(actual_filepath) - - # Assert - assert expected_filepath == actual_filepath - assert expected_sha1 == sha1.checksum(actual_filepath), "Checksum not matching" diff --git a/benchmarks/benchmark/aggregation/participant_hist.py b/benchmarks/benchmark/aggregation/participant_hist.py deleted file mode 100644 index 09ff1d7e7..000000000 --- a/benchmarks/benchmark/aggregation/participant_hist.py +++ /dev/null @@ -1,142 +0,0 @@ -"""Functions for getting participant selection history""" - -import os -from typing import List, Tuple - -import numpy as np -from absl import app, flags -from numpy import ndarray - -from benchmarks.benchmark.aggregation.plot import plot_history_data -from benchmarks.benchmark.aggregation.results import GroupResult, TaskResult -from benchmarks.helpers.storage import create_output_subdir, fname_with_default_dir -from xain_fl.logger import get_logger -from xain_fl.types import Metrics - -FLAGS = flags.FLAGS - -logger = get_logger(__name__) - - -def participant_history() -> List[str]: - """Plot participant selection histories for group name flag. - - For each task result in the group name flag extract the task metrics (number of - participants, task label, hist metrics), transform them into heatmap data as participant - indices x training rounds and plot/save them as participant selection history. - - Returns: - ~typing.List[str]: File paths for saved plots. - """ - - group_name: str = FLAGS.group_name - dir_name: str = create_output_subdir(dname=group_name) - file_pre_name: str = fname_with_default_dir( - fname="plot_participant_history_{}.png", dname=dir_name - ) - file_paths: List[str] = list() - - # Getting history metrics data from results.json - hist_metrics_group: List[Tuple[int, str, List[List[Metrics]]]] = get_hist_metrics( - group_name=group_name - ) - - # Creates heatmap data for each task metric in group metrics - matrices: List[Tuple[str, ndarray]] = list(map(heatmap_data, hist_metrics_group)) - - for task_matrix in matrices: - label: str = task_matrix[0] - matrix: ndarray = task_matrix[1] - - file_path: str = plot_history_data( - matrix=matrix, - title="Participant Selection History", - file_name=file_pre_name.format(label), - save=True, - show=False, - ) - file_paths.append(file_path) - - logger.info("Task data plotted and saved in file", filepath=file_paths) - - return file_paths - - -def get_hist_metrics(group_name: str) -> List[Tuple[int, str, List[List[Metrics]]]]: - """Get the task metrics for a group name. - - Extract number of participants, task label and hist metrics for each federated task - metric in a group name and put them into a list. - - Args: - group_name (str): Group name for which metrics should be extracted. - - Returns: - List[Tuple[int, str, List[List[Metrics]]]]: List of metrics for each task. - """ - - group_dir: str = os.path.join(FLAGS.results_dir, group_name) - task_results: List[TaskResult] = GroupResult(group_dir=group_dir).get_results() - - # Extract metrics for each federated task result in group result - metrics: List[Tuple[int, str, List[List[Metrics]]]] = [ - read_task_metrics(task_result=task_result) - for task_result in task_results - if task_result.is_unitary() is False - ] - - return metrics - - -def heatmap_data(metric: Tuple[int, str, List[List[Metrics]]]) -> Tuple[str, ndarray]: - """Heatmap data for a given task metric. - - Creates the heatmap data as participant x train rounds numpy matrix for a given task metric - and sets those matrix values to 1, that indices correspond to participant indices and train - rounds in the given task history metrics. - - Args: - metric (Tuple[int, List[List[Metrics]]]): Task metric consisting of number of participants - and hist metrics for a task. - - Returns: - ~typing.Tuple[str, numpy.ndarray]: Task label and participant x train rounds matrix with - value 1 for each participant indice - """ - - num_participants, task_label, hist_metrics = metric - train_rounds: int = len(hist_metrics) - - # Create heatmap matrix with participants as rows and train rounds as columns - heat_map: ndarray = np.zeros((num_participants, train_rounds)) - - # Collect participants indices for each training round - rows: ndarray = np.asarray(hist_metrics, dtype=object)[:, :, 0].astype(int) - # Array of linspace training rounds, each wrapped into an array - columns: ndarray = np.split(np.arange(train_rounds), train_rounds) - heat_map[rows, columns] = 1 - - return (task_label, heat_map) - - -def read_task_metrics(task_result: TaskResult) -> Tuple[int, str, List[List[Metrics]]]: - """Get number of participants, task label and history metrics for a task result. - - Args: - task_result (TaskResult): Results data for a task. - - Returns: - Tuple[int, str, List[List[Metrics]]]: Number of participants, task label and hist - metrics in a tuple. - """ - - return ( - task_result.get_num_participants(), - task_result.get_label(), - task_result.get_hist_metrics(), - ) - - -def app_run_participant_hist(): - flags.mark_flag_as_required("group_name") - app.run(main=lambda _: participant_history()) diff --git a/benchmarks/benchmark/aggregation/plot.py b/benchmarks/benchmark/aggregation/plot.py deleted file mode 100644 index 1ed80b5ff..000000000 --- a/benchmarks/benchmark/aggregation/plot.py +++ /dev/null @@ -1,211 +0,0 @@ -from typing import List, Optional, Tuple - -import matplotlib -import numpy as np -from absl import flags -from matplotlib.colors import ListedColormap -from numpy import ndarray - -from benchmarks.helpers import storage -from xain_fl.types import PlotValues - -matplotlib.use("AGG") - -# To avoid issues with tkinter we need to set the renderer -# for matplotlib before importing pyplot -# As isort would move this line under the "import matplotlib" -# We need to skip isort explicitly -# pylint: disable-msg=wrong-import-position, wrong-import-order -import matplotlib.pyplot as plt # isort:skip - -FORMAT = "png" - -FLAGS = flags.FLAGS - - -def plot( - data: List[PlotValues], - title: Optional[str] = None, - xlabel: str = "Epoch", - ylabel: str = None, - fname: Optional[str] = None, - save: bool = True, - show: bool = False, - ylim_max: float = 1.0, - xlim_max: float = 40.0, - xticks_args: Optional[Tuple[List[int], List[str]]] = None, - legend_loc: str = "lower right", - vline: bool = False, -) -> str: - """Wrapper for plt.plot so have uniform plots in the project - - Args: - data (List[Tuple[name, values, Optional[indices]]]): List of tuples where each - represents a line in the plot with tuple - beeing (name, values, Optional[indices]) - save (bool): Indicates if plot should be saved to disk. Defaults to True - - Returns: - str: For save=True returns absolut path to saved file otherwise None - """ - assert fname is not None - - # if fname is an absolute path use fname directly otherwise assume - # fname is filename and prepend output_dir - fname_abspath = storage.fname_with_default_dir(fname, FLAGS.output_dir) - - plt.figure() - plt.ylim(0.0, ylim_max) - plt.xlim(0.0, xlim_max) - - if xticks_args is not None: - xticks_locations, xticks_labels = xticks_args - # if any label has length > 3 rotate labels by 90 degrees - rot = 90 if any([len(l) > 3 for l in xticks_labels]) else 0 - plt.xticks(xticks_locations, xticks_labels, rotation=rot) - - if title is not None: - plt.title(title) - - plt.xlabel(xlabel) - plt.ylabel(ylabel) - - if vline: - plt.axvline(x=50.0) - - data.sort(key=lambda c: c[0]) - - legend = [] - for name, values, indices in data: - legend.append(name) - - if indices is None: - # x values are optional and default to range(len(values)) - plt.plot(values) - else: - assert len(values) == len(indices) - plt.plot(indices, values) - - plt.legend(legend, loc=legend_loc) - - # https://matplotlib.org/users/tight_layout_guide.html - plt.tight_layout() - - if save: - plt.savefig(fname=fname_abspath, format=FORMAT) - if show: - plt.show() - plt.close() - - return fname_abspath - - -def plot_history_data( - matrix: ndarray, - file_name: str, - title: Optional[str] = None, - xlabel: str = "Training rounds", - ylabel: str = "Participants", - save: bool = True, - show: bool = False, -) -> str: - """Plot participant selection history. - - Plots or saves the participant selection history of an input matrix - as 2D regular raster with training rounds vs participants. - - Args: - matrix (~numpy.ndarray): Image data for a 2D regular raster. - file_name (str): File name for storable plot. - title (~typing.Optional[str]): Title of the plot. - xlabel (str): Label for x-axis. - ylabel (str): Label for y-axis. - save (bool): If the plot should be stored as png. - show (bool): If the plot should be shown. - - Returns: - str: File name of the plot as absolute path. - """ - - file_name_abspath: str = storage.fname_with_default_dir( - fname=file_name, dname=FLAGS.output_dir - ) - - # Creating figure with subplot - _, ax = plt.subplots(figsize=(11, 9)) - - # more information about colormaps: https://matplotlib.org/3.1.1/tutorials/colors/colormaps.html - color_map_name: str = "YlGn" - color_map: ListedColormap = prepare_colormap(name=color_map_name) - - im = ax.imshow(matrix, cmap=color_map, interpolation="nearest", aspect="auto") - - ax.figure.colorbar(im, ax=ax) - - # maxima for x and y axis - x_max: int = matrix.shape[1] - y_max: int = matrix.shape[0] - - # Major ticks - ax.set_xticks(np.arange(0, x_max, 1)) - ax.set_yticks(np.arange(0, y_max, 5)) - - # Labels for major ticks - ax.set_xticklabels(np.arange(1, x_max, 1)) - ax.set_yticklabels(np.arange(0, y_max, 5)) - - # Display only each 2nd x-axis tick label - for x_tick_label in ax.xaxis.get_ticklabels()[::2]: - x_tick_label.set_visible(False) - - # Minor ticks - ax.set_xticks(np.arange(-0.5, x_max, 1), minor=True) - ax.set_yticks(np.arange(-0.5, y_max, 1), minor=True) - - # turn off gridline visibility for x and y axis - ax.tick_params(axis="both", which="minor", length=0) - - # Gridlines based on minor ticks - ax.grid(which="minor", color="w", linestyle="-", linewidth=2) - - ax.set_xlabel(xlabel, fontsize=14) - ax.set_ylabel(ylabel, fontsize=14) - - # Set plot title if present - if title is not None: - ax.set_title(title, fontsize=14) - - plt.tight_layout() - - # Saving and showing plot - if save: - plt.savefig(fname=file_name_abspath, format=FORMAT) - if show: - plt.show(block=True) - plt.close() - - return file_name_abspath - - -def prepare_colormap(name: str) -> ListedColormap: - """Creates a colormap with color grey as 0 value. - - Prepares a downscaled colormap (256 -> 40) from a colormap name and - puts in color grey for value 0. - - Args: - name (str): Name of the colormap to be scaled. - - Returns: - ~matplotlib.colors.ListedColormap: Downscaled color map. - """ - - # downscaled colormap (256 -> 40) - color_map: ListedColormap = matplotlib.cm.get_cmap(name, 40) - map_scaled: ndarray = color_map(np.linspace(0, 1, 40)) - - grey: ndarray = np.array([0, 0, 0, 0.1]) - # put in color grey as first entry - map_scaled[0, :] = grey - - return ListedColormap(map_scaled) diff --git a/benchmarks/benchmark/aggregation/results.py b/benchmarks/benchmark/aggregation/results.py deleted file mode 100644 index 34a0eae82..000000000 --- a/benchmarks/benchmark/aggregation/results.py +++ /dev/null @@ -1,112 +0,0 @@ -"""Provides the classes TaskResult and GroupResult which wrap -the results of a benchmark group and provide easy access to the -results contained in the results.json files in each tasks results -""" -import os -from abc import ABC -from typing import List, Optional, cast - -from benchmarks.helpers import storage -from xain_fl.types import Metrics - - -class TaskResult(ABC): - """Provides predictable access to task results""" - - def __init__(self, fname: str): - self.data = storage.read_json(fname) - - def get_name(self) -> str: - return self.data["task_name"] - - def get_label(self) -> str: - return self.data["task_label"] - - def get_final_accuracy(self) -> float: - return self.data["acc"] - - def get_accuracies(self) -> List[float]: - return self.data["hist"]["val_acc"] - - def get_learning_rates(self) -> Optional[List[float]]: - """Will extract learning rate for federated task results in each round - from hist_opt_configs which has a List[List[Dict[str, any]]] type. The - top level list contains ROUNDS elements and the second level lists - contain number of participants dictionaries (one for each participant). - As unitary task results don't have a history of optimizer configs - None will be returned. - """ - if self.is_unitary(): - return None - - hist_opt_configs = self.data["hist_opt_configs"] - - # Extract learning rate only from the first participant as the participants - # share the same learning rate in each round - learning_rates = [ - participants_in_round[0]["learning_rate"] - for participants_in_round in hist_opt_configs - ] - - return learning_rates - - def get_E(self) -> int: - return self.data["E"] - - def is_unitary(self) -> bool: - return self.data["partition_id"] is not None - - def get_hist_metrics(self) -> List[List[Metrics]]: - """Get history metrics from a task result. - - Extracts history metrics for each training round as list of - participant indice and VolumeByClass values. - - Returns: - ~typing.List[~typing.List[Metrics]]: List of hist metrics for each training round. - """ - - hist_metrics = [ - [tuple(metric) for metric in round_metric] - for round_metric in self.data["hist_metrics"] - ] - # mypy is not able to handle list comprehension here correctly - return cast(List[List[Metrics]], hist_metrics) - - def get_num_participants(self) -> int: - """Get the number of participants. - - Returns: - int: Number of participants. - """ - - return self.data["num_participants"] - - -class GroupResult(ABC): - """Provides predictable access to the results of all tasks in a group""" - - def __init__(self, group_dir: str): - assert os.path.isdir(group_dir) - - # get list of all directories which contain given substring - json_files = [ - fname - for fname in storage.listdir_recursive(group_dir, relpath=False) - if fname.endswith("results.json") - ] - - if not json_files: - raise Exception(f"No values results found in group_dir: {group_dir}") - - self.task_results = [TaskResult(fname) for fname in json_files] - - def get_results(self) -> List[TaskResult]: - """Provides a list of TaskResult instances which will enable easy - access to the results of a benchmark scenario - - Returns: - List[TaskResult]: Each item in the list corrosponds to one task in the - benchmark scenario - """ - return self.task_results diff --git a/benchmarks/benchmark/aggregation/results_test.py b/benchmarks/benchmark/aggregation/results_test.py deleted file mode 100644 index f77672db0..000000000 --- a/benchmarks/benchmark/aggregation/results_test.py +++ /dev/null @@ -1,32 +0,0 @@ -from typing import List - -from .results import TaskResult - - -def test_get_learning_rates_unitary(unitary_results_json_fname): - # Prepare - result = TaskResult(unitary_results_json_fname) - - # Execute - learning_rates = result.get_learning_rates() - - # Assert - assert learning_rates is None - - -def test_get_learning_rates_federated(federated_results_json_fname): - # Prepare - result = TaskResult(federated_results_json_fname) - - expected_lr_round_1 = 0.1 - expected_lr_round_2 = 0.2 - - # Execute - learning_rates: List[float] = result.get_learning_rates() - - # Assert - assert isinstance(learning_rates, list) - assert len(learning_rates) == 2 - - assert learning_rates[0] == expected_lr_round_1 - assert learning_rates[1] == expected_lr_round_2 diff --git a/benchmarks/benchmark/aggregation/task_accuracies.py b/benchmarks/benchmark/aggregation/task_accuracies.py deleted file mode 100644 index 592f8e4db..000000000 --- a/benchmarks/benchmark/aggregation/task_accuracies.py +++ /dev/null @@ -1,120 +0,0 @@ -import os -from typing import List, Tuple - -from absl import flags - -from benchmarks.helpers import storage -from xain_fl.logger import get_logger -from xain_fl.types import PlotValues - -from .plot import plot -from .results import GroupResult, TaskResult - -FLAGS = flags.FLAGS - - -logger = get_logger(__name__) - - -def _read_task_values(task_result: TaskResult) -> Tuple[bool, str, List[float], int]: - """Reads unitary and federated accuracy from results.json. - - Args: - fname (str): Path to results.json file containing required fields. - - Example: - >>> print(read_task_values(task_result)) - (false, "VisionTask", [0.12, 0.33], 5) - - Returns: - ~typing.Tuple[bool, str, ~typing.List[float], int]: Tuple consisting of information, - if the task is unitary or not, the task label, a list of accuracies and the epochs. - """ - return ( - task_result.is_unitary(), - task_result.get_label(), - task_result.get_accuracies(), - task_result.get_E(), - ) - - -def read_all_task_values(group_dir: str) -> List[Tuple[bool, str, List[float], int]]: - """Reads results directory for given group id and extracts values from results.json files. - - Args: - group_dir (str): Path to group directory to be read. - - Example: - >>> print(read_all_task_values(group_dir)) - [(false, "VisionTask", [0.12, 0.33], 5), (true, "UnitaryTask", [0.23, 0.34], 2),...] - - Returns: - ~typing.List[typing.Tuple[bool, str, ~typing.List[float], int]]: List of tuples consisting - of information, if the task is unitary or not, the task label, a list of accuracies and - the epochs. - """ - task_results = GroupResult(group_dir).get_results() - # Read accuracies from each file and return list of values in tuples - return [_read_task_values(task_result) for task_result in task_results] - - -def build_plot_values(values: Tuple[bool, str, List[float], int]) -> PlotValues: - """Returns PlotValues with appropriate indices based on task class (Unitary or Federated)""" - is_unitary, task_label, task_accuracies, E = values - - if is_unitary: - indices = [i for i in range(1, len(task_accuracies) + 1, 1)] - else: - indices = [i for i in range(E, len(task_accuracies) * E + 1, E)] - - return (task_label, task_accuracies, indices) - - -def _prepare_aggregation_data(group_name: str) -> List[PlotValues]: - """Constructs and returns curves and xticks_args - - Args: - group_name (str): group name for which to construct the curves - - Returns: - A list of `PlotValues`. - """ - group_dir = os.path.join(FLAGS.results_dir, group_name) - # List of tuples (benchmark_name, unitary_accuracy, federated_accuracy) - values = read_all_task_values(group_dir=group_dir) - - assert values, "No values for group found" - - data: List[PlotValues] = list(map(build_plot_values, values)) - - return data - - -def aggregate() -> str: - """Plots task accuracies for all federated tasks in a group - Expects FLAGS.group_name to be set - - Returns: - str: Absolut path to saved plot - """ - group_name = FLAGS.group_name - dname = storage.create_output_subdir(group_name) - fname = storage.fname_with_default_dir("plot_task_accuracies.png", dname) - - data = _prepare_aggregation_data(group_name) - - # Take highest length of values list as xlim_max - xlim_max = max([len(values) for _, values, _ in data]) + 1 - - fpath = plot( - data, - title="", # TODO - ylabel="Accuracy", - fname=fname, - ylim_max=1.0, - xlim_max=xlim_max, - ) - - logger.info("Data plotted and saved in file", filepath=fpath) - - return fpath diff --git a/benchmarks/benchmark/aggregation/task_accuracies_test.py b/benchmarks/benchmark/aggregation/task_accuracies_test.py deleted file mode 100644 index b9e47d2cf..000000000 --- a/benchmarks/benchmark/aggregation/task_accuracies_test.py +++ /dev/null @@ -1,46 +0,0 @@ -import os - -import pytest - -from xain_fl.helpers import sha1 - -from . import task_accuracies - - -@pytest.mark.integration -def test_plot_task_accuracies(output_dir, group_name, monkeypatch): - # Prepare - data = [ - ( - "unitary", - [0.96, 0.90, 0.81, 0.72, 0.63, 0.54, 0.45, 0.36, 0.27, 0.18, 0.09], - range(1, 12, 1), - ), - ( - "federated", - [0.92, 0.89, 0.87, 0.85, 0.83, 0.81, 0.80, 0.79, 0.78, 0.77, 0.77], - range(1, 12, 1), - ), - ] - fname = f"plot_task_accuracies.png" - expected_filepath = os.path.join(output_dir, group_name, fname) - expected_sha1 = "54b9c71e6890fa3083029c88544a51ca4a2ad480" - - def mock_prepare_aggregation_data(_: str): - return data - - monkeypatch.setattr( - task_accuracies, "_prepare_aggregation_data", mock_prepare_aggregation_data - ) - - # Execute - actual_filepath = task_accuracies.aggregate() - - # If any error occurs we will be able to look at the plot. If the the ploting - # logic is changed the file under this path can be used to get the new hash - # after evaluating the rendered plot - print(actual_filepath) - - # Assert - assert expected_filepath == actual_filepath - assert expected_sha1 == sha1.checksum(actual_filepath), "Checksum not matching" diff --git a/benchmarks/benchmark/bench_cl.py b/benchmarks/benchmark/bench_cl.py deleted file mode 100644 index 544e4ed09..000000000 --- a/benchmarks/benchmark/bench_cl.py +++ /dev/null @@ -1,112 +0,0 @@ -"""Experimental""" -import time - -import tensorflow as tf -from absl import app - -from benchmarks.helpers import storage -from xain_fl.logger import get_logger - -from .exec import run - -logger = get_logger(__name__) - -B = 64 - - -def bench_cl90(_): - """ - This benchmark compares training on the full (original) Fashion-MNIST dataset using - (a) the participant directly and (b) the coordinator with only one participant. - Results should not vary apart from the expected non-determinism during training. - """ - logger.info("Starting CL on full Fashion-MNIST") - # Load original Fashion-MNIST - xy_train, xy_val, xy_test = data(limit=False) - bench_cl_ul( - "cl90-using-participant", - xy_train, - xy_val, - xy_test, - epochs=10, - use_coordinator=False, - ) - bench_cl_ul( - "cl90-using-coordinator", - xy_train, - xy_val, - xy_test, - epochs=10, - use_coordinator=True, - ) - - -def bench_ul80(_): - """ - This benchmark compares training on a subset (550 examples) of the original - Fashion-MNIST dataset using (a) the participant directly and (b) the coordinator with - only one participant. Results should not vary apart from the usual non-determinism - during training. - """ - logger.info("Starting UL on 550-example Fashion-MNIST subset") - # Load original Fashion-MNIST subset - xy_train, xy_val, xy_test = data(limit=True) - bench_cl_ul( - "ul80-using-participant", - xy_train, - xy_val, - xy_test, - epochs=100, - use_coordinator=False, - ) - bench_cl_ul( - "ul80-using-coordinator", - xy_train, - xy_val, - xy_test, - epochs=100, - use_coordinator=True, - ) - - -def bench_cl_ul( - name: str, xy_train, xy_val, xy_test, epochs: int, use_coordinator: bool -): - start = time.time() - if use_coordinator: - hist, _, _, _, loss, acc = run.federated_training( - "blog_cnn", [xy_train], xy_val, xy_test, R=epochs, E=1, C=0, B=B - ) - else: - hist, loss, acc = run.unitary_training( - "blog_cnn", xy_train, xy_val, xy_test, E=epochs, B=B - ) - end = time.time() - - # Write results JSON - results = { - "name": name, - "start": start, - "end": end, - "duration": end - start, - "E": epochs, - "B": B, - "unitary_learning": {"loss": float(loss), "acc": float(acc), "hist": hist}, - } - storage.write_json(results, fname=name + "-results.json") - - -def data(limit: bool): - (x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data() - # Split xy_val - (x_train, x_valid) = x_train[5000:], x_train[:5000] - (y_train, y_valid) = y_train[5000:], y_train[:5000] - # Subset - if limit: - x_train = x_train[:550] - y_train = y_train[:550] - return (x_train, y_train), (x_valid, y_valid), (x_test, y_test) - - -if __name__ == "__main__": - app.run(main=bench_ul80) diff --git a/benchmarks/benchmark/bench_ea.py b/benchmarks/benchmark/bench_ea.py deleted file mode 100644 index 6a2af83fe..000000000 --- a/benchmarks/benchmark/bench_ea.py +++ /dev/null @@ -1,76 +0,0 @@ -"""Experimental""" -from absl import app - -from benchmarks.benchmark.exec import run -from benchmarks.benchmark.net import orig_cnn_compiled -from benchmarks.helpers import storage -from xain_fl.datasets import load_splits -from xain_fl.fl.coordinator.aggregate import EvoAgg -from xain_fl.fl.coordinator.evaluator import Evaluator -from xain_fl.logger import get_logger - -logger = get_logger(__name__) - - -DEFAULT_R = 50 -DEFAULT_E = 1 # Number of training epochs in each round -DEFAULT_C = 0.3 # Fraction of participants used in each round of training -DEFAULT_B = 32 # Batch size used by participants - - -def benchmark_evolutionary_avg(): - fn_name = benchmark_evolutionary_avg.__name__ - logger.info("Starting {}".format(fn_name)) - - # Load dataset - xy_parts, xy_val, xy_test = load_splits("fashion-mnist-100p-noniid-03cpp") - - # Run Federated Learning with evolutionary aggregation - evaluator = Evaluator(orig_cnn_compiled(), xy_val) # FIXME refactor - aggregator = EvoAgg(evaluator) - _, _, _, _, loss_a, acc_a = run.federated_training( - "blog_cnn", - xy_parts, - xy_val, - xy_test, - R=DEFAULT_R, - E=DEFAULT_E, - C=DEFAULT_C, - B=DEFAULT_B, - aggregator=aggregator, - ) - - # Run Federated Learning with weighted average aggregation - _, _, _, _, loss_b, acc_b = run.federated_training( - "blog_cnn", - xy_parts, - xy_val, - xy_test, - R=DEFAULT_R, - E=DEFAULT_E, - C=DEFAULT_C, - B=DEFAULT_B, - ) - - # Write results JSON - results = {} - results["loss_a"] = float(loss_a) - results["acc_a"] = float(acc_a) - results["loss_b"] = float(loss_b) - results["acc_b"] = float(acc_b) - # TODO add histories - storage.write_json(results, fname="EA-WA-results.json") - - -def benchmark_evolutionary_avg_with_noise(): - fn_name = benchmark_evolutionary_avg.__name__ - logger.info("Starting {}".format(fn_name)) - raise NotImplementedError() - - -def main(_): - benchmark_evolutionary_avg() - - -if __name__ == "__main__": - app.run(main=main) diff --git a/benchmarks/benchmark/benchmark.py b/benchmarks/benchmark/benchmark.py deleted file mode 100644 index ea9aae7f3..000000000 --- a/benchmarks/benchmark/benchmark.py +++ /dev/null @@ -1,848 +0,0 @@ -"""Contains a set of benchmark scenarios expressed using a simple DSL. -""" -import os -from tempfile import TemporaryDirectory -from time import strftime -from typing import Dict, List, Optional - -from absl import flags - -from benchmarks.helpers import storage -from benchmarks.ops import docker, results, run -from xain_fl.logger import get_logger - -from .task import Task, UnitaryVisionTask, VisionTask - -logger = get_logger(__name__) - - -FLAGS = flags.FLAGS - - -class Benchmark: - """DSL primitive used to represent a single benchmark scenario.""" - - def __init__(self, tasks: List[Task], aggregation_name: str, runner: str = "ec2"): - """Initializes Benchmark. - - Args: - tasks (List[Task]): List of tasks to be performed as part of the benchmark - aggregation_name (str): One of the aggregation names in - ~benchmarks.aggregation.aggregation.aggregations - runner (str): One of "ec2" or "docker" - """ - self.tasks = tasks - self.aggregation_name = aggregation_name - self.runner = runner - - -benchmarks: Dict[str, Benchmark] = { - # - # ############################## - # UL/FL CPP - # ############################## - # - "flul-fashion-mnist-100p-iid-balanced": Benchmark( - tasks=[ - UnitaryVisionTask( - name="unitary", - label="Unitary", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - E=100, - partition_id=0, - instance_cores=8, - ), - VisionTask( - name="federated", - label="Federated", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=120, - ), - ], - aggregation_name="flul-aggregation", - ), - "flul-fashion-mnist-100p-noniid-05cpp": Benchmark( - tasks=[ - UnitaryVisionTask( - name="unitary", - label="Unitary", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - E=100, - partition_id=0, - instance_cores=8, - ), - VisionTask( - name="federated", - label="Federated", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=120, - ), - ], - aggregation_name="flul-aggregation", - ), - # - # ############################## - # UL/FL VOL - # ############################## - # - "flul-fashion-mnist-100p-b1_045": Benchmark( - tasks=[ - UnitaryVisionTask( - name="unitary_p0", - label='"Unitary (n=30)"', # low volume - dataset_name="fashion-mnist-100p-b1_045", - model_name="orig_cnn", - E=100, - B=16, - partition_id=0, - instance_cores=16, - timeout=120, - ), - UnitaryVisionTask( - name="unitary_p99", - label='"Unitary (n=2356)"', # high volume - dataset_name="fashion-mnist-100p-b1_045", - model_name="orig_cnn", - E=100, - B=16, - partition_id=99, - instance_cores=16, - timeout=120, - ), - VisionTask( - name="federated", - label="Federated", - dataset_name="fashion-mnist-100p-b1_045", - model_name="orig_cnn", - R=100, - E=1, - B=16, - instance_cores=32, - timeout=120, - ), - ], - aggregation_name="flul-aggregation", - ), - # - # ############################## - # CPP CONTINUUM - # ############################## - # - "cpp-fashion-mnist-100p": Benchmark( - tasks=[ - VisionTask( - name="federated-01cpp", - label="01cpp", - dataset_name="fashion-mnist-100p-noniid-01cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-02cpp", - label="02cpp", - dataset_name="fashion-mnist-100p-noniid-02cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-03cpp", - label="03cpp", - dataset_name="fashion-mnist-100p-noniid-03cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-04cpp", - label="04cpp", - dataset_name="fashion-mnist-100p-noniid-04cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-05cpp", - label="05cpp", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-06cpp", - label="06cpp", - dataset_name="fashion-mnist-100p-noniid-06cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-07cpp", - label="07cpp", - dataset_name="fashion-mnist-100p-noniid-07cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-08cpp", - label="08cpp", - dataset_name="fashion-mnist-100p-noniid-08cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-09cpp", - label="09cpp", - dataset_name="fashion-mnist-100p-noniid-09cpp", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - VisionTask( - name="federated-balanced", - label="balanced", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=100, - E=1, - instance_cores=32, - timeout=180, - ), - UnitaryVisionTask( - name="unitary-01cpp", - label="01cpp", - dataset_name="fashion-mnist-100p-noniid-01cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-02cpp", - label="02cpp", - dataset_name="fashion-mnist-100p-noniid-02cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-03cpp", - label="03cpp", - dataset_name="fashion-mnist-100p-noniid-03cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-04cpp", - label="04cpp", - dataset_name="fashion-mnist-100p-noniid-04cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-05cpp", - label="05cpp", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-06cpp", - label="06cpp", - dataset_name="fashion-mnist-100p-noniid-06cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-07cpp", - label="07cpp", - dataset_name="fashion-mnist-100p-noniid-07cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-08cpp", - label="08cpp", - dataset_name="fashion-mnist-100p-noniid-08cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-09cpp", - label="09cpp", - dataset_name="fashion-mnist-100p-noniid-09cpp", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - UnitaryVisionTask( - name="unitary-balanced", - label="balanced", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - E=100, - instance_cores=16, - ), - ], - aggregation_name="cpp-aggregation", - ), - # - # ############################## - # VOL CONTINUUM - # ############################## - # - ## TODO - # - # ############################## - # C LOW-TO-HIGH - # ############################## - # - "C-fashion-mnist-100p-noniid-03cpp": Benchmark( - tasks=[ - VisionTask( - name="federated-C0_01", - label="C=0.01", - dataset_name="fashion-mnist-100p-noniid-03cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.01, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_03", - label="C=0.03", - dataset_name="fashion-mnist-100p-noniid-03cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.03, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_10", - label="C=0.1", - dataset_name="fashion-mnist-100p-noniid-03cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.1, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_20", - label="C=0.2", - dataset_name="fashion-mnist-100p-noniid-03cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.2, - instance_cores=32, - timeout=240, - ), - ], - aggregation_name="flul-aggregation", - ), - "C-fashion-mnist-100p-noniid-05cpp": Benchmark( - tasks=[ - VisionTask( - name="federated-C0_01", - label="C=0.01", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.01, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_03", - label="C=0.03", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.03, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_10", - label="C=0.1", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.1, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_20", - label="C=0.2", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.2, - instance_cores=32, - timeout=240, - ), - ], - aggregation_name="flul-aggregation", - ), - "C-fashion-mnist-100p-noniid-09cpp": Benchmark( - tasks=[ - VisionTask( - name="federated-C0_01", - label="C=0.01", - dataset_name="fashion-mnist-100p-noniid-09cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.01, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_03", - label="C=0.03", - dataset_name="fashion-mnist-100p-noniid-09cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.03, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_10", - label="C=0.1", - dataset_name="fashion-mnist-100p-noniid-09cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.1, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_20", - label="C=0.2", - dataset_name="fashion-mnist-100p-noniid-09cpp", - model_name="orig_cnn", - R=50, - E=1, - C=0.2, - instance_cores=32, - timeout=240, - ), - ], - aggregation_name="flul-aggregation", - ), - "C-fashion-mnist-100p-iid-balanced": Benchmark( - tasks=[ - VisionTask( - name="federated-C0_01", - label="C=0.01", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=50, - E=1, - C=0.01, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_03", - label="C=0.03", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=50, - E=1, - C=0.03, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_10", - label="C=0.1", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=50, - E=1, - C=0.1, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-C0_20", - label="C=0.2", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=50, - E=1, - C=0.2, - instance_cores=32, - timeout=240, - ), - ], - aggregation_name="flul-aggregation", - ), - # - # ############################## - # E LOW-TO-HIGH - # ############################## - # - "E-fashion-mnist-100p-iid-balanced": Benchmark( - tasks=[ - VisionTask( - name="federated-E01", - label="E=01", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=128, - E=1, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E02", - label="E=02", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=64, - E=2, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E04", - label="E=04", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=32, - E=4, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E08", - label="E=08", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=16, - E=8, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E16", - label="E=16", - dataset_name="fashion-mnist-100p-iid-balanced", - model_name="orig_cnn", - R=8, - E=16, - instance_cores=32, - timeout=120, - ), - ], - aggregation_name="flul-aggregation", - ), - "E-fashion-mnist-100p-noniid-08cpp": Benchmark( - tasks=[ - VisionTask( - name="federated-E01", - label="E=01", - dataset_name="fashion-mnist-100p-noniid-08cpp", - model_name="orig_cnn", - R=128, - E=1, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E02", - label="E=02", - dataset_name="fashion-mnist-100p-noniid-08cpp", - model_name="orig_cnn", - R=64, - E=2, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E04", - label="E=04", - dataset_name="fashion-mnist-100p-noniid-08cpp", - model_name="orig_cnn", - R=32, - E=4, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E08", - label="E=08", - dataset_name="fashion-mnist-100p-noniid-08cpp", - model_name="orig_cnn", - R=16, - E=8, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E16", - label="E=16", - dataset_name="fashion-mnist-100p-noniid-08cpp", - model_name="orig_cnn", - R=8, - E=16, - instance_cores=32, - timeout=120, - ), - ], - aggregation_name="flul-aggregation", - ), - "E-fashion-mnist-100p-noniid-05cpp": Benchmark( - tasks=[ - VisionTask( - name="federated-E01", - label="E=01", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=128, - E=1, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E02", - label="E=02", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=64, - E=2, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E04", - label="E=04", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=32, - E=4, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E08", - label="E=08", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=16, - E=8, - instance_cores=32, - timeout=120, - ), - VisionTask( - name="federated-E16", - label="E=16", - dataset_name="fashion-mnist-100p-noniid-05cpp", - model_name="orig_cnn", - R=8, - E=16, - instance_cores=32, - timeout=120, - ), - ], - aggregation_name="flul-aggregation", - ), - # - # ############################## - # End-To-End Tests - # ############################## - # - "e2e-flul-fashion-mnist": Benchmark( - tasks=[ - UnitaryVisionTask( - name="unitary", - dataset_name="fashion-mnist-100p-noniid-02cpp", - E=4, - partition_id=0, - instance_cores=4, - timeout=10, - ), - VisionTask( - name="federated", - dataset_name="fashion-mnist-100p-noniid-02cpp", - R=2, - E=2, - C=0.02, - instance_cores=4, - timeout=10, - ), - ], - aggregation_name="flul-aggregation", - ), - "e2e-flul-cifar-10": Benchmark( - tasks=[ - UnitaryVisionTask( - name="unitary", - dataset_name="cifar-10-100p-noniid-02cpp", - E=4, - partition_id=0, - instance_cores=16, - timeout=10, - ), - VisionTask( - name="federated", - dataset_name="cifar-10-100p-noniid-02cpp", - R=2, - E=2, - C=0.02, - instance_cores=16, - timeout=10, - ), - ], - aggregation_name="flul-aggregation", - ), -} - - -def _run_benchmark(benchmark_name: str): - logger.info("Building Docker image for benchmark", benchmark_name=benchmark_name) - logger.info("Starting benchmark", benchmark_name=benchmark_name) - - benchmark = benchmarks[benchmark_name] - - group_name = FLAGS.group_name or f"{strftime('%Y%m%dT%H%M')}_{benchmark_name}" - - task_names = {task.name for task in benchmark.tasks} - - assert len(task_names) == len(benchmark.tasks), "Duplicate task names" - - should_push = benchmark.runner == "ec2" - docker_image_name = docker.build(should_push=should_push) - - # TODO Initiate tasks in parallel - for task in benchmark.tasks: - model_name = task.model_name - dataset_name = task.dataset_name - _run_task( - docker_image_name=docker_image_name, - group_name=group_name, - task_name=task.name, - task_label=task.label, - model=model_name, - dataset=dataset_name, - R=task.R, - E=task.E, - C=task.C, - B=task.B, - partition_id=task.partition_id, - instance_cores=task.instance_cores, - timeout=task.timeout, - runner=benchmark.runner, - ) - - with TemporaryDirectory() as tmpdir: - fname = os.path.join(tmpdir, "config.json") - data = {"aggregation_name": benchmark.aggregation_name} - storage.write_json(data, fname) - results.push(group_name=group_name, task_name="", output_dir=tmpdir) - - -def _run_task( - docker_image_name: str, - group_name: str, - task_name: str, - task_label: str, - model: str, - dataset: str, - R: int, - E: int, - C: float, - B: int, - partition_id: Optional[int], - instance_cores: int, - timeout: int, - runner: str, # one of ["ec2", "docker"] -): - task_msg = f"{model}, {dataset}, {R}, {E}, {C}, {B}, {instance_cores}, {timeout}" - logger.info("Attempting to run task", runner=runner, task_msg=task_msg) - - if runner == "ec2": - r = run.ec2 - elif runner == "docker": - r = run.docker - else: - raise Exception("Runner does not exist") - - r( - image=docker_image_name, - timeout=timeout, - instance_cores=instance_cores, - # The following arguments will be passed as absl flags: - group_name=group_name, - task_name=task_name, - task_label=task_label, - model=model, - dataset=dataset, - R=R, - E=E, - C=C, - B=B, - partition_id=partition_id, - ) - - -def main(_): - """Used by ~benchmarks.train_remote.main to start a benchmark identified by - commandline flag `--benchmark_name`. Has to be invoked through abseil `app.run`. - """ - benchmark_name = FLAGS.benchmark_name - assert benchmark_name in benchmarks - _run_benchmark(benchmark_name=benchmark_name) diff --git a/benchmarks/benchmark/benchmark_test.py b/benchmarks/benchmark/benchmark_test.py deleted file mode 100644 index 8e8f9a2ff..000000000 --- a/benchmarks/benchmark/benchmark_test.py +++ /dev/null @@ -1,63 +0,0 @@ -from benchmarks.ops.run import cores -from xain_fl.datasets.dataset import config - -from .aggregation.aggregation import aggregations -from .benchmark import benchmarks -from .net import model_fns - - -def test_valid_aggregation_names(): - """ - Verify that all aggregation names used in `Benchmark` objects are available in `aggregations` - """ - - # Prepare - aggregation_names = [benchmarks[b].aggregation_name for b in benchmarks] - - # Assert - for aggregation_name in aggregation_names: - assert aggregation_name in aggregations - - -def test_valid_model_names(): - """ - Verify that all model names used in `Task` objects are available in `model_fns` - """ - - # Prepare - model_names = [task.model_name for b in benchmarks for task in benchmarks[b].tasks] - - # Assert - for model_name in model_names: - assert model_name in model_fns - - -def test_valid_dataset_names(): - """ - Verify that all dataset names used in `Task` objects are available in `xain_fl.datasets` - """ - - # Prepare - dataset_names = [ - task.dataset_name for b in benchmarks for task in benchmarks[b].tasks - ] - all_datasets = config.keys() - - # Assert - for dataset_name in dataset_names: - assert dataset_name in all_datasets - - -def test_valid_instance_cores(): - """ - Verify that all dataset names used in `Task` objects are available in `xain_fl.datasets` - """ - - # Prepare - instance_cores = [ - task.instance_cores for b in benchmarks for task in benchmarks[b].tasks - ] - - # Assert - for ic in instance_cores: - assert ic in cores diff --git a/benchmarks/benchmark/conftest.py b/benchmarks/benchmark/conftest.py deleted file mode 100644 index 2603774b9..000000000 --- a/benchmarks/benchmark/conftest.py +++ /dev/null @@ -1,21 +0,0 @@ -import pytest -from absl import flags - -FLAGS = flags.FLAGS - - -@pytest.fixture -def group_name(): - gname = "foo_bar_group" - FLAGS(["test", f"--group_name={gname}"]) - - return gname - - -@pytest.fixture -def results_dir(tmpdir): - """Create a results_dir containing one file in a subdirectory""" - tmpdir = str(tmpdir) - FLAGS(["test", f"--results_dir={tmpdir}"]) - - return tmpdir diff --git a/benchmarks/benchmark/exec/__init__.py b/benchmarks/benchmark/exec/__init__.py deleted file mode 100644 index b60708fa2..000000000 --- a/benchmarks/benchmark/exec/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -from absl import flags - -from benchmarks.benchmark.net import model_fns - -flags.DEFINE_string( - "task_name", - None, - "Mainly used for directory names and as a reference. If label not given used also for plots", -) - -flags.DEFINE_string("task_label", None, "Label to be used in plots") - -flags.DEFINE_string("model", None, f"Model name, one of {[fn for fn in model_fns]}") - -flags.DEFINE_string("dataset", None, "Dataset name") - -flags.DEFINE_integer("R", None, "Rounds of federated learning") - -flags.DEFINE_integer("E", None, "Epochs of training in each round") - -flags.DEFINE_float("C", None, "Fraction of participants participating in each round") - -flags.DEFINE_integer("B", None, "Batch size") - -flags.DEFINE_integer("partition_id", None, "Partition ID for unitary training") - -flags.DEFINE_bool("push_results", True, "Indicates if results should be pushed to S3") diff --git a/benchmarks/benchmark/exec/__main__.py b/benchmarks/benchmark/exec/__main__.py deleted file mode 100644 index 4b1b65dac..000000000 --- a/benchmarks/benchmark/exec/__main__.py +++ /dev/null @@ -1,97 +0,0 @@ -import atexit -import time - -from absl import app, flags - -from benchmarks.helpers import storage -from benchmarks.ops import results -from xain_fl.datasets import load_splits - -from . import run - -FLAGS = flags.FLAGS - - -def after_main(group_name: str, task_name: str): - """Will run after main exists (successfully or otherwise)""" - # Push results once task has finished - results.push(group_name=group_name, task_name=task_name) - - -def main(_): - # Set exit callback - if FLAGS.push_results: - atexit.register( - after_main, group_name=FLAGS.group_name, task_name=FLAGS.task_name - ) - - # Load data - xy_train_partitions, xy_val, xy_test = load_splits(FLAGS.dataset) - - # Execute training - start = time.time() - partition_id = FLAGS.partition_id - - num_participants = 1 # For unitary training - hist_opt_configs = None # For unitary training - hist_metrics = None # For unitary training - - if partition_id is not None: # Use only a single partition if required (unitary) - hist, loss, acc = run.unitary_training( - model_name=FLAGS.model, - xy_train=xy_train_partitions[partition_id], - xy_val=xy_val, - xy_test=xy_test, - E=FLAGS.E, - B=FLAGS.B, - ) - else: - hist, _, hist_opt_configs, hist_metrics, loss, acc = run.federated_training( - model_name=FLAGS.model, - xy_train_partitions=xy_train_partitions, - xy_val=xy_val, - xy_test=xy_test, - R=FLAGS.R, - E=FLAGS.E, - C=FLAGS.C, - B=FLAGS.B, - ) - num_participants = len(xy_train_partitions) - end = time.time() - - # Write results - res = { - "group_name": FLAGS.group_name, - "task_name": FLAGS.task_name, - "task_label": FLAGS.task_label, - "dataset": FLAGS.dataset, - "model": FLAGS.model, - "R": FLAGS.R, - "E": FLAGS.E, - "C": FLAGS.C, - "B": FLAGS.B, - "partition_id": partition_id, - "start": start, - "end": end, - "duration": end - start, - "loss": float(loss), - "acc": float(acc), - "hist": hist, - "hist_opt_configs": hist_opt_configs, - "hist_metrics": hist_metrics, - "num_participants": num_participants, - } - storage.write_json(res, fname="results.json") - - -if __name__ == "__main__": - flags.mark_flag_as_required("group_name") - flags.mark_flag_as_required("task_name") - flags.mark_flag_as_required("model") - flags.mark_flag_as_required("dataset") - flags.mark_flag_as_required("R") - flags.mark_flag_as_required("E") - flags.mark_flag_as_required("C") - flags.mark_flag_as_required("B") - # Note: Flag partition_id is not required (i.e. optional) - app.run(main=main) diff --git a/benchmarks/benchmark/exec/run.py b/benchmarks/benchmark/exec/run.py deleted file mode 100644 index 51c12bd9f..000000000 --- a/benchmarks/benchmark/exec/run.py +++ /dev/null @@ -1,198 +0,0 @@ -import random -import time -from typing import Dict, List, Optional, Tuple - -import numpy as np -import tensorflow as tf -from absl import logging - -from benchmarks.benchmark.aggregation import task_accuracies -from benchmarks.benchmark.net import load_lr_fn_fn, load_model_fn -from benchmarks.helpers import storage -from xain_fl.datasets import load_splits -from xain_fl.fl.coordinator import Coordinator, RandomController -from xain_fl.fl.coordinator.aggregate import Aggregator -from xain_fl.fl.participant import ModelProvider, Participant -from xain_fl.types import History, Metrics, Partition - -random.seed(0) -np.random.seed(1) -tf.compat.v1.set_random_seed(2) - - -# Default parameters for `unitary_versus_federated` -DEFAULT_R = 50 # Number of total rounds to train -DEFAULT_E = 4 # Number of training epochs in each round -DEFAULT_C = 0.1 # Fraction of participants used in each round of training -DEFAULT_B = 64 # Batch size used by participants - - -# pylint: disable-msg=too-many-locals,too-many-arguments -def unitary_training( - model_name: str, - xy_train: Partition, - xy_val: Partition, - xy_test: Partition, - E: int, - B: int, -) -> Tuple[History, float, float]: - - model_fn = load_model_fn(model_name) - lr_fn_fn = load_lr_fn_fn(model_name) - model_provider = ModelProvider(model_fn=model_fn, lr_fn_fn=lr_fn_fn) - - # Initialize model and participant - cid = 0 - participant = Participant( - cid, - model_provider, - xy_train=xy_train, - xy_val=xy_val, - num_classes=10, - batch_size=B, - ) - model = model_provider.init_model() - theta = model.get_weights() - - # Train model - hist = participant._fit(model, E, []) # pylint: disable-msg=protected-access - - # Evaluate final performance - theta = model.get_weights() - loss, acc = participant.evaluate(theta, xy_test) - - # Report results - return hist, loss, acc - - -# pylint: disable-msg=too-many-locals,too-many-arguments -def federated_training( - model_name: str, - xy_train_partitions: List[Partition], - xy_val: Partition, - xy_test: Partition, - R: int, - E: int, - C: float, - B: int, - aggregator: Aggregator = None, -) -> Tuple[ - History, List[List[History]], List[List[Dict]], List[List[Metrics]], float, float -]: - # Initialize participants and coordinator - # Note that there is no need for common initialization at this point: Common - # initialization will happen during the first few rounds because the coordinator will - # push its own weight to the respective participants of each training round. - - model_fn = load_model_fn(model_name) - lr_fn_fn = load_lr_fn_fn(model_name) - model_provider = ModelProvider(model_fn=model_fn, lr_fn_fn=lr_fn_fn) - - # Init participants - participants = [] - for cid, xy_train in enumerate(xy_train_partitions): - participant = Participant( - cid, model_provider, xy_train, xy_val, num_classes=10, batch_size=B - ) - participants.append(participant) - participant_ids = [str(participant.cid) for participant in participants] - - # Init coordinator - controller = RandomController(participant_ids, fraction_of_participants=C) - coordinator = Coordinator( - controller, - model_provider, - participants, - C=C, - E=E, - xy_val=xy_val, - aggregator=aggregator, - ) - - # Train model - hist_co, hist_ps, hist_opt_configs, hist_metrics = coordinator.fit(num_rounds=R) - - # Evaluate final performance - loss, acc = coordinator.evaluate(xy_test) - - # Report results - return hist_co, hist_ps, hist_opt_configs, hist_metrics, loss, acc - - -# FIXME remove -def unitary_versus_federated( - benchmark_name: str, - model_name: str, - dataset_name: str, - R: int = DEFAULT_R, - E: int = DEFAULT_E, - C: float = DEFAULT_C, - B: int = DEFAULT_B, -): - """ - :param C: Fraction of participants used in each round of training - """ - logging.info("Starting benchmark", benchmark_name=benchmark_name) - - xy_train_partitions, xy_val, xy_test = load_splits(dataset_name) - - start = time.time() - - # Train CNN on a single partition ("unitary learning") - # TODO train n models on all partitions - partition_id = 0 - xy_train = xy_train_partitions[partition_id] - - logging.info("Run unitary training using partition", partition_id=partition_id) - - ul_hist, ul_loss, ul_acc = unitary_training( - model_name, xy_train, xy_val, xy_test, E=R * E, B=B - ) - - # Train CNN using federated learning on all partitions - logging.info("Run federated learning using all partitions") - fl_hist, _, _, _, fl_loss, fl_acc = federated_training( - model_name, xy_train_partitions, xy_val, xy_test, R=R, E=E, C=C, B=B - ) - - end = time.time() - - # Write results JSON - results = { - "name": benchmark_name, - "start": start, - "end": end, - "duration": end - start, - "R": R, - "E": E, - "C": C, - "B": B, - "unitary_learning": { - "loss": float(ul_loss), - "acc": float(ul_acc), - "hist": ul_hist, - }, - "federated_learning": { - "loss": float(fl_loss), - "acc": float(fl_acc), - "hist": fl_hist, - }, - } - storage.write_json(results, fname="results.json") - - # Plot results - # TODO include aggregated participant histories in plot - plot_data: List[Tuple[str, List[float], Optional[List[int]]]] = [ - ( - "Unitary Learning", - ul_hist["val_acc"], - [i for i in range(1, len(ul_hist["val_acc"]) + 1, 1)], - ), - ( - "Federated Learning", - fl_hist["val_acc"], - [i for i in range(E, len(fl_hist["val_acc"]) * E + 1, E)], - ), - ] - # FIXME use different filenames for different datasets - task_accuracies.plot(plot_data, fname="plot.png") diff --git a/benchmarks/benchmark/net/__init__.py b/benchmarks/benchmark/net/__init__.py deleted file mode 100644 index aead2aa8b..000000000 --- a/benchmarks/benchmark/net/__init__.py +++ /dev/null @@ -1,53 +0,0 @@ -"""Provides implementations of a few standard neural network architectures and associated -learning rate schedules. -""" -from typing import Callable, Dict - -import tensorflow as tf - -from .blog_cnn import blog_cnn_compiled, blog_cnn_lr_fn -from .orig_2nn import orig_2nn_compiled, orig_2nn_lr_fn -from .orig_cnn import orig_cnn_compiled, orig_cnn_lr_fn -from .resnet import resnet20v2_compiled, resnet20v2_lr_fn - -model_fns: Dict[str, Callable[[], tf.keras.Model]] = { - "orig_2nn": orig_2nn_compiled, - "orig_cnn": orig_cnn_compiled, - "blog_cnn": blog_cnn_compiled, - "resnet20": resnet20v2_compiled, -} - -lr_fns: Dict = { - "orig_2nn": orig_2nn_lr_fn, - "orig_cnn": orig_cnn_lr_fn, - "blog_cnn": blog_cnn_lr_fn, - "resnet20": resnet20v2_lr_fn, -} - - -def load_model_fn(model_name: str) -> Callable[[], tf.keras.Model]: - """Returns a function which can be used to create a Keras model. - - Args: - model_name (str): One of ~benchmarks.benchmark.net.model_fns - - Returns: - Callable[[], tf.keras.Model] - """ - assert ( - model_name in model_fns - ), f"Model name '{model_name}' not in {model_fns.keys()}" - return model_fns[model_name] - - -def load_lr_fn_fn(model_name: str) -> Callable: - """Returns a function which can be used to obtain a learning rate schedule. - - Args: - model_name (str): One of ~benchmarks.benchmark.net.lr_fns - - Returns: - Callable - """ - assert model_name in lr_fns, f"Model name '{model_name}' not in {lr_fns.keys()}" - return lr_fns[model_name] diff --git a/benchmarks/benchmark/net/__main__.py b/benchmarks/benchmark/net/__main__.py deleted file mode 100644 index 272b16a74..000000000 --- a/benchmarks/benchmark/net/__main__.py +++ /dev/null @@ -1,41 +0,0 @@ -from absl import app, logging - -from .orig_2nn import orig_2nn_compiled -from .orig_cnn import orig_cnn_compiled -from .resnet import resnet20v2_compiled - - -def main(_): - print_model_summaries() - - -def print_model_summaries(): - logging.info("\nOrig. 2NN:") - model = orig_2nn_compiled() - model.summary(print_fn=logging.info) - print_weight_dims(model) - - logging.info("\nOrig. CNN (MNIST):") - model = orig_cnn_compiled() - model.summary(print_fn=logging.info) - print_weight_dims(model) - - logging.info("\nOrig. CNN (CIFAR-10):") - model = orig_cnn_compiled(input_shape=(32, 32, 3)) - model.summary(print_fn=logging.info) - print_weight_dims(model) - - logging.info("\nResNet20v2 (CIFAR-10):") - model = resnet20v2_compiled(input_shape=(32, 32, 3)) - model.summary(print_fn=logging.info) - print_weight_dims(model) - - -def print_weight_dims(model): - weights = model.get_weights() - for w in weights: - print(w.shape) - - -if __name__ == "__main__": - app.run(main=main) diff --git a/benchmarks/benchmark/net/blog_cnn.py b/benchmarks/benchmark/net/blog_cnn.py deleted file mode 100644 index be67fb909..000000000 --- a/benchmarks/benchmark/net/blog_cnn.py +++ /dev/null @@ -1,72 +0,0 @@ -from typing import Callable - -import tensorflow as tf -from tensorflow.keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPool2D - -from . import lr_schedule - -# Derived from: -# https://medium.com/tensorflow/hello-deep-learning-fashion-mnist-with-keras-50fcff8cd74a - -DEFAULT_LR = 0.001 -DEFAULT_K = 0.025 - - -# pylint: disable-msg=unused-argument -def blog_cnn_compiled( - input_shape=(28, 28, 1), - num_classes: int = 10, - lr_initial: float = DEFAULT_LR, - k: float = DEFAULT_K, - momentum: float = 0.9, - epoch_base: int = 0, - seed: int = 2017, -) -> tf.keras.Model: - ki = tf.keras.initializers.glorot_uniform(seed=seed) - - model = tf.keras.Sequential() - # Must define the input shape in the first layer of the neural network - model.add( - Conv2D( - filters=64, - kernel_size=2, - padding="same", - activation="relu", - kernel_initializer=ki, - input_shape=input_shape, - ) - ) - model.add(MaxPool2D(pool_size=2)) - model.add(Dropout(0.3)) - model.add( - Conv2D( - filters=32, - kernel_size=2, - padding="same", - activation="relu", - kernel_initializer=ki, - ) - ) - model.add(MaxPool2D(pool_size=2)) - model.add(Dropout(0.3)) - model.add(Flatten()) - model.add(Dense(256, activation="relu", kernel_initializer=ki)) - model.add(Dropout(0.5)) - model.add(Dense(num_classes, activation="softmax", kernel_initializer=ki)) - - # Compile model with exponential learning rate decay - lr_fn = blog_cnn_lr_fn(epoch_base=epoch_base) - optimizer = tf.keras.optimizers.Adam(lr=lr_fn(0)) - - model.compile( - loss=tf.keras.losses.categorical_crossentropy, - optimizer=optimizer, - metrics=["accuracy"], - ) - return model - - -def blog_cnn_lr_fn( - epoch_base: int, lr_initial: float = DEFAULT_LR, k: float = DEFAULT_K -) -> Callable: - return lr_schedule.exp_decay_fn(epoch_base=epoch_base, lr_initial=lr_initial, k=k) diff --git a/benchmarks/benchmark/net/blog_cnn_test.py b/benchmarks/benchmark/net/blog_cnn_test.py deleted file mode 100644 index f8640f45d..000000000 --- a/benchmarks/benchmark/net/blog_cnn_test.py +++ /dev/null @@ -1,103 +0,0 @@ -import random - -import numpy as np -import pytest -import tensorflow as tf - -from .blog_cnn import blog_cnn_compiled - - -@pytest.mark.slow -def test_num_parameters_mnist(): - # Prepare - model = blog_cnn_compiled(input_shape=(28, 28, 1), num_classes=10) - # Execute - num_params = model.count_params() - # Assert - assert num_params == 412_778 - - -@pytest.mark.slow -def test_num_parameters_cifar(): - # Prepare - model = blog_cnn_compiled(input_shape=(32, 32, 3), num_classes=10) - # Execute - num_params = model.count_params() - # Assert - assert num_params == 536_170 - - -@pytest.mark.slow -def test_seed_mnist(): - # Prepare - random.seed(0) - np.random.seed(1) - tf.set_random_seed(2) - SEED = 3 - - # Execute - model_a = blog_cnn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=SEED) - model_b = blog_cnn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=SEED) - - # Assert - assert model_a.count_params() == model_b.count_params() - # Ensure weight matrices are exactly the same - ws_a = model_a.get_weights() - ws_b = model_b.get_weights() - # pylint: disable-msg=consider-using-enumerate - for layer_i in range(len(ws_a)): - w_a = ws_a[layer_i] - w_b = ws_b[layer_i] - assert w_a.shape == w_b.shape - np.testing.assert_equal(w_a, w_b) - - -@pytest.mark.slow -def test_seed_cifar(): - # Prepare - random.seed(0) - np.random.seed(1) - tf.set_random_seed(2) - SEED = 3 - - # Execute - model_a = blog_cnn_compiled(input_shape=(32, 32, 3), num_classes=10, seed=SEED) - model_b = blog_cnn_compiled(input_shape=(32, 32, 3), num_classes=10, seed=SEED) - - # Assert - assert model_a.count_params() == model_b.count_params() - # Ensure weight matrices are exactly the same - ws_a = model_a.get_weights() - ws_b = model_b.get_weights() - # pylint: disable-msg=consider-using-enumerate - for layer_i in range(len(ws_a)): - w_a = ws_a[layer_i] - w_b = ws_b[layer_i] - assert w_a.shape == w_b.shape - np.testing.assert_equal(w_a, w_b) - - -@pytest.mark.slow -def test_seed_unequal(): - # Prepare - random.seed(0) - np.random.seed(1) - tf.set_random_seed(2) - - # Execute - model_a = blog_cnn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=3) - model_b = blog_cnn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=4) - - # Assert - assert model_a.count_params() == model_b.count_params() - # Ensure weight matrices are exactly the same - ws_a = model_a.get_weights() - ws_b = model_b.get_weights() - # pylint: disable-msg=consider-using-enumerate - for layer_i in range(len(ws_a)): - assert ws_a[layer_i].shape == ws_b[layer_i].shape - if ws_a[layer_i].ndim == 1: - continue # Bias can be the same - w_a = ws_a[layer_i] - w_b = ws_b[layer_i] - assert not np.any(np.equal(w_a, w_b)) diff --git a/benchmarks/benchmark/net/lr_schedule.py b/benchmarks/benchmark/net/lr_schedule.py deleted file mode 100644 index 0c1972675..000000000 --- a/benchmarks/benchmark/net/lr_schedule.py +++ /dev/null @@ -1,10 +0,0 @@ -import math -from typing import Callable - - -def exp_decay_fn(epoch_base: int, lr_initial: float, k: float) -> Callable: - def exp_decay(epoch_optimizer: int) -> float: - epoch = epoch_base + epoch_optimizer - return lr_initial * math.exp(-k * epoch) - - return exp_decay diff --git a/benchmarks/benchmark/net/orig_2nn.py b/benchmarks/benchmark/net/orig_2nn.py deleted file mode 100644 index 3c406a192..000000000 --- a/benchmarks/benchmark/net/orig_2nn.py +++ /dev/null @@ -1,49 +0,0 @@ -from typing import Callable - -import tensorflow as tf -from tensorflow.keras.layers import Dense, Flatten, Input - -from . import lr_schedule - -DEFAULT_LR = 0.01 -DEFAULT_K = 0.025 - - -# pylint: disable-msg=unused-argument -def orig_2nn_compiled( - input_shape=(28, 28, 1), - num_classes=10, - lr_initial: float = DEFAULT_LR, - k: float = DEFAULT_K, - momentum: float = 0.0, - epoch_base: int = 0, - seed: int = 2017, -) -> tf.keras.Model: - # Kernel initializer - ki = tf.keras.initializers.glorot_uniform(seed=seed) - - # Architecture - inputs = Input(shape=input_shape) - x = Flatten()(inputs) - x = Dense(200, kernel_initializer=ki, activation="relu")(x) - x = Dense(200, kernel_initializer=ki, activation="relu")(x) - outputs = Dense(num_classes, kernel_initializer=ki, activation="softmax")(x) - - model = tf.keras.Model(inputs=inputs, outputs=outputs) - - # Compile model with exponential learning rate decay - lr_fn = orig_2nn_lr_fn(epoch_base=epoch_base) - optimizer = tf.keras.optimizers.SGD(lr=lr_fn(0), momentum=momentum) - - model.compile( - loss=tf.keras.losses.categorical_crossentropy, - optimizer=optimizer, - metrics=["accuracy"], - ) - return model - - -def orig_2nn_lr_fn( - epoch_base: int, lr_initial: float = DEFAULT_LR, k: float = DEFAULT_K -) -> Callable: - return lr_schedule.exp_decay_fn(epoch_base=epoch_base, lr_initial=lr_initial, k=k) diff --git a/benchmarks/benchmark/net/orig_2nn_test.py b/benchmarks/benchmark/net/orig_2nn_test.py deleted file mode 100644 index e4ac928ba..000000000 --- a/benchmarks/benchmark/net/orig_2nn_test.py +++ /dev/null @@ -1,67 +0,0 @@ -import random - -import numpy as np -import pytest -import tensorflow as tf - -from .orig_2nn import orig_2nn_compiled - - -@pytest.mark.slow -def test_num_parameters(): - # Prepare - model = orig_2nn_compiled() - # Execute - num_params = model.count_params() - # Assert - assert num_params == 199_210 - - -@pytest.mark.slow -def test_seed_mnist(): - # Prepare - random.seed(0) - np.random.seed(1) - tf.set_random_seed(2) - SEED = 3 - - # Execute - model_a = orig_2nn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=SEED) - model_b = orig_2nn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=SEED) - - # Assert - assert model_a.count_params() == model_b.count_params() - # Ensure weight matrices are exactly the same - ws_a = model_a.get_weights() - ws_b = model_b.get_weights() - # pylint: disable-msg=consider-using-enumerate - for layer_i in range(len(ws_a)): - w_a = ws_a[layer_i] - w_b = ws_b[layer_i] - assert w_a.shape == w_b.shape - np.testing.assert_equal(w_a, w_b) - - -@pytest.mark.slow -def test_seed_cifar(): - # Prepare - random.seed(0) - np.random.seed(1) - tf.set_random_seed(2) - SEED = 3 - - # Execute - model_a = orig_2nn_compiled(input_shape=(32, 32, 3), num_classes=10, seed=SEED) - model_b = orig_2nn_compiled(input_shape=(32, 32, 3), num_classes=10, seed=SEED) - - # Assert - assert model_a.count_params() == model_b.count_params() - # Ensure weight matrices are exactly the same - ws_a = model_a.get_weights() - ws_b = model_b.get_weights() - # pylint: disable-msg=consider-using-enumerate - for layer_i in range(len(ws_a)): - w_a = ws_a[layer_i] - w_b = ws_b[layer_i] - assert w_a.shape == w_b.shape - np.testing.assert_equal(w_a, w_b) diff --git a/benchmarks/benchmark/net/orig_cnn.py b/benchmarks/benchmark/net/orig_cnn.py deleted file mode 100644 index 52406ee70..000000000 --- a/benchmarks/benchmark/net/orig_cnn.py +++ /dev/null @@ -1,67 +0,0 @@ -from typing import Callable - -import tensorflow as tf -from tensorflow.keras.layers import Conv2D, Dense, Flatten, Input, MaxPool2D - -from . import lr_schedule - -DEFAULT_LR = 0.002 -DEFAULT_K = 0.01 - - -# pylint: disable-msg=unused-argument -def orig_cnn_compiled( - input_shape=(28, 28, 1), - num_classes: int = 10, - lr_initial: float = DEFAULT_LR, - k: float = DEFAULT_K, - momentum: float = 0.0, - epoch_base: int = 0, - seed: int = 2017, -) -> tf.keras.Model: - # Kernel initializer - ki = tf.keras.initializers.glorot_uniform(seed=seed) - - # Architecture - inputs = Input(shape=input_shape) - x = Conv2D( - 32, - kernel_size=(5, 5), - strides=(1, 1), - kernel_initializer=ki, - padding="same", - activation="relu", - )(inputs) - x = MaxPool2D(pool_size=(2, 2), strides=(2, 2))(x) - x = Conv2D( - 64, - kernel_size=(5, 5), - strides=(1, 1), - kernel_initializer=ki, - padding="same", - activation="relu", - )(x) - x = MaxPool2D(pool_size=(2, 2), strides=(2, 2))(x) - x = Flatten()(x) - x = Dense(512, kernel_initializer=ki, activation="relu")(x) - outputs = Dense(num_classes, kernel_initializer=ki, activation="softmax")(x) - - model = tf.keras.Model(inputs=inputs, outputs=outputs) - - # Compile model with exponential learning rate decay - lr_fn = orig_cnn_lr_fn(epoch_base=epoch_base) - # optimizer = tf.keras.optimizers.SGD(lr=lr_fn(0), momentum=momentum) - optimizer = tf.keras.optimizers.Adam(lr=lr_fn(0)) - - model.compile( - loss=tf.keras.losses.categorical_crossentropy, - optimizer=optimizer, - metrics=["accuracy"], - ) - return model - - -def orig_cnn_lr_fn( - epoch_base: int, lr_initial: float = DEFAULT_LR, k: float = DEFAULT_K -) -> Callable: - return lr_schedule.exp_decay_fn(epoch_base=epoch_base, lr_initial=lr_initial, k=k) diff --git a/benchmarks/benchmark/net/orig_cnn_test.py b/benchmarks/benchmark/net/orig_cnn_test.py deleted file mode 100644 index 2d7ec8d85..000000000 --- a/benchmarks/benchmark/net/orig_cnn_test.py +++ /dev/null @@ -1,103 +0,0 @@ -import random - -import numpy as np -import pytest -import tensorflow as tf - -from .orig_cnn import orig_cnn_compiled - - -@pytest.mark.slow -def test_num_parameters_mnist(): - # Prepare - model = orig_cnn_compiled(input_shape=(28, 28, 1), num_classes=10) - # Execute - num_params = model.count_params() - # Assert - assert num_params == 1_663_370 - - -@pytest.mark.slow -def test_num_parameters_cifar(): - # Prepare - model = orig_cnn_compiled(input_shape=(32, 32, 3), num_classes=10) - # Execute - num_params = model.count_params() - # Assert - assert num_params == 2_156_490 - - -@pytest.mark.slow -def test_seed_mnist(): - # Prepare - random.seed(0) - np.random.seed(1) - tf.set_random_seed(2) - SEED = 3 - - # Execute - model_a = orig_cnn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=SEED) - model_b = orig_cnn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=SEED) - - # Assert - assert model_a.count_params() == model_b.count_params() - # Ensure weight matrices are exactly the same - ws_a = model_a.get_weights() - ws_b = model_b.get_weights() - # pylint: disable-msg=consider-using-enumerate - for layer_i in range(len(ws_a)): - w_a = ws_a[layer_i] - w_b = ws_b[layer_i] - assert w_a.shape == w_b.shape - np.testing.assert_equal(w_a, w_b) - - -@pytest.mark.slow -def test_seed_cifar(): - # Prepare - random.seed(0) - np.random.seed(1) - tf.set_random_seed(2) - SEED = 3 - - # Execute - model_a = orig_cnn_compiled(input_shape=(32, 32, 3), num_classes=10, seed=SEED) - model_b = orig_cnn_compiled(input_shape=(32, 32, 3), num_classes=10, seed=SEED) - - # Assert - assert model_a.count_params() == model_b.count_params() - # Ensure weight matrices are exactly the same - ws_a = model_a.get_weights() - ws_b = model_b.get_weights() - # pylint: disable-msg=consider-using-enumerate - for layer_i in range(len(ws_a)): - w_a = ws_a[layer_i] - w_b = ws_b[layer_i] - assert w_a.shape == w_b.shape - np.testing.assert_equal(w_a, w_b) - - -@pytest.mark.slow -def test_seed_unequal(): - # Prepare - random.seed(0) - np.random.seed(1) - tf.set_random_seed(2) - - # Execute - model_a = orig_cnn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=3) - model_b = orig_cnn_compiled(input_shape=(28, 28, 1), num_classes=10, seed=4) - - # Assert - assert model_a.count_params() == model_b.count_params() - # Ensure weight matrices are exactly the same - ws_a = model_a.get_weights() - ws_b = model_b.get_weights() - # pylint: disable-msg=consider-using-enumerate - for layer_i in range(len(ws_a)): - assert ws_a[layer_i].shape == ws_b[layer_i].shape - if ws_a[layer_i].ndim == 1: - continue # Bias can be the same - w_a = ws_a[layer_i] - w_b = ws_b[layer_i] - assert not np.any(np.equal(w_a, w_b)) diff --git a/benchmarks/benchmark/net/resnet.py b/benchmarks/benchmark/net/resnet.py deleted file mode 100644 index d9b6a2417..000000000 --- a/benchmarks/benchmark/net/resnet.py +++ /dev/null @@ -1,379 +0,0 @@ -# Derived from: https://github.com/keras-team/keras/blob/master/examples/cifar10_resnet.py -# pylint: skip-file - -import math -from typing import Callable, Optional, Tuple - -import tensorflow as tf -import tensorflow.keras as keras -from tensorflow.keras.layers import ( - Activation, - AveragePooling2D, - BatchNormalization, - Conv2D, - Dense, - Dropout, - Flatten, - Input, -) -from tensorflow.keras.models import Model -from tensorflow.keras.regularizers import l2 - -from . import lr_schedule - -L2_DEFAULT: float = 1e-4 -KERNEL_INITIALIZER_DEFAULT = "he_normal" - -DEFAULT_LR = 0.1 -DEFAULT_K = 0.15 - - -def resnet20v2_compiled( - input_shape=(32, 32, 3), # CIFAR - num_classes=10, - lr_initial: float = DEFAULT_LR, - k: float = DEFAULT_K, - momentum: float = 0.9, - epoch_base: int = 0, -) -> tf.keras.Model: - model, _ = resnet(input_shape=(32, 32, 3), num_classes=10, version=2, n=2) - - # Compile model with exponential learning rate decay - lr_fn = resnet20v2_lr_fn(epoch_base=epoch_base) - optimizer = tf.keras.optimizers.SGD(lr=lr_fn(0), momentum=momentum) - - model.compile( - optimizer=optimizer, - loss=tf.keras.losses.categorical_crossentropy, - metrics=["accuracy"], - ) - return model - - -def resnet20v2_lr_fn( - epoch_base: int, lr_initial: float = DEFAULT_LR, k: float = DEFAULT_K -) -> Callable: - return lr_schedule.exp_decay_fn(epoch_base=epoch_base, lr_initial=lr_initial, k=k) - - -def resnet( - input_shape: Tuple[int, int, int] = (32, 32, 3), - num_classes: int = 10, - version: int = 1, - n: int = 3, - kernel_initializer: str = KERNEL_INITIALIZER_DEFAULT, - l2_factor: float = L2_DEFAULT, - l2_dense: Optional[float] = None, - dropout: Optional[float] = None, -): - # Computed depth from supplied model parameter n - if version == 1: - depth = n * 6 + 2 - elif version == 2: - depth = n * 9 + 2 - - # Model name, depth and version - model_type = "ResNet%dv%d" % (depth, version) - - # Build model - if version == 2: - model = resnet_v2( - input_shape=input_shape, - depth=depth, - l2_factor=l2_factor, - l2_dense=l2_dense, - dropout=dropout, - ) - else: - model = resnet_v1( - input_shape=input_shape, - depth=depth, - l2_factor=l2_factor, - l2_dense=l2_dense, - dropout=dropout, - ) - return model, model_type - - -def resnet_layer( - inputs, - num_filters=16, - kernel_size=3, - strides=1, - activation="relu", - batch_normalization=True, - conv_first=True, - kernel_initializer: str = KERNEL_INITIALIZER_DEFAULT, - l2_factor=L2_DEFAULT, - dropout: Optional[float] = None, -): - """2D Convolution-Batch Normalization-Activation stack builder. - - Args: - inputs (tensor): input tensor from input image or previous layer - num_filters (int): Conv2D number of filters - kernel_size (int): Conv2D square kernel dimensions - strides (int): Conv2D square stride dimensions - activation (string): activation name - batch_normalization (bool): whether to include batch normalization - conv_first (bool): conv-bn-activation (True) or - bn-activation-conv (False) - - Returns: - x (tensor): tensor as input to the next layer - """ - conv = Conv2D( - num_filters, - kernel_size=kernel_size, - strides=strides, - padding="same", - kernel_initializer=kernel_initializer, - kernel_regularizer=l2(l2_factor), - ) - - x = inputs - if conv_first: - x = conv(x) - if batch_normalization: - x = BatchNormalization()(x) - if activation is not None: - x = Activation(activation)(x) - else: - if batch_normalization: - x = BatchNormalization()(x) - if activation is not None: - x = Activation(activation)(x) - x = conv(x) - if dropout is not None and dropout > 0.0: - x = Dropout(dropout)(x) - return x - - -def resnet_v1( - input_shape, - depth, - num_classes=10, - kernel_initializer: str = KERNEL_INITIALIZER_DEFAULT, - l2_factor=L2_DEFAULT, - l2_dense: Optional[float] = None, - dropout: Optional[float] = None, -): - """ResNet Version 1 Model builder [a] - - Stacks of 2 x (3 x 3) Conv2D-BN-ReLU - Last ReLU is after the shortcut connection. - At the beginning of each stage, the feature map size is halved (downsampled) - by a convolutional layer with strides=2, while the number of filters is - doubled. Within each stage, the layers have the same number filters and the - same number of filters. - Features maps sizes: - stage 0: 32x32, 16 - stage 1: 16x16, 32 - stage 2: 8x8, 64 - The Number of parameters is approx the same as Table 6 of [a]: - ResNet20 0.27M - ResNet32 0.46M - ResNet44 0.66M - ResNet56 0.85M - ResNet110 1.7M - - # Arguments - input_shape (tensor): shape of input image tensor - depth (int): number of core convolutional layers - num_classes (int): number of classes (CIFAR10 has 10) - - # Returns - model (Model): Keras model instance - """ - if (depth - 2) % 6 != 0: - raise ValueError("depth should be 6n+2 (eg 20, 32, 44 in [a])") - # Start model definition. - num_filters = 16 - num_res_blocks = int((depth - 2) / 6) - - inputs = Input(shape=input_shape) - x = resnet_layer(inputs=inputs, kernel_initializer=kernel_initializer) - # Instantiate the stack of residual units - for stack in range(3): - for res_block in range(num_res_blocks): - strides = 1 - if stack > 0 and res_block == 0: # first layer but not first stack - strides = 2 # downsample - y = resnet_layer( - inputs=x, - num_filters=num_filters, - strides=strides, - kernel_initializer=kernel_initializer, - l2_factor=l2_factor, - dropout=dropout, - ) - y = resnet_layer( - inputs=y, - num_filters=num_filters, - activation=None, - kernel_initializer=kernel_initializer, - l2_factor=l2_factor, - dropout=dropout, - ) - if stack > 0 and res_block == 0: # first layer but not first stack - # linear projection residual shortcut connection to match - # changed dims - x = resnet_layer( - inputs=x, - num_filters=num_filters, - kernel_size=1, - strides=strides, - activation=None, - batch_normalization=False, - kernel_initializer=kernel_initializer, - l2_factor=l2_factor, - dropout=dropout, - ) - x = keras.layers.add([x, y]) - x = Activation("relu")(x) - num_filters *= 2 - - # Add classifier on top. - # v1 does not use BN after last shortcut connection-ReLU - x = AveragePooling2D(pool_size=8)(x) - y = Flatten()(x) - outputs = Dense( - num_classes, - activation="softmax", - kernel_initializer="he_normal", - kernel_regularizer=l2(l2_dense) if l2_dense is not None else None, - )(y) - - # Instantiate model. - model = Model(inputs=inputs, outputs=outputs) - return model - - -def resnet_v2( - input_shape, - depth, - num_classes=10, - kernel_initializer: str = KERNEL_INITIALIZER_DEFAULT, - l2_factor=L2_DEFAULT, - l2_dense: Optional[float] = None, - dropout: Optional[float] = None, -): - """ResNet Version 2 Model builder [b] - - Stacks of (1 x 1)-(3 x 3)-(1 x 1) BN-ReLU-Conv2D or also known as - bottleneck layer - First shortcut connection per layer is 1 x 1 Conv2D. - Second and onwards shortcut connection is identity. - At the beginning of each stage, the feature map size is halved (downsampled) - by a convolutional layer with strides=2, while the number of filter maps is - doubled. Within each stage, the layers have the same number filters and the - same filter map sizes. - Features maps sizes: - conv1 : 32x32, 16 - stage 0: 32x32, 64 - stage 1: 16x16, 128 - stage 2: 8x8, 256 - - # Arguments - input_shape (tensor): shape of input image tensor - depth (int): number of core convolutional layers - num_classes (int): number of classes (CIFAR10 has 10) - - # Returns - model (Model): Keras model instance - """ - if (depth - 2) % 9 != 0: - raise ValueError("depth should be 9n+2 (eg 56 or 110 in [b])") - # Start model definition. - num_filters_in = 16 - num_res_blocks = int((depth - 2) / 9) - - inputs = Input(shape=input_shape) - # v2 performs Conv2D with BN-ReLU on input before splitting into 2 paths - x = resnet_layer( - inputs=inputs, - num_filters=num_filters_in, - conv_first=True, - kernel_initializer=kernel_initializer, - ) - - # Instantiate the stack of residual units - for stage in range(3): - for res_block in range(num_res_blocks): - activation: Optional[str] = "relu" - batch_normalization = True - strides = 1 - if stage == 0: - num_filters_out = num_filters_in * 4 - if res_block == 0: # first layer and first stage - activation = None - batch_normalization = False - else: - num_filters_out = num_filters_in * 2 - if res_block == 0: # first layer but not first stage - strides = 2 # downsample - - # bottleneck residual unit - y = resnet_layer( - inputs=x, - num_filters=num_filters_in, - kernel_size=1, - strides=strides, - activation=activation, - batch_normalization=batch_normalization, - conv_first=False, - kernel_initializer=kernel_initializer, - l2_factor=l2_factor, - dropout=dropout, - ) - y = resnet_layer( - inputs=y, - num_filters=num_filters_in, - conv_first=False, - kernel_initializer=kernel_initializer, - l2_factor=l2_factor, - dropout=dropout, - ) - y = resnet_layer( - inputs=y, - num_filters=num_filters_out, - kernel_size=1, - conv_first=False, - kernel_initializer=kernel_initializer, - l2_factor=l2_factor, - dropout=dropout, - ) - if res_block == 0: - # linear projection residual shortcut connection to match - # changed dims - x = resnet_layer( - inputs=x, - num_filters=num_filters_out, - kernel_size=1, - strides=strides, - activation=None, - batch_normalization=False, - kernel_initializer=kernel_initializer, - l2_factor=l2_factor, - dropout=dropout, - ) - x = keras.layers.add([x, y]) - - num_filters_in = num_filters_out - - # Add classifier on top. - # v2 has BN-ReLU before Pooling - x = BatchNormalization()(x) - x = Activation("relu")(x) - x = AveragePooling2D(pool_size=8)(x) - y = Flatten()(x) - outputs = Dense( - num_classes, - activation="softmax", - kernel_initializer=kernel_initializer, - kernel_regularizer=l2(l2_dense) if l2_dense is not None else None, - )(y) - - # Instantiate model. - model = Model(inputs=inputs, outputs=outputs) - return model diff --git a/benchmarks/benchmark/net/resnet_test.py b/benchmarks/benchmark/net/resnet_test.py deleted file mode 100644 index 31999ea0a..000000000 --- a/benchmarks/benchmark/net/resnet_test.py +++ /dev/null @@ -1,13 +0,0 @@ -import pytest - -from .resnet import resnet20v2_compiled - - -@pytest.mark.slow -def test_num_parameters_mnist(): - # Prepare - model = resnet20v2_compiled(input_shape=(32, 32, 3), num_classes=10) - # Execute - num_params = model.count_params() - # Assert - assert num_params == 574_090 diff --git a/benchmarks/benchmark/task.py b/benchmarks/benchmark/task.py deleted file mode 100644 index f4579c11d..000000000 --- a/benchmarks/benchmark/task.py +++ /dev/null @@ -1,96 +0,0 @@ -from abc import ABC -from typing import Optional - -DEFAULT_R = 50 # Number of federated learning rounds -DEFAULT_E = 5 # Number of epochs (on each client, in each round) -DEFAULT_C = 0.1 # Fraction of participants participating in each round -DEFAULT_B = 64 # Batch size - -DEFAULT_INSTANCE_CORES = 2 -DEFAULT_TIMEOUT = 60 - -# pylint: disable-msg=too-many-instance-attributes -class Task(ABC): - """DSL primitive used to represent a single benchmark task.""" - - def __init__( - self, - name: str, - dataset_name: str, - model_name: str, - R: int, - E: int, - C: float, - B: int, - partition_id: Optional[int] = None, - instance_cores: int = DEFAULT_INSTANCE_CORES, - timeout: int = DEFAULT_TIMEOUT, - label: Optional[str] = None, - ): - self.name = name - self.dataset_name = dataset_name - self.model_name = model_name - self.R = R - self.E = E - self.C = C - self.B = B - self.partition_id = partition_id - self.instance_cores = instance_cores - self.timeout = timeout - self.label = label if label is not None else name - - -class VisionTask(Task): - def __init__( - self, - name: str, - dataset_name: str, - model_name="blog_cnn", - R=DEFAULT_R, - E=DEFAULT_E, - C=DEFAULT_C, - B=DEFAULT_B, - instance_cores=DEFAULT_INSTANCE_CORES, - timeout: int = DEFAULT_TIMEOUT, - label: Optional[str] = None, - ): - super().__init__( - name=name, - dataset_name=dataset_name, - model_name=model_name, - R=R, - E=E, - C=C, - B=B, - instance_cores=instance_cores, - timeout=timeout, - label=label, - ) - - -class UnitaryVisionTask(Task): - def __init__( - self, - name: str, - dataset_name: str, - model_name="blog_cnn", - E=DEFAULT_R * DEFAULT_E, - B=DEFAULT_B, - partition_id: int = 0, - instance_cores=DEFAULT_INSTANCE_CORES, - timeout: int = DEFAULT_TIMEOUT, - label: Optional[str] = None, - ): - super().__init__( - name=name, - dataset_name=dataset_name, - model_name=model_name, - R=1, - E=E, - C=0.0, - B=B, - partition_id=partition_id, - instance_cores=instance_cores, - timeout=timeout, - label=label, - ) diff --git a/benchmarks/conftest.py b/benchmarks/conftest.py deleted file mode 100644 index fb4cda4d9..000000000 --- a/benchmarks/conftest.py +++ /dev/null @@ -1,88 +0,0 @@ -import numpy as np -import pytest -from absl import flags - -from xain_fl.types import FederatedDataset, KerasDataset - -FLAGS = flags.FLAGS - - -def pytest_collection_modifyitems(items): - for item in items: - if not any(item.iter_markers()): - item.add_marker("unmarked") - - -def pytest_runtest_setup(): - # Invoking FLAGS will make the flags usable for the - # test execution and avoid throwing an error - FLAGS( - argv=[ - "test", # some app name required - "--fetch_datasets=True", # resetting to default at beginning of every test - ] - ) - - -@pytest.fixture -def output_dir(tmpdir): - tmpdir = str(tmpdir) - FLAGS(["test", f"--output_dir={tmpdir}"]) - - return tmpdir - - -@pytest.fixture -def disable_fetch(): - FLAGS(["test", "--fetch_datasets=False"]) - - -def create_mock_keras_dataset() -> KerasDataset: - labels = np.arange(10, dtype=np.int8) - - x_train = np.ones((600, 32, 32, 3), dtype=np.int8) - y_train = np.tile(labels, 60) - assert x_train.shape[0] == y_train.shape[0] - - x_test = np.ones((100, 32, 32, 3), dtype=np.int8) - y_test = np.tile(labels, 10) - assert x_test.shape[0] == y_test.shape[0] - - return (x_train, y_train), (x_test, y_test) - - -def create_mock_federated_dataset() -> FederatedDataset: - labels = np.arange(10, dtype=np.int8) - - x_train = np.ones((540, 32, 32, 3), dtype=np.int8) - y_train = np.tile(labels, 54) - assert x_train.shape[0] == y_train.shape[0] - - xy_partitions = list( - zip( - np.split(x_train, indices_or_sections=2, axis=0), - np.split(y_train, indices_or_sections=2, axis=0), - ) - ) - - x_val = np.ones((60, 32, 32, 3), dtype=np.int8) - y_val = np.tile(labels, 6) - assert x_val.shape[0] == y_val.shape[0] - - x_test = np.ones((100, 32, 32, 3), dtype=np.int8) - y_test = np.tile(labels, 10) - assert x_test.shape[0] == y_test.shape[0] - - return xy_partitions, (x_val, y_val), (x_test, y_test) - - -@pytest.fixture -def mock_keras_dataset() -> KerasDataset: - """dataset mock after it went through internal load method""" - return create_mock_keras_dataset() - - -@pytest.fixture -def mock_federated_dataset() -> FederatedDataset: - """dataset mock after it went through internal load method""" - return create_mock_federated_dataset() diff --git a/benchmarks/generator/README.md b/benchmarks/generator/README.md deleted file mode 100644 index 63559854d..000000000 --- a/benchmarks/generator/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Generator - -Generates various datasets which will than be uploaded into -All generated datasets will be stored in (by default) ~/.xain-fl/generator/datasets diff --git a/benchmarks/generator/__init__.py b/benchmarks/generator/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/generator/__main__.py b/benchmarks/generator/__main__.py deleted file mode 100644 index b7a4a13a2..000000000 --- a/benchmarks/generator/__main__.py +++ /dev/null @@ -1,48 +0,0 @@ -from absl import app, logging - -from benchmarks.generator import config, data, persistence -from xain_fl.datasets import testing - - -def generate_dataset(dataset_name): - """Creates a dataset and stores it in local generator datasets directory - - Args: - dataset_name (str): Name of dataset to be generated. Has to be one of the keys - of ~benchmarks.generator.config.datasets - """ - logging.info("Starting dataset generation of {}".format(dataset_name)) - - assert dataset_name in config.datasets, "Dataset not found in config" - - c = config.datasets[dataset_name] - - dataset = data.create_federated_dataset( - keras_dataset=c["keras_dataset"], - num_partitions=c["num_partitions"], - validation_set_size=c["validation_set_size"], - transformers=c["transformers"], - transformers_kwargs=c["transformers_kwargs"], - ) - - if c["assert_dataset_origin"]: - testing.assert_dataset_origin( - keras_dataset=data.load(c["keras_dataset"]), federated_dataset=dataset - ) - - persistence.save_splits( - dataset_name=dataset_name, - dataset=dataset, - local_generator_dir=config.local_generator_datasets_dir, - ) - - -def main(_): - """When called will loop through ~benchmarks.generator.config.datasets - and invoke generate_dataset for each dataset - """ - for dataset_name in config.datasets: - generate_dataset(dataset_name) - - -app.run(main=main) diff --git a/benchmarks/generator/class_per_partition_distribution.py b/benchmarks/generator/class_per_partition_distribution.py deleted file mode 100644 index 172c760fd..000000000 --- a/benchmarks/generator/class_per_partition_distribution.py +++ /dev/null @@ -1,153 +0,0 @@ -import numpy as np - -# Passed to RandomState for predictable shuffling -SEED = 851746 - - -class Bucket: - """Data structure which has an internal storage with unique items which can be - picked or exchanged as well as some helper methods to allow reading the current - state of the bucket. - """ - - def __init__(self, num_classes: int, num_per_class: int, dtype=np.int8): - """Will initialize a bucket with its own random state as well a storage of numbers as a - ndarray with shape `(num_classes)` where each index contains the number `num_per_class`. - """ - self.dtype = dtype - self.num_class = num_classes - - # Let the bucket have its own RandomState although beware that each bucket will have it - # initialized the same (as long as the default seed is taken). Given a sequence of method - # calls the result will always be the same - # pylint: disable=no-member - self.rst = np.random.RandomState(seed=SEED) - - # index == class and value == how many are left - self.storage = np.full((num_classes), num_per_class, dtype=self.dtype) - - def zero_indicies(self): - """Returns all indicies which don't have any items left. - - Returns: - (ndarray): boolean numpy array of shape (num_classes) with shows which - index contains no more items - """ - return np.where(self.storage == 0)[0] - - def multi_indicies(self): - """Returns indices which have more than one item left - - Returns: - (ndarray): boolean numpy array of shape (num_classes) which shows which - index still contain more than 1 item - """ - - return np.where(self.storage > 1)[0] - - def has_distinct_sections(self, num_distinct_sections: int) -> bool: - """Return True if there are at least `num_distinct_sections` distinct items available. - - Args: - num_distinct_sections (int): Number of items which should be still available - """ - possible_choices = np.flatnonzero(self.storage) - return possible_choices.size >= num_distinct_sections - - def sample(self, num_distinct_sections: int): - """Returns `num_distinct_sections` distinct items still available in internal storage. - - Args: - num_distinct_sections (int): Number of items to be returned - """ - possible_choices = np.flatnonzero(self.storage) - choices = self.rst.choice( - possible_choices, num_distinct_sections, replace=False - ) - # pylint: disable=no-member - np.subtract.at(self.storage, choices, 1) - - return choices - - def inc_dec(self, index_inc: int, index_dec: int) -> None: - # pylint: disable=no-member - np.subtract.at(self.storage, [index_dec], 1) - np.add.at(self.storage, [index_inc], 1) - - -def distribution(num_classes: int, num_partitions: int, cpp: int) -> np.ndarray: - """Returns a unique distribution with `num_classes` and `num_partitions`. - - - Args: - num_classes (int): number of distinct unique classes - num_partitions (int): number of partitions - cpp (int): number of classes per partition required - - Returns: - np.ndarray: parition distribution as an ndarray of shape (num_partitions, num_classes) - with ones at the indices where a section should be - - Example: - For `distribution(num_classes=4, num_partitions=4, cpp=3)` you will get:: - - [ - [1, 1, 1, 0], - [0, 1, 1, 1], - [1, 1, 0, 1], - [1, 0, 1, 1], - ] - """ - # pylint: disable=no-member - rst = np.random.RandomState(seed=SEED) - - dtype = np.int8 - num_sections = cpp * num_partitions - - assert num_sections % num_classes == 0 - num_per_class = num_sections // num_classes - - partitions = np.zeros((num_partitions, num_classes), dtype=dtype) - - # e.g. [20, 20, 20, 20] for num_classes=4 and cpp = 2 - bucket = Bucket(num_classes, num_per_class) - - for p in partitions: - # 1. Check if there are distinct non-zero values in the bucket - while not bucket.has_distinct_sections(cpp): - # Swap a section (which is available multiple times) from the bucket - # with a section of a partition where that partition does not contain - # the bucket section yet - - # pull from partition and fill bucket - bucket_zero_indicies = bucket.zero_indicies() - - # pull from bucket and fill partition - bucket_multi_indicies = bucket.multi_indicies() - - # sample one index from each - bucket_zero_index = rst.choice(bucket_zero_indicies, 1)[0] - bucket_multi_index = rst.choice(bucket_multi_indicies, 1)[0] - - # Find partition where: - # - index_zero is at least one - # - index_multi is zero - partition_candidates_zero = np.where(partitions.T[bucket_zero_index] == 1) - partition_candidates_multi = np.where(partitions.T[bucket_multi_index] == 0) - partition_candidates = np.intersect1d( - partition_candidates_zero, partition_candidates_multi - ) - - # Pick one partiton to modify - pc_index = rst.choice(partition_candidates, 1)[0] - - # Swap - partitions[pc_index][bucket_multi_index] += 1 - partitions[pc_index][bucket_zero_index] -= 1 - bucket.inc_dec(index_inc=bucket_zero_index, index_dec=bucket_multi_index) - - # 2. Sample from the bucket - p_indicies = bucket.sample(num_distinct_sections=cpp) - np.add.at(p, p_indicies, 1) - - return partitions diff --git a/benchmarks/generator/class_per_partition_distribution_test.py b/benchmarks/generator/class_per_partition_distribution_test.py deleted file mode 100644 index ef3db6142..000000000 --- a/benchmarks/generator/class_per_partition_distribution_test.py +++ /dev/null @@ -1,31 +0,0 @@ -import numpy as np -import pytest - -from .class_per_partition_distribution import distribution - - -@pytest.mark.parametrize("cpp", [1, 5, 10]) -def test_distribution(cpp): - # Prepare - num_partitions = 10 - num_classes = 10 - num_sections = cpp * num_partitions - num_per_class = num_sections / num_classes - - # Execute - p_dist = distribution( - num_classes=num_classes, num_partitions=num_partitions, cpp=cpp - ) - - # Assert - assert len(p_dist) == num_partitions - - for partition in p_dist: - non_zero = np.count_nonzero(partition) - assert non_zero == cpp - - assert np.sum(p_dist) == num_sections - - # Each class should occur globally same number of times - for column in p_dist.T: - assert np.sum(column) == num_per_class diff --git a/benchmarks/generator/config.py b/benchmarks/generator/config.py deleted file mode 100644 index 4f0e5372f..000000000 --- a/benchmarks/generator/config.py +++ /dev/null @@ -1,141 +0,0 @@ -"""This module contains the federated dataset configs which are used by -the ~benchmarks.generator.__main__.generate_dataset function -""" -import tensorflow as tf - -from benchmarks.generator import data -from benchmarks.generator import partition_volume_distributions as pvd -from benchmarks.generator import transformer -from xain_fl import config - -local_generator_datasets_dir = config.storage_dir.joinpath("generator/datasets") - -keras_cifar10 = tf.keras.datasets.cifar10 -keras_fashion_mnist = tf.keras.datasets.fashion_mnist - -# Makes from an int e.g. 5 => 05 -leftpad = lambda i: str(i).zfill(2) - -cifar10_cpp = { - **{ - f"cifar-10-100p-noniid-{leftpad(num_cpp)}cpp": { - "keras_dataset": keras_cifar10, - "transformers": [transformer.class_per_partition], - "transformers_kwargs": [{"num_partitions": 100, "cpp": num_cpp}], - "num_partitions": 100, - "validation_set_size": 5000, - "assert_dataset_origin": True, - } - for num_cpp in [1, 2, 3, 5, 6, 9] - }, - # Edge cases where the default parition volume is not - # divisible by given CPP values - **{ - f"cifar-10-100p-noniid-{leftpad(num_cpp)}cpp": { - "keras_dataset": keras_cifar10, - "transformers": [data.remove_balanced, transformer.class_per_partition], - "transformers_kwargs": [ - {"num_remove": 200}, - {"num_partitions": 100, "cpp": num_cpp}, - ], - "num_partitions": 100, - "validation_set_size": 5000, - "assert_dataset_origin": False, - } - for num_cpp in [4, 7, 8] - }, - "cifar-10-100p-iid-balanced": { - "keras_dataset": keras_cifar10, - "transformers": [transformer.classes_balanced_randomized_per_partition], - "transformers_kwargs": [{"num_partitions": 100}], - "num_partitions": 100, - "validation_set_size": 5000, - "assert_dataset_origin": True, - }, -} - -fashion_mnist_cpp = { - **{ - f"fashion-mnist-100p-noniid-{leftpad(num_cpp)}cpp": { - "keras_dataset": keras_fashion_mnist, - "transformers": [transformer.class_per_partition], - "transformers_kwargs": [{"num_partitions": 100, "cpp": num_cpp}], - "num_partitions": 100, - "validation_set_size": 6000, - "assert_dataset_origin": True, - } - # num_cpp 7 and 8 are special cases; see next - for num_cpp in [1, 2, 3, 4, 5, 6, 9] - }, - # Edge cases where the default parition volume is not - # divisible by given CPP values - "fashion-mnist-100p-noniid-07cpp": { - "keras_dataset": keras_fashion_mnist, - "transformers": [data.remove_balanced, transformer.class_per_partition], - "transformers_kwargs": [ - # we need to remove 100 elements from the full xy_train so the - # 540 examples per partition are reduced to 539 and therefore - # divisible by 7 - {"num_remove": 100}, - {"num_partitions": 100, "cpp": 7}, - ], - "num_partitions": 100, - "validation_set_size": 6000, - "assert_dataset_origin": False, - }, - "fashion-mnist-100p-noniid-08cpp": { - "keras_dataset": keras_fashion_mnist, - "transformers": [data.remove_balanced, transformer.class_per_partition], - "transformers_kwargs": [ - # we need to remove 400 elements from the full xy_train so the - # 540 examples per partition are reduced to 536 and therefore - # divisible by 8 - {"num_remove": 400}, - {"num_partitions": 100, "cpp": 8}, - ], - "num_partitions": 100, - "validation_set_size": 6000, - "assert_dataset_origin": False, - }, - "fashion-mnist-100p-iid-balanced": { - "keras_dataset": keras_fashion_mnist, - "transformers": [transformer.classes_balanced_randomized_per_partition], - "transformers_kwargs": [{"num_partitions": 100}], - "num_partitions": 100, - "validation_set_size": 6000, - "assert_dataset_origin": True, - }, -} - - -cifar10_volumes = { - f"cifar-10-100p-b{pvd.b_to_str(b)}": { - "keras_dataset": keras_cifar10, - "transformers": [transformer.random_shuffle], - "transformers_kwargs": {}, - "num_partitions": pvd.dist_to_indicies(dist), - "validation_set_size": 5000, - "assert_dataset_origin": True, - } - for b, dist in pvd.cifar_10_100p() -} - -fashion_mnist_volumes = { - f"fashion-mnist-100p-b{pvd.b_to_str(b)}": { - "keras_dataset": keras_fashion_mnist, - "transformers": [transformer.random_shuffle], - "transformers_kwargs": {}, - "num_partitions": pvd.dist_to_indicies(dist), - "validation_set_size": 6000, - "assert_dataset_origin": True, - } - for b, dist in pvd.fashion_mnist_100p() -} - - -datasets = { - **cifar10_cpp, - **fashion_mnist_cpp, - **cifar10_volumes, - **fashion_mnist_volumes, -} diff --git a/benchmarks/generator/conftest.py b/benchmarks/generator/conftest.py deleted file mode 100644 index 8a868ae37..000000000 --- a/benchmarks/generator/conftest.py +++ /dev/null @@ -1,33 +0,0 @@ -import numpy as np -import pytest - -from benchmarks.conftest import create_mock_keras_dataset -from xain_fl.types import FederatedDataset, KerasDataset - -from . import data - - -class MockKerasDataset: # pylint: disable=too-few-public-methods - """Used as a mock dataset which will go through the load method in the data.py module - to make sure that the mock dataset stays compatible with the default load function - for all datasets in the project - """ - - @staticmethod - def load_data() -> KerasDataset: - return create_mock_keras_dataset() - - -def identitiy_transformer(x: np.ndarray, y: np.ndarray): - return x, y - - -@pytest.fixture -def mock_random_splits_2_dataset() -> FederatedDataset: - """Federated dataset mock with two partitions with no transformation""" - return data.create_federated_dataset( - keras_dataset=MockKerasDataset(), - num_partitions=2, - validation_set_size=60, - transformers=[identitiy_transformer], - ) diff --git a/benchmarks/generator/data.py b/benchmarks/generator/data.py deleted file mode 100644 index de0f2c196..000000000 --- a/benchmarks/generator/data.py +++ /dev/null @@ -1,111 +0,0 @@ -from typing import Callable, Dict, List, Optional, Tuple - -import numpy as np -from numpy import ndarray - -from xain_fl.types import FederatedDataset, KerasDataset - -from .transformer import classes_balanced_randomized_per_partition, sort_by_class - - -def load(keras_dataset) -> KerasDataset: - """Loads Keras Dataset in predictable form - - Args: - keras_dataset (Dataset) - - Returns: - Dataset - """ - (x_train, y_train), (x_test, y_test) = keras_dataset.load_data() - - y_train = y_train.reshape((y_train.shape[0],)) - y_test = y_test.reshape((y_test.shape[0],)) - - return (x_train, y_train), (x_test, y_test) - - -def extract_validation_set(x: ndarray, y: ndarray, size=6000): - """Will extract a validation set of "size" from given x,y pair. - - Args: - x (ndarray): numpy array - y (ndarray): numpy array - size (int): Size of validation set. Must be smaller than examples count - in x, y and multiple of label_count - """ - assert x.shape[0] == y.shape[0] - assert ( - x.shape[0] % size == 0 - ), f"number of examples ({x.shape[0]}) needs to be evenly divisible by parameter size ({size})" - - assert size % len(set(y)) == 0, "size must be a multiple of number of labels" - - x_balanced, y_balanced = classes_balanced_randomized_per_partition(x, y) - - xy_val = (x_balanced[:size], y_balanced[:size]) - xy_train = (x_balanced[size:], y_balanced[size:]) - - return xy_train, xy_val - - -def assert_is_balanced(y): - [_, counts] = np.unique(y, return_counts=True) - assert len(set(counts)) == 1, "Some classes appear more often than others" - - -def remove_balanced(x: ndarray, y: ndarray, num_remove: int) -> Tuple[ndarray, ndarray]: - assert_is_balanced(y) - - num_classes = len(np.unique(y)) - num_remove_per_class = num_remove // num_classes - - assert ( - num_remove % num_classes == 0 - ), "Number of examples to be removed has to be divisible by num_remove" - - x, y = sort_by_class(x, y) - - x_splits = np.split(x, indices_or_sections=num_classes, axis=0) - y_splits = np.split(y, indices_or_sections=num_classes, axis=0) - - x = np.concatenate([x_split[num_remove_per_class:] for x_split in x_splits]) - y = np.concatenate([y_split[num_remove_per_class:] for y_split in y_splits]) - - return x, y - - -def create_federated_dataset( - keras_dataset, - num_partitions: int, - validation_set_size: int, - transformers: List[Callable], - transformers_kwargs: Optional[Dict] = None, -) -> FederatedDataset: - (x_train, y_train), xy_test = load(keras_dataset) - - if isinstance(num_partitions, list): - assert x_train.shape[0] % (len(num_partitions) + 1) == 0 - else: - assert x_train.shape[0] % num_partitions == 0 - - (x_train, y_train), xy_val = extract_validation_set( - x_train, y_train, size=validation_set_size - ) - - for i, transformer in enumerate(transformers): - if ( - not transformers_kwargs - or not transformers_kwargs[i] - or transformers_kwargs[i] is None - ): - x_train, y_train = transformer(x_train, y_train) - else: - x_train, y_train = transformer(x_train, y_train, **transformers_kwargs[i]) - - x_splits = np.split(x_train, indices_or_sections=num_partitions, axis=0) - y_splits = np.split(y_train, indices_or_sections=num_partitions, axis=0) - - xy_splits = list(zip(x_splits, y_splits)) - - return xy_splits, xy_val, xy_test diff --git a/benchmarks/generator/data_test.py b/benchmarks/generator/data_test.py deleted file mode 100644 index a377f2918..000000000 --- a/benchmarks/generator/data_test.py +++ /dev/null @@ -1,74 +0,0 @@ -import numpy as np -import pytest -import tensorflow as tf - -from . import data - - -@pytest.mark.integration -def test_load(): - (x_train, y_train), (x_test, y_test) = data.load(tf.keras.datasets.mnist) - assert x_train.shape[0] == y_train.shape[0] - assert x_test.shape[0] == y_test.shape[0] - assert len(x_train.shape) == len(x_test.shape) - assert len(y_train.shape) == len(y_test.shape) - - -def test_remove_balanced(mock_keras_dataset): - # Prepare - (x, y), _ = mock_keras_dataset - num_examples = x.shape[0] - num_to_be_removed = 100 - [unique_classes, num_classes_per_class] = np.unique(y, return_counts=True) - expected_num_classes_per_class = [ - n - num_to_be_removed // len(unique_classes) for n in num_classes_per_class - ] - - # Execute - x, y = data.remove_balanced(x=x, y=y, num_remove=num_to_be_removed) - - # Assert - assert isinstance(x, np.ndarray) - assert isinstance(y, np.ndarray) - - assert x.shape[0] == y.shape[0] == num_examples - num_to_be_removed - - [_, actual_num_classes_per_class] = np.unique(y, return_counts=True) - - # Each class should occur equal times so we use - # the `set` method which makes comparision easier - assert set(expected_num_classes_per_class) == set(actual_num_classes_per_class) - - -def test_extract_validation_set(): - # Prepare - example_count = 1000 - validation_set_size = 100 - labels = list(range(0, 10)) - x = np.zeros((example_count, 28, 28), dtype=np.float64) - y = np.tile(np.array(labels, dtype=np.int64), example_count // 10) - - # Shuffle to make sure that extract_validation_set - # does not expect a sorted array in any form - np.random.shuffle(y) - - # Execute - (x_train, y_train), (x_val, y_val) = data.extract_validation_set(x, y, size=100) - - # Assert - assert ( - x_val.shape[0] == y_val.shape[0] == validation_set_size - ), "Validation set has wrong size" - assert ( - x_train.shape[0] == y_train.shape[0] == example_count - validation_set_size - ), "Train set has wrong size" - - assert ( - set(labels) == set(y_train) == set(y_val) - ), "Train and validation set both need to contain all labels" - - label_counts_train = np.unique(y_train, return_counts=True)[1] - label_counts_validation = np.unique(y_val, return_counts=True)[1] - - # Each label occurs equal times - assert len(set(label_counts_train)) == len(set(label_counts_validation)) == 1 diff --git a/benchmarks/generator/partition_volume_distributions.py b/benchmarks/generator/partition_volume_distributions.py deleted file mode 100644 index c1c3a4718..000000000 --- a/benchmarks/generator/partition_volume_distributions.py +++ /dev/null @@ -1,194 +0,0 @@ -from typing import Dict, List, Tuple - -import matplotlib -import numpy as np -from absl import app, flags - -from benchmarks.helpers import storage -from xain_fl.logger import get_logger - -logger = get_logger(__name__) - - -FLAGS = flags.FLAGS - -matplotlib.use("AGG") - -# To avoid issues with tkinter we need to set the renderer -# for matplotlib before importing pyplot -# As isort would move this line under the "import matplotlib" -# We need to skip isort explicitly -# pylint: disable-msg=wrong-import-position, wrong-import-order -import matplotlib.pyplot as plt # isort:skip - -FORMAT = "png" - -bs_fashion_mnist: Dict[float, float] = { - 1.0: 540.0, - 1.005: 417.94000000000017, - 1.01: 317.03099999999995, - 1.015: 236.25199999999995, - 1.02: 173.123, - 1.025: 124.95999999999998, - 1.03: 89.00600000000003, - 1.035: 62.66, - 1.04: 43.67599999999998, - 1.045: 30.181500000000014, -} -"""Parameters b, a (key, value) for ~._exponential_decay for FashionMNIST -examples distribution. Can be calculated with ~._brute_force_a_for_fashion_mnist -""" - - -bs_cifar_10: Dict[float, float] = { - 1.0: 450.0, - 1.005: 348.351, - 1.01: 264.28, - 1.015: 196.89999999999995, - 1.02: 144.26099999999994, - 1.025: 104.15400000000004, - 1.03: 74.18436000000008, - 1.035: 52.22250000000001, - 1.04: 36.402, - 1.045: 25.154300000000013, -} -"""Parameters b, a (key, value) for ~._exponential_decay for CIFAR-10 -examples distribution. Can be calculated with ~._brute_force_a_for_cifar_10 -""" - - -def fashion_mnist_100p() -> List[Tuple[float, List[int]]]: - """Returns the distribution of examples for a FashionMNIST dataset with 100 partitions - - Returns: - List[Tuple[float, List[int]]]: List of tuples with (b, List[int]) where the list of - ints describes the number of examples in the partition at the index of the int - """ - return _generate_100p_volume_distributions(bs_fashion_mnist) - - -def cifar_10_100p() -> List[Tuple[float, List[int]]]: - """Returns the distribution of examples for a CIFAR-10 dataset with 100 partitions - - Returns: - List[Tuple[float, List[int]]]: List of tuples with (b, List[int]) where the list of - ints describes the number of examples in the partition at the index of the int - """ - return _generate_100p_volume_distributions(bs_cifar_10) - - -def _exponential_decay(x: int, a: float, b: float) -> float: - return a * (b ** x) - - -def _generate_100p_volume_distributions( - bs: Dict[float, float] -) -> List[Tuple[float, List[int]]]: - """Returns the distribution of examples for a dataset with 100 partitions - - Args: - bs (Dict[float, float]): Dict key will be passed as `b` and value as `a` - to ~._exponential_decay function(x, a, b) - - Returns: - List[Tuple[float, List[int]]]: List of tuples with (b, List[int]) where the list of - ints describes the number of examples in the partition at the index of the int - """ - dists = [] - for b, a in bs.items(): - dist = _generate_volume_distribution(np.arange(100), a, b) - dists.append((b, dist)) - return dists - - -def _generate_volume_distribution(xs: np.ndarray, a: float, b: float) -> List[int]: - assert xs.ndim == 1 - return [int(_exponential_decay(x, a=a, b=b)) for x in xs] - - -def _brute_force_a_for_fashion_mnist(): - for b in [1.0, 1.005, 1.01, 1.015, 1.02, 1.025, 1.03, 1.035, 1.04, 1.045]: - a = _brute_force_a(np.arange(100), b, target=54_000) - print(f"{b}: {a},") - - -def _brute_force_a_for_cifar_10(): - for b in [1.0, 1.005, 1.01, 1.015, 1.02, 1.025, 1.03, 1.035, 1.04, 1.045]: - a = _brute_force_a(np.arange(100), b, target=45_000) - print(f"{b}: {a},") - - -# pylint: disable-msg=inconsistent-return-statements -def _brute_force_a(xs, b: float, target: int, step=1.0, start=1): - a_best = 1 - for a in np.arange(start, target, step): - ys = [int(_exponential_decay(x, a=a, b=b)) for x in xs] - sum_ys = sum(ys) - if sum_ys == target: - return a - if sum_ys < target: - a_best = a - else: - # Recursive step - return _brute_force_a(xs, b, target, step / 10, start=a_best) - - -def b_to_str(b: float): - b_str = f"{b: List[int]: - indices = [0] * len(dist) - for i, _ in enumerate(dist): - if i == 0: - indices[i] = dist[i] - else: - indices[i] = indices[i - 1] + dist[i] - - assert indices[-1] == sum(dist) - - # Exclude last element as indices only mark start of section - return indices[:-1] - - -def _plot_fashion_mnist_dist(): - dists = fashion_mnist_100p() - xs = np.arange(100) - plt.figure() - legend = [] - for b, dist in dists: - legend.append(str(b)) - plt.plot(xs, np.array(dist), "o", markersize=1.0) - plt.legend(legend, loc="upper left") - - plt.xlabel("Partition ID") - plt.ylabel("Examples") - - dname = storage.create_output_subdir("partition_volume_distributions") - fname = storage.fname_with_default_dir("plot-part-vol.png", dname) - - plt.savefig(fname=fname, format=FORMAT) - - # FIXME: Matplotlib is currently using agg, which is a non-GUI - # backend, so cannot show the figure. - # plt.show() - - return fname - - -def main(): - """Calculates and prints a, b parameters for calculation of - volume distributions - """ - print("Fashion-MNIST:") - _brute_force_a_for_fashion_mnist() - print("CIFAR-10:") - _brute_force_a_for_cifar_10() - print("Plot Fashion-MNIST volume distributions") - fmd_fpath = _plot_fashion_mnist_dist() - logger.info("Data plotted and saved in file", filepath=fmd_fpath) - - -if __name__ == "__main__": - app.run(main=lambda _: main()) diff --git a/benchmarks/generator/partition_volume_distributions_test.py b/benchmarks/generator/partition_volume_distributions_test.py deleted file mode 100644 index 27f9f7959..000000000 --- a/benchmarks/generator/partition_volume_distributions_test.py +++ /dev/null @@ -1,60 +0,0 @@ -import numpy as np -import pytest - -from . import partition_volume_distributions as pvd - - -def test_fashion_mnist_distributions(): - # Prepare - expected_sum = 54_000 - - # Execute - dists = pvd.fashion_mnist_100p() - - # Assert - assert len(dists) == 10 - for dist in dists: - assert sum(dist[1]) == expected_sum - - -def test_cifar_10_distributions(): - # Prepare - expected_sum = 45_000 - - # Execute - dists = pvd.cifar_10_100p() - - # Assert - assert len(dists) == 10 - for dist in dists: - assert sum(dist[1]) == expected_sum - - -@pytest.mark.parametrize( - "b, expected, target", - [ - (1.0, 540.0, 54_000), - (1.005, 417.94000000000017, 54_000), - (1.01, 317.03099999999995, 54_000), - (1.0, 450.0, 45_000), - (1.005, 348.351, 45_000), - (1.01, 264.28, 45_000), - ], -) -def test_brute_force_a(b, expected, target): - # Execute - # pylint: disable-msg=protected-access - actual = pvd._brute_force_a(np.arange(100), b=b, target=target) - # Assert - assert actual == expected - - -def test_dist_to_indicies(): - # Prepare - dists = pvd.cifar_10_100p() + pvd.fashion_mnist_100p() - - assert len(dists) == 20 - - for _, dist in dists: - indices = pvd.dist_to_indicies(dist) - assert len(indices) == len(dist) - 1 diff --git a/benchmarks/generator/persistence.py b/benchmarks/generator/persistence.py deleted file mode 100644 index e5598b161..000000000 --- a/benchmarks/generator/persistence.py +++ /dev/null @@ -1,147 +0,0 @@ -""" -This module stores and retrives datasets from a given storage_dir - -A dataset is stored with N>=0 for N=num_splits-1 as -- xN.npy -- yN.npy -- x_test.npy -- y_test.npy -""" -import os -from typing import Dict, List, Optional, Tuple - -import numpy as np -from absl import logging - -from benchmarks.helpers import storage -from xain_fl.helpers import sha1 -from xain_fl.types import FederatedDataset, FnameNDArrayTuple - - -def save(fname: str, data: np.ndarray, storage_dir: str): - """Stores an ndarray in storage_dir with as fname - - Args: - fname (str): Filename - data: (np.ndarray): Data to store - storage_dir (str): Absolute path to directory in which data should be stored - - Returns: - str: SHA1 checksum of stored file - """ - path = "{}/{}".format(storage_dir, fname) - np.save(path, data) - - print(f"Saved {path}") - - return sha1.checksum(path) - - -def dataset_to_fname_ndarray_tuple_list( - dataset: FederatedDataset -) -> List[Tuple[str, np.ndarray]]: - """Transforms a FederatedDataset into a list of (filename, ndarray) tuples - so they can be easily stored on disk. - - Args: - dataset (FederatedDataset): The dataset to be transformed - - Returns: - List[Tuple[str, np.ndarray]] - """ - fname_ndarray_tuples: List[Tuple[str, np.ndarray]] = [] - xy_splits, xy_val, xy_test = dataset - - # Add all splits as tuples to fname_ndarray_tuple - for i, split in enumerate(xy_splits): - fname_ndarray_tuples += to_fname_ndarray_tuple(xy=split, suffix=str(i).zfill(2)) - - # Add validation set to files which will be stored - fname_ndarray_tuples += to_fname_ndarray_tuple(xy=xy_val, suffix="val") - - # Add test set to files which will be stored - fname_ndarray_tuples += to_fname_ndarray_tuple(xy=xy_test, suffix="test") - - return fname_ndarray_tuples - - -def to_fname_ndarray_tuple( - suffix: str, xy: Tuple[np.ndarray, np.ndarray] -) -> List[FnameNDArrayTuple]: - """Given a suffix as well as a tuple of ndarrays a list of (filename, ndarray) tuples - with length two will be returned. - - Args: - suffix (str) - xy (Tuple[np.ndarray, np.ndarray]) - - Returns: - List[FnameNDArrayTuple] - - Example: - For `to_fname_ndarray_tuple(suffix="val", xy)` xy beeing a tuple of ndarrays the - result will be a list of length two as:: - - [ - ("x_val.npy", xy[0]), - ("y_val.npy", xy[1]), - ] - """ - x, y = xy - - name_x = f"x_{suffix}.npy" - name_y = f"y_{suffix}.npy" - - return [(name_x, x), (name_y, y)] - - -def get_dataset_dir(dataset_name: str, local_generator_dir: str) -> str: - """Will return dataset directory and create it if its not already present - - Args: - dataset_name (str) - local_generator_dir (str): Absolut path - - Returns: - str: Absolut path to dataset_dir - """ - dataset_dir = os.path.join(local_generator_dir, dataset_name) - - if not os.path.isdir(dataset_dir): - os.makedirs(dataset_dir) - - return dataset_dir - - -def save_splits(dataset_name: str, dataset: FederatedDataset, local_generator_dir: str): - """Saves federated dataset to filesystem - - Args: - dataset_name (str) - dataset (FederatedDataset) - local_generator_dir (str) - """ - fname_ndarray_tuple = dataset_to_fname_ndarray_tuple_list(dataset) - - dataset_dir = get_dataset_dir( - dataset_name=dataset_name, local_generator_dir=local_generator_dir - ) - - logging.info("Storing dataset in {}".format(dataset_dir)) - - split_hashes: Dict[str, List[Optional[str]]] = {} - - for fname, ndarr in fname_ndarray_tuple: - sha1cs = save(fname=fname, data=ndarr, storage_dir=dataset_dir) - - storage_key = fname[2:-4] - - if storage_key not in split_hashes: - split_hashes[storage_key] = [None, None] - - split_hashes[storage_key][0 if "x_" in fname else 1] = sha1cs - - hash_file = os.path.join(dataset_dir, f"../../{dataset_name}.json") - storage.write_json(split_hashes, hash_file) - - logging.info("{} generated and stored\n".format(dataset_name)) diff --git a/benchmarks/generator/persistence_test.py b/benchmarks/generator/persistence_test.py deleted file mode 100644 index 197dfa1fc..000000000 --- a/benchmarks/generator/persistence_test.py +++ /dev/null @@ -1,184 +0,0 @@ -import os - -import numpy as np -import pytest - -from xain_fl.helpers import sha1 -from xain_fl.types import FederatedDataset - -from . import persistence - - -# Helper method to compare two federated datasets -def check_federated_dataset_equality( - dataset_expected: FederatedDataset, dataset_actual: FederatedDataset -): - xy_splits_expected, xy_val_expected, xy_test_expected = dataset_expected - xy_splits_actual, xy_val_actual, xy_test_actual = dataset_actual - - assert len(xy_splits_expected) == len(xy_splits_actual) - assert len(xy_test_expected) == len(xy_test_actual) - - # Assert - for xy_expected, xy_actual in zip(xy_splits_expected, xy_splits_actual): - x_expected, y_expected = xy_expected - x_actual, y_actual = xy_actual - - np.testing.assert_equal(x_expected, x_actual) - np.testing.assert_equal(y_expected, y_actual) - - assert xy_val_expected[0].shape == xy_val_actual[0].shape - assert xy_val_expected[1].shape == xy_val_actual[1].shape - - assert xy_test_expected[0].shape == xy_test_actual[0].shape - assert xy_test_expected[1].shape == xy_test_actual[1].shape - - -def test_dataset_to_fname_ndarray_tuple_list(mock_random_splits_2_dataset): - # Prepare - fnames_expected = [ - "x_00.npy", - "y_00.npy", - "x_01.npy", - "y_01.npy", - "x_val.npy", - "y_val.npy", - "x_test.npy", - "y_test.npy", - ] - - # Execute - fname_ndarray_tuples = persistence.dataset_to_fname_ndarray_tuple_list( - mock_random_splits_2_dataset - ) - - # Assert - fnames_actual = [n for (n, _) in fname_ndarray_tuples] - - assert set(fnames_actual) == set(fnames_expected) - - for name, arr in fname_ndarray_tuples: - assert isinstance(arr, np.ndarray) - - if "test" in name: - assert arr.shape[0] == 100 - elif "val" in name: - assert arr.shape[0] == 60 - else: - assert arr.shape[0] == 270 - - -def test_to_fname_ndarray_tuple(): - # Prepare - x = np.ones((3, 2)) - y = np.ones((3)) - - t_expected = [("x_00.npy", x), ("y_00.npy", y)] - - # Execute - t_actual = persistence.to_fname_ndarray_tuple("00", (x, y)) - - # Assert - assert t_expected == t_actual - - -@pytest.mark.integration -def test_save(tmp_path): - fname = "xain_test_save_load_single.npy" - fpath = os.path.join(tmp_path, fname) - - # Create NumPy array - a_expected = np.zeros(shape=(3, 28, 28, 1), dtype=np.uint8) - a_expected[0][1][1][0] = 255 - - # Execute - persistence.save(fname=fname, data=a_expected, storage_dir=tmp_path) - - # Assert - a_actual = np.load(fpath) # load ndarry - - np.testing.assert_equal(a_expected, a_actual) - - -def test_save_splits(monkeypatch, tmp_path, mock_random_splits_2_dataset): - # Prepare - dataset_name = "mock_dataset" - xy_splits, xy_val, xy_test = mock_random_splits_2_dataset - - # -> Files which are supposed to be saved - files_to_be_saved = [ - ("x_00.npy", xy_splits[0][0], tmp_path), - ("y_00.npy", xy_splits[0][1], tmp_path), - ("x_01.npy", xy_splits[1][0], tmp_path), - ("y_01.npy", xy_splits[1][1], tmp_path), - ("x_val.npy", xy_val[0], tmp_path), - ("y_val.npy", xy_val[1], tmp_path), - ("x_test.npy", xy_test[0], tmp_path), - ("y_test.npy", xy_test[1], tmp_path), - ] - - files_passed_to_save = [] - - def mock_save(fname: str, data: np.ndarray, storage_dir: str): - files_passed_to_save.append((fname, data, storage_dir)) - - def mock_checksum(fpath: str): - return "MOCK_CHECKSUM_FOR: {}".format(fpath) - - monkeypatch.setattr(persistence, "save", mock_save) - monkeypatch.setattr(sha1, "checksum", mock_checksum) - - # Execute - persistence.save_splits( - dataset_name=dataset_name, - dataset=mock_random_splits_2_dataset, - local_generator_dir=tmp_path, - ) - - dataset_dir = os.path.join(tmp_path, dataset_name) - - # Assert - for expected, actual in zip(files_to_be_saved, files_passed_to_save): - assert expected[0] == actual[0] - assert expected[1].shape == actual[1].shape - assert dataset_dir == actual[2] - - -@pytest.mark.integration -def test_save_load_splits(tmp_path, mock_random_splits_2_dataset): - # Prepare - dataset_name = "mock_dataset" - dataset_dir = os.path.join(tmp_path, dataset_name) - - def fpath(fname): - return os.path.join(dataset_dir, fname) - - # Execute - # Save splits into tmp directory - persistence.save_splits( - dataset_name=dataset_name, - dataset=mock_random_splits_2_dataset, - local_generator_dir=tmp_path, - ) - - # Assert - # Load splits from tmp directory - d = { - # remove .npy ending with [:-4] - fname[:-4]: np.load(fpath(fname)) - for fname in os.listdir(dataset_dir) - if "npy" in fname - } - - dataset_actual = ( - # train set - [(d["x_00"], d["y_00"]), (d["x_01"], d["y_01"])], - # validation set - (d["x_val"], d["y_val"]), - # test set - (d["x_test"], d["y_test"]), - ) - - check_federated_dataset_equality( - dataset_expected=mock_random_splits_2_dataset, dataset_actual=dataset_actual - ) diff --git a/benchmarks/generator/transformer.py b/benchmarks/generator/transformer.py deleted file mode 100644 index a0e32a372..000000000 --- a/benchmarks/generator/transformer.py +++ /dev/null @@ -1,311 +0,0 @@ -from typing import Callable, Tuple - -import numpy as np -from numpy import ndarray - -from .class_per_partition_distribution import distribution as cpp_distribution - -# Passed to RandomState for predictable shuffling -SEED = 851746 - - -def transfomer_decorator(func: Callable) -> Callable: - """The decorator will validate the input and result of any - transformer function it is applied to. - - Args: - func (Callable): The function to be decorated - - Returns: - Callable: Decorated function - """ - - def wrapper( - x: np.ndarray, y: np.ndarray, *args, **kwargs - ) -> Tuple[np.ndarray, np.ndarray]: - assert x.shape[0] == y.shape[0], "x and y need to have them dimension on axis=0" - - x_transformed, y_transformed = func(x, y, *args, **kwargs) - - assert ( - x.shape == x_transformed.shape - ), "x has to have the same shape after transformation as before" - assert ( - y.shape == y_transformed.shape - ), "y has to have the same shape after transformation as before" - - return (x_transformed, y_transformed) - - return wrapper - - -@transfomer_decorator -def random_shuffle(x: ndarray, y: ndarray) -> Tuple[ndarray, ndarray]: - """Will randomly shuffle x and y - - Args: - x (ndarray) - y (ndarray) - - Returns: - Tuple[ndarray, ndarray] - """ - # pylint: disable=no-member - permutation = np.random.RandomState(seed=SEED).permutation(x.shape[0]) - x_shuffled = x[permutation] - y_shuffled = y[permutation] - return x_shuffled, y_shuffled - - -@transfomer_decorator -def classes_balanced_randomized_per_partition( - x: ndarray, y: ndarray, num_partitions=10 -) -> Tuple[ndarray, ndarray]: - """Shuffles dataset so that each partition has the same count of each - class equal times. - - Args: - x (ndarray) - y (ndarray) - num_partitions (int): Number of partitions the dataset will later split into - - Returns: - Tuple[ndarray, ndarray] - - Example: - Assuming three classes with each 30 examples in the full dataset - and three paritions we will get:: - - [ - [10, 10, 10] - [10, 10, 10] - [10, 10, 10] - ] - - While each of the 30 examples per class is randomly placed in one - of the partitions. - """ - example_count = y.shape[0] - section_size = int(example_count / num_partitions) - - assert ( - example_count % num_partitions == 0 - ), "Number of examples needs to be evenly divisible by section_count" - - x_shuffled, y_shuffled = random_shuffle(x, y) - - # Array of indices that sort a along the specified axis. - sort_index = np.argsort(y_shuffled, axis=0) - - x_sorted = x_shuffled[sort_index] - y_sorted = y_shuffled[sort_index] - - balance_index = ( - np.array(range(example_count), np.int64) - .reshape((section_size, num_partitions)) - .transpose() - .reshape(example_count) - ) - - x_balanced = x_sorted[balance_index] - y_balanced = y_sorted[balance_index] - - return x_balanced, y_balanced - - -@transfomer_decorator -def sort_by_class(x: ndarray, y: ndarray) -> Tuple[ndarray, ndarray]: - """Partitions examples by class. - - Args: - x (ndarray) - y (ndarray) - - Returns: - Tuple[ndarray, ndarray] - """ - example_count = y.shape[0] - partition_count = np.unique(y).shape[0] - - assert ( - example_count % partition_count == 0 - ), "Number of examples needs to be evenly divisible by partition_count" - - # Array of indices that sort a along the specified axis. - sort_indexes = np.argsort(y, axis=0) - - x_sorted = x[sort_indexes] - y_sorted = y[sort_indexes] - - return x_sorted, y_sorted - - -@transfomer_decorator -def one_biased_class_per_partition( # pylint: disable=R0914 - x: ndarray, y: ndarray, bias=1000 -) -> Tuple[ndarray, ndarray]: - """Shuffle y so that the labels are uniformly distributed in each section - except one label which will have a bias. Considering the bias the rest - needs to be evenly divisible. - - - Args: - x (ndarray) - y (ndarray) - bias (int): Bias one of the classes in each partition should have - - Returns: - Tuple[ndarray, ndarray] - """ - example_count = y.shape[0] - # section_count is equal to number of unique labels - unique_labels_set = set(y) - section_count = len(unique_labels_set) - section_size = int(example_count / section_count) - - assert ( - example_count % section_count == 0 - ), "Number of examples needs to be evenly divisible by section_count" - - # Array of indices that sort a along the specified axis. - sort_indexes = np.argsort(y, axis=0) - - x_sorted = x[sort_indexes] - y_sorted = y[sort_indexes] - - x_splits = np.split(x_sorted, indices_or_sections=section_count, axis=0) - y_splits = np.split(y_sorted, indices_or_sections=section_count, axis=0) - - # Extract first "bias" from each split - x_biased_splits = [x_split[:bias] for x_split in x_splits] - y_biased_splits = [y_split[:bias] for y_split in y_splits] - - for y_biased_split in y_biased_splits: - # Check that we got single label splits - assert len(set(y_biased_split)) == 1 - - # Merge rest - x_unbiased = np.concatenate([x_split[bias:] for x_split in x_splits]) - y_unbiased = np.concatenate([y_split[bias:] for y_split in y_splits]) - - assert x_unbiased.shape[0] == section_count * ( - section_size - bias - ), "Length of unbiased elements should be equal to original length minus extracted bias" - - # Create balanced shuffle of rest - x_balanced, y_balanced = classes_balanced_randomized_per_partition( - x_unbiased, y_unbiased, num_partitions=section_count - ) - - for y_balanced_split in np.split(y_balanced, indices_or_sections=section_count): - assert set(y_balanced_split) == unique_labels_set - - # split unbiased splits again to be merged with biased splits - x_balanced_splits = np.split(x_balanced, indices_or_sections=section_count, axis=0) - y_balanced_splits = np.split(y_balanced, indices_or_sections=section_count, axis=0) - - x_merged = np.concatenate( - [ - np.concatenate([x1, x2], axis=0) - for x1, x2 in zip(x_biased_splits, x_balanced_splits) - ] - ) - y_merged = np.concatenate( - [ - np.concatenate([y1, y2], axis=0) - for y1, y2 in zip(y_biased_splits, y_balanced_splits) - ] - ) - - assert x.shape == x_merged.shape, "Shape of x should not change" - - return x_merged, y_merged - - -@transfomer_decorator -def class_per_partition( # pylint: disable=R0914 - x: ndarray, y: ndarray, num_partitions: int, cpp: int -) -> Tuple[ndarray, ndarray]: - """Transforms dataset so that each partition contains {cpp} classes - in a balanced fashion. - - Args: - x (ndarray) - y (ndarray) - num_partitions (int): number of partitions the dataset will have - cpp (int): classes per partition - - Returns: - Tuple[ndarray, ndarray] - """ - assert x.shape[0] % num_partitions == 0, ( - f"Number of examples ({x.shape[0]}) needs to be divisible by " - + "num_partitions ({num_partitions})" - ) - - num_classes = len(np.unique(y)) - num_sections = cpp * num_partitions - - assert num_sections % num_classes == 0, ( - f"number of sections ({num_sections}) needs to be divisible " - + f"by number of classes ({num_classes})" - ) - - assert x.shape[0] % num_sections == 0, ( - f"number of examples ({x.shape[0]}) needs to be divisible " - + f"by number of sections ({cpp * num_partitions})" - ) - - section_size = x.shape[0] // num_sections # number of examples per section - - assert (x.shape[0] / num_classes) % section_size == 0, ( - f"number of examples per class ({x.shape[0] / num_classes}) needs to be divisible " - + f"by number of examples per section ({section_size})" - ) - - # Array of indices that sort a along the specified axis. - sort_indices = np.argsort(y, axis=0) - - # After sorting we will have num_labels sorted sections (e.g. 10 for MNIST) - # e.g. with 4 labels and 8 examples (assuming each label occurs equal times) - # => y = [0, 0, 1, 1, 2, 2, 3, 3] - x_sorted = x[sort_indices] - y_sorted = y[sort_indices] - - # We want to achive the following structure - # global: [ class 1 , ..., class N ] - # per class: [ section 1, ..., section N ] - # per section: [ example 1, ..., example N ] - new_x_shape = (num_classes, num_sections // num_classes, section_size, *x.shape[1:]) - new_y_shape = (num_classes, num_sections // num_classes, section_size, *y.shape[1:]) - - x_sections = x_sorted.reshape(new_x_shape) - y_sections = y_sorted.reshape(new_y_shape) - - # Type of dist is List[List[int]] with length num_partitions where each sublist - # has length num_class and contains at each index a one if a class section should - # occur in the final dataset partition - cpp_dist = cpp_distribution( - num_classes=num_classes, num_partitions=num_partitions, cpp=cpp - ) - - _, class_indices = np.nonzero(cpp_dist) - section_indices = np.zeros((num_classes), dtype=np.int8) - - x_dist = [] - y_dist = [] - - for c_idx in class_indices: - s_idx = section_indices[c_idx] - section_indices[c_idx] += 1 - - x_sec = x_sections[c_idx][s_idx] - y_sec = y_sections[c_idx][s_idx] - - x_dist.append(x_sec) - y_dist.append(y_sec) - - x_dist = np.concatenate(x_dist) - y_dist = np.concatenate(y_dist) - - return (x_dist, y_dist) diff --git a/benchmarks/generator/transformer_test.py b/benchmarks/generator/transformer_test.py deleted file mode 100644 index bb931f7e1..000000000 --- a/benchmarks/generator/transformer_test.py +++ /dev/null @@ -1,223 +0,0 @@ -import numpy as np -import pytest - -from . import transformer - - -def test_random_shuffle(): - # Prepare - x = np.array([1, 2, 3, 4]) - y = np.array([11, 12, 13, 14]) - # Execute - xs, ys = transformer.random_shuffle(x, y) - # Assert - for x, y in zip(xs, ys): - assert x == (y - 10) - - -def test_classes_balanced_randomized_per_partition_wrong_section_count(): - # Prepare - examples = range(100, 200) - sorted_labels = range(10) - - x = np.array(examples, dtype=np.int64) - y = np.tile(np.array(sorted_labels, dtype=np.int64), 10) - - with pytest.raises(Exception): - transformer.classes_balanced_randomized_per_partition(x, y, num_partitions=3) - - -@pytest.mark.parametrize( - "section_count, example_count", [(2, 1000), (5, 1000), (10, 1000)] -) -def test_classes_balanced_randomized_per_partition(section_count, example_count): - # Prepare - unique_labels = range(10) # 10 unique labels - - # Values will at the same time be their original labels - # We will later use this for asserting if the label relationship is still present - x = np.tile( - np.array(unique_labels, dtype=np.int64), example_count // len(unique_labels) - ) - - # Shuffle to avoid any bias; been there... - np.random.shuffle(x) - - y = np.copy(x) - - assert x.shape[0] == y.shape[0] - - # Execute - # pylint: disable=line-too-long - x_balanced_shuffled, y_balanced_shuffled = transformer.classes_balanced_randomized_per_partition( - x, y, num_partitions=section_count - ) - - # Assert - # Create tuples for x,y splits so we can more easily analyze them - x_splits = np.split(x_balanced_shuffled, indices_or_sections=section_count, axis=0) - y_splits = np.split(y_balanced_shuffled, indices_or_sections=section_count, axis=0) - - # Check that each value still matches its label - for (x_split, y_split) in zip(x_splits, y_splits): - # Check that the split has the right size - assert y_split.shape[0] == int(example_count / section_count) - # Check that each segment contains each label - assert set(y_split) == set(unique_labels) - - label_count_per_section = example_count / section_count / len(unique_labels) - - for c in np.unique(y_split, return_counts=True)[1]: - assert c == label_count_per_section - - for x_i, y_i in zip(x_split, y_split): - assert x_i == y_i - - -@pytest.mark.parametrize("bias, example_count", [(10, 1000), (20, 1000), (50, 1000)]) -def test_one_biased_class_per_partition(bias, example_count): # pylint: disable=R0914 - # Prepare - num_unique_classes = 10 - unique_labels = range(num_unique_classes) # 10 unique labels - section_size = example_count // num_unique_classes - # Amount of labels per partition without any bias - unbiased_label_count = (section_size - bias) / num_unique_classes - - x = np.ones((example_count, 28, 28), dtype=np.int64) - y = np.tile(np.array(unique_labels, dtype=np.int64), section_size) - - assert x.shape[0] == y.shape[0] - - # Execute - x_balanced_shuffled, y_balanced_shuffled = transformer.one_biased_class_per_partition( - x, y, bias=bias - ) - - # Assert - # Create tuples for x,y splits so we can more easily analyze them - x_splits = np.split( - x_balanced_shuffled, indices_or_sections=num_unique_classes, axis=0 - ) - y_splits = np.split( - y_balanced_shuffled, indices_or_sections=num_unique_classes, axis=0 - ) - - # Check that each value still matches its label - for split_index, xy_split in enumerate(zip(x_splits, y_splits)): - _, y_split = xy_split - - # Check that the split has the right size - assert y_split.shape[0] == int(example_count / num_unique_classes) - # Check that each segment contains each label - assert set(y_split) == set( - unique_labels - ), "Each label needs to be present in each section" - - unique_counts = np.unique(y_split, return_counts=True)[1] - - # The first split should contain a bias for the first label - # The second split should contain a bias for the second label - # repeat untill The "last label should..." - for unique_counts_index, unique_count in enumerate(unique_counts): - if split_index == unique_counts_index: - assert ( - unique_count == unbiased_label_count + bias - ), "At split_index {} a bias should be present".format(split_index) - else: - assert unique_count == unbiased_label_count - - -@pytest.mark.parametrize( - "example_count, num_partitions, cpp", [(44000, 100, 4), (54000, 100, 6)] -) -def test_class_per_partition( - cpp, num_partitions, example_count -): # pylint: disable=R0914 - # Prepare - num_unique_classes = 10 - unique_labels = range(num_unique_classes) # 10 unique labels - - x = np.ones((example_count, 28, 28), dtype=np.int64) - - y = np.tile( - np.array(unique_labels, dtype=np.int64), example_count // num_unique_classes - ) - - # Assert that assumptions about input are correct - assert x.shape[0] == example_count - assert x.shape[0] == y.shape[0] - - # Execute - x_shuffled, y_shuffled = transformer.class_per_partition( - x, y, num_partitions=num_partitions, cpp=cpp - ) - - # Assert - assert x.shape == x_shuffled.shape - assert y.shape == y_shuffled.shape - - # Create tuples for x,y splits so we can more easily analyze them - y_splits = np.split(y_shuffled, indices_or_sections=num_partitions, axis=0) - - actual_cpp = [len(set(y_split)) for y_split in y_splits] - - assert set(actual_cpp) == set([cpp]) - - -@pytest.mark.slow -@pytest.mark.parametrize( - "example_count, num_partitions, cpp", - [ - (45000, 100, 1), - (45000, 100, 6), - (45000, 100, 10), - (54000, 100, 1), - (54000, 100, 4), - (53900, 100, 7), - (54000, 100, 10), - ], -) -def test_class_per_partition_verbose(cpp, num_partitions, example_count): - """Purpose of this test is to test even more verbose""" - test_class_per_partition(cpp, num_partitions, example_count) - - -@pytest.mark.parametrize( - "num_unique_classes, example_count", [(2, 1000), (5, 1000), (10, 1000)] -) -def test_sort_by_class(num_unique_classes, example_count): - # Prepare - unique_labels = range(num_unique_classes) - - # Values will at the same time be their original labels - # We will later use this for asserting if the label relationship is still present - x = np.tile( - np.array(unique_labels, dtype=np.int64), example_count // num_unique_classes - ) - - # Shuffle to avoid any bias; been there... - np.random.shuffle(x) - - y = np.copy(x) - - assert x.shape[0] == y.shape[0] - - # Execute - x_sectioned, y_sectioned = transformer.sort_by_class(x, y) - - # Assert - # Create tuples for x,y splits so we can more easily analyze them - x_splits = np.split(x_sectioned, indices_or_sections=num_unique_classes, axis=0) - y_splits = np.split(y_sectioned, indices_or_sections=num_unique_classes, axis=0) - - # Check that each value still matches its label - for (x_split, y_split) in zip(x_splits, y_splits): - # Check that the split has the right size - assert y_split.shape[0] == int(example_count / num_unique_classes) - - # Check that each segment contains only one label - assert len(set(y_split)) == 1 - - # check that x,y is correctly matched - for x_i, y_i in zip(x_split, y_split): - assert x_i == y_i diff --git a/benchmarks/helpers/__init__.py b/benchmarks/helpers/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/helpers/storage.py b/benchmarks/helpers/storage.py deleted file mode 100644 index 39cdf1acd..000000000 --- a/benchmarks/helpers/storage.py +++ /dev/null @@ -1,63 +0,0 @@ -import glob -import json -import os -from typing import Dict - -from absl import flags - -FLAGS = flags.FLAGS - - -def listdir_recursive(dname: str, relpath=True): - """Lists all files found in {dname} with relative path - - Args: - dname (str): Absolute path to directory - - Returns: - List[str]: List of all files with relative path to dname - """ - files = [ - fpath - for fpath in glob.glob(f"{dname}/**", recursive=True) - if os.path.isfile(fpath) - ] - - if relpath: - return [os.path.relpath(fpath, dname) for fpath in files] - - return files - - -def create_output_subdir(dname: str) -> str: - if os.path.isabs(dname): - raise Exception("Please provide a relative directory name") - - dname = os.path.join(FLAGS.output_dir, dname) - - os.makedirs(dname, exist_ok=True) - - return dname - - -def fname_with_default_dir(fname: str, dname: str = None) -> str: - """Returns fname if its a absolute path otherwise joins it with dname""" - if os.path.isabs(fname): - return fname - - if dname is None: - raise Exception("For relative fname dname is required") - - return os.path.join(dname, fname) - - -def write_json(results: Dict, fname: str): - fname = fname_with_default_dir(fname, FLAGS.output_dir) - with open(fname, "w") as outfile: - json.dump(results, outfile, indent=2, sort_keys=True) - - -def read_json(fname: str): - fname = fname_with_default_dir(fname, FLAGS.output_dir) - with open(fname, "r") as outfile: - return json.loads(outfile.read()) diff --git a/benchmarks/helpers/storage_test.py b/benchmarks/helpers/storage_test.py deleted file mode 100644 index 01ca0ed3d..000000000 --- a/benchmarks/helpers/storage_test.py +++ /dev/null @@ -1,28 +0,0 @@ -import os - -from . import storage - - -def test_fname_with_default_dir_absolute_path(): - # Prepare - fname = "/my/absolute/path/myfile" - expected_abspath = fname - - # Execute - actual_abspath = storage.fname_with_default_dir(fname) - - # Assert - assert expected_abspath == actual_abspath - - -def test_fname_with_default_dir_relative_path(output_dir): - # Prepare - fname = "myfile" - expected_abspath = os.path.join(output_dir, fname) - - # Execute - actual_abspath = storage.fname_with_default_dir(fname, output_dir) - - # Assert - assert expected_abspath == actual_abspath - assert output_dir in actual_abspath diff --git a/benchmarks/ops/__init__.py b/benchmarks/ops/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/ops/__main__.py b/benchmarks/ops/__main__.py deleted file mode 100644 index 9ad542c65..000000000 --- a/benchmarks/ops/__main__.py +++ /dev/null @@ -1,7 +0,0 @@ -from absl import app - -from . import results - - -def download(): - app.run(main=lambda _: results.download()) diff --git a/benchmarks/ops/conftest.py b/benchmarks/ops/conftest.py deleted file mode 100644 index 17dc700a6..000000000 --- a/benchmarks/ops/conftest.py +++ /dev/null @@ -1,76 +0,0 @@ -import os -import random -import string - -import boto3 -import pytest -from absl import flags - -FLAGS = flags.FLAGS - - -client = boto3.client("s3") - - -def random_string(length: int): - return "".join(random.sample(string.ascii_lowercase, length)) - - -@pytest.fixture -def populated_output_dir(tmpdir): - """Creates an output_dir with 10 files in it""" - tmpdir = str(tmpdir) - FLAGS(["test", f"--output_dir={tmpdir}"]) - - for i in range(10): - fname = os.path.join(tmpdir, f"file_{i}.txt") - - # create a new file and open it for writing - with open(fname, "x") as f: - f.write("To write or not to write?") - f.close() - - return tmpdir - - -@pytest.fixture -def populated_results_dir(tmpdir): - """Create a results_dir containing one file in a subdirectory""" - tmpdir = str(tmpdir) - FLAGS(["test", f"--results_dir={tmpdir}"]) - - # Create a subdirectory to make the case more complex - dname = os.path.join(tmpdir, "some_dir") - os.mkdir(dname) - - fname = os.path.join(dname, "some_file.txt") - - # create a new file and open it for writing - with open(fname, "x") as f: - f.write("To write or not to write?") - f.close() - - return tmpdir - - -@pytest.yield_fixture -def populated_S3_bucket(): - bucket = FLAGS.S3_results_bucket - - rnd_str = random_string(5) - files = ["file_1.txt", "file_2.txt"] - - s3_keys = [] - - for fname in files: - key = "integration_test/populated_S3_bucket_fixture_" + f"{rnd_str}/{fname}" - s3_keys.append(key) - - client.put_object(Bucket=bucket, Key=key, Body=b"foobar") - - yield s3_keys - - # Clean up after test - client.delete_objects( - Bucket=bucket, Delete={"Objects": [{"Key": key} for key in s3_keys]} - ) diff --git a/benchmarks/ops/docker.py b/benchmarks/ops/docker.py deleted file mode 100644 index 84c827f49..000000000 --- a/benchmarks/ops/docker.py +++ /dev/null @@ -1,84 +0,0 @@ -import subprocess -from time import strftime - -from absl import app -from faker import Faker -from faker.providers import person - -from xain_fl.helpers import project - -fake = Faker() -fake.add_provider(person) - -root_dir = project.root() - - -def get_image_name(tag: str): - """Returns docker image name by joining repo with tag - - Args: - tag (str): docker image tag to be used - """ - ECR_REPO = "693828385217.dkr.ecr.eu-central-1.amazonaws.com/xain" - return f"{ECR_REPO}:{tag}" - - -def generate_unique_tag(): - """Return a unique string with utc time and human readable part - - Returns: - str - """ - - utc_time = strftime("%Y%m%dT%H%M") - # pylint: disable=no-member - fake_name = fake.name().lower().replace(" ", "_").replace(".", "") - - return f"{utc_time}_{fake_name}" - - -def build(should_push: bool = False): - """Build xain docker container and tag it uniquely - If image already exists a new tag will be added anyway - - Args: - tag (str): docker image tag to be used - """ - tag = generate_unique_tag() - image_name_unique = get_image_name(tag) - - command = ["docker", "build", ".", "-t", image_name_unique] - subprocess.run(command, cwd=root_dir).check_returncode() - - if should_push: - push(tag) - - return image_name_unique - - -def push(tag: str): - """Push xain docker container - - Args: - tag (str): docker image tag to be used - """ - # User to get the docker login command with the AWS SDK - get_login_command = ["aws", "ecr", "get-login", "--no-include-email"] - push_command = ["docker", "push", get_image_name(tag)] - - # Get docker login command and decode into utf-8. Afterwards split - # to pass it further to the next subprocess call - docker_login_command = ( - subprocess.check_output(get_login_command, cwd=root_dir) - .decode("utf-8") - .strip() - .split(" ") - ) - - subprocess.run(docker_login_command, cwd=root_dir).check_returncode() - subprocess.run(push_command, cwd=root_dir).check_returncode() - - -# For convenience allow calling module to build and push latest image -if __name__ == "__main__": - app.run(main=lambda _: build(should_push=True)) diff --git a/benchmarks/ops/ec2.py b/benchmarks/ops/ec2.py deleted file mode 100644 index cb786e6fe..000000000 --- a/benchmarks/ops/ec2.py +++ /dev/null @@ -1,46 +0,0 @@ -import re - - -def user_data(image: str, timeout: int, S3_results_bucket: str, flags: str): - """Generates EC2 instance user data script which is basically - a bash script which will be executed as soon as the machine is - up and running - - Args: - image (str): docker image as `repository:tag` - timeout (int): timeout in minutes - flags (str): Will be appended to docker run command e.g. for `--foo=bar --baz=boo` - it will result in `docker run IMAGE --foo=bar --baz=boo` - - Returns: - user_data (str): user_data script for EC2 instance returned as in ascii encoding - """ - data = [ - "#!/bin/bash", - "set -x", - # Set automatic shutdown after 5 hours - f"sudo shutdown -P {timeout}", - # Login into ECR. This only works because we assigned - # the right IAM instance profile to the EC2 instance - "$(aws ecr get-login --region eu-central-1 --no-include-email)", - # Pull docker job - f"docker pull {image}", - # Start docker job - "mkdir -p /opt/app/output", - "cd /opt/app/", - f"docker run \ - -e S3_RESULTS_BUCKET={S3_results_bucket} \ - -v $(pwd)/output:/opt/app/output \ - {image} python -m benchmarks.benchmark.exec {flags} >& $(pwd)/output/training.log", - # Cancel previous shutdown and shutdown 1m after the job finishes - # The machine is setup to terminate on shutdown - "shutdown -c", - "shutdown -P 1", - ] - - # Replace multiple whitespaces with single whitespaces to allow - # the use of line breaks in data to increase readability while - # keeping the final output also readable - data = [re.sub(r"\s+", " ", s) for s in data] - - return "\n".join(data) diff --git a/benchmarks/ops/results.py b/benchmarks/ops/results.py deleted file mode 100755 index 34a95eacb..000000000 --- a/benchmarks/ops/results.py +++ /dev/null @@ -1,91 +0,0 @@ -import os - -import boto3 -from absl import flags - -from benchmarks.helpers.storage import listdir_recursive -from xain_fl.logger import get_logger - -FLAGS = flags.FLAGS - -client = boto3.client("s3") - - -logger = get_logger(__name__) - - -def push(group_name: str, task_name: str, output_dir: str = None): - """Push everything in output directory to the S3_results_bucket on AWS S3 - - Args: - group_name (str) - task_name (str) - output_dir (str): If None FLAGS.output_dir will be used - """ - # If no output_dir was explicitly set use output_dir which was passed via absl flags - # and defaults to "git_root/output" and upload everything in it as results - if output_dir is None: - output_dir = FLAGS.output_dir - - bucket = FLAGS.S3_results_bucket - - ignored_files = [".gitkeep", ".DS_Store"] - files = listdir_recursive(output_dir) - - for fname in files: - if fname in ignored_files: - continue - - local_path = os.path.join(output_dir, fname) - key = os.path.join(group_name, task_name, fname) - - # pylint: disable=bare-except - try: - # Will throw an error if object does not exist - client.head_object(Bucket=bucket, Key=key) - logger.info("Key is already uploaded", key=key) - # TODO: fix this by using something similar to: - # https://stackoverflow.com/questions/33842944/check-if-a-key-exists-in-a-bucket-in-s3-using-boto3 - except: - logger.info( - "Uploading file to bucket", - local_path=local_path, - bucket=bucket, - key=key, - ) - client.upload_file(local_path, bucket, key) - - -def download(): - """Download all remote results which are locally not present from the S3_BUCKET on AWS S3""" - # Use results_dir which was passed via absl flags and defaults to - # "git_root/results" and upload everything in it as results - results_dir = FLAGS.results_dir - bucket = FLAGS.S3_results_bucket - - # Get list of all files which where uploaded to the bucket which contain - # the group_name => integration_test - all_objs = client.list_objects_v2(Bucket=bucket) - - if "Contents" not in all_objs: - logger.info("No results to download") - return - - actual_objs = [obj["Key"] for obj in all_objs["Contents"]] - - already_downloaded_files = listdir_recursive(results_dir) - - # enumerate local files recursively - for key in actual_objs: - if key not in already_downloaded_files: - fname = os.path.join(results_dir, key) - dname = os.path.dirname(fname) - - # Instead of checking just create with exist_ok - os.makedirs(dname, exist_ok=True) - - logger.info( - "Downloading file from bucket", filename=fname, bucket=bucket, key=key - ) - - client.download_file(Bucket=bucket, Key=key, Filename=fname) diff --git a/benchmarks/ops/results_test.py b/benchmarks/ops/results_test.py deleted file mode 100644 index 37f16b073..000000000 --- a/benchmarks/ops/results_test.py +++ /dev/null @@ -1,74 +0,0 @@ -import os -import random -import string - -import boto3 -import pytest -from absl import flags - -from . import results - -FLAGS = flags.FLAGS - - -client = boto3.client("s3") - - -@pytest.mark.slow -@pytest.mark.integration -def test_push_results(populated_output_dir): - # Prepare - bucket = FLAGS.S3_results_bucket - group_name = "integration_test" - task_name = "".join(random.sample(string.ascii_lowercase, 5)) - # List all files which where in output directory - expected_objs = [ - os.path.join(group_name, task_name, fname) - for fname in os.listdir(populated_output_dir) - ] - - # Execute - results.push(group_name=group_name, task_name=task_name) - - # Assert - # Get list of all files which where uploaded to the bucket which contain - # the group_name => integration_test - all_objs = client.list_objects_v2(Bucket=bucket) - actual_objs = [obj["Key"] for obj in all_objs["Contents"]] - - # Check if all files where uploaded - assert set(expected_objs).issubset(set(actual_objs)), "Could not upload all files" - - # Cleanup - response = client.delete_objects( - Bucket=bucket, Delete={"Objects": [{"Key": key} for key in expected_objs]} - ) - - assert ( - response["ResponseMetadata"]["HTTPStatusCode"] == 200 - ), "Cleaning up the bucket failed" - - -@pytest.mark.slow -@pytest.mark.integration -def test_download_results(populated_results_dir, populated_S3_bucket): - # Prepare - expected_files = populated_S3_bucket - - # Execute - results.download() - - actual_files = [] - - # Assert - for root, _, files in os.walk(populated_results_dir): - for filename in files: - local_path = os.path.join(root, filename) - # get relative path to results_dir - relative_path = os.path.relpath(local_path, populated_results_dir) - actual_files.append(relative_path) - - # As we might have files in our results directory which are not on S3 - # anymore we will only check if everything which is on S3 was actualy downloaded - assert len(actual_files) >= len(expected_files) - assert set(expected_files).issubset(set(actual_files)) diff --git a/benchmarks/ops/run.py b/benchmarks/ops/run.py deleted file mode 100644 index fc1614659..000000000 --- a/benchmarks/ops/run.py +++ /dev/null @@ -1,144 +0,0 @@ -import os -import subprocess -from typing import Dict - -import boto3 -from absl import flags - -from xain_fl.helpers import project -from xain_fl.logger import get_logger - -from .ec2 import user_data - -logger = get_logger(__name__) - - -FLAGS = flags.FLAGS -root_dir = project.root() - -# Note: -# We actually would like to use the m5.large up to m5.24xlarge -# but AWS is not easily willing to give us the increase without -# asking again and again and again for limit increases. -# Therefore we switches to using c4 which have higher default limits -cores: Dict[int, str] = { - 2: "c4.large", - 4: "c4.xlarge", - 8: "c4.2xlarge", - 16: "c4.4xlarge", - 32: "c4.8xlarge", -} - - -def docker(image: str, timeout: int = 300, instance_cores=2, **kwargs): - """Run train in docker while accepting an arbitrary - number of absl flags to be passed to the docker container - - Args: - image (str): docker image name - timeout (int): timeout in minutes - instance_cores (int): number of cpu cores to be used, if num is to high os.cpu_count() - will be used - **kwargs: Will be turned into "--{arg}={kwargs[arg]" format and - passed to docker container - """ - instance_cores = ( - instance_cores if instance_cores <= os.cpu_count() else os.cpu_count() - ) - - command = [ - "docker", - "run", - "-d", - f"--stop-timeout={timeout}", - f"--cpus={instance_cores}", - "-e", - "AWS_ACCESS_KEY_ID", - "-e", - "AWS_SECRET_ACCESS_KEY", - "-e", - f"S3_RESULTS_BUCKET={FLAGS.S3_results_bucket}", - image, - "python", - "-m", - "benchmarks.benchmark.exec", - ] - - for arg in kwargs: - if kwargs[arg] is None: - # Don't pass flags where arg has value None - continue - command.append(f"--{arg}={kwargs[arg]}") - - subprocess.run(command, cwd=root_dir) - - -def ec2(image: str, timeout: int = 300, instance_cores=2, **kwargs): - """Runs job on EC2 instead of a local machine - - Possible options for instance_type (CPU only) are: - - m5.large: 2 vCPU, 8 GB RAM - - m5.xlarge: 4 vCPU, 16 GB RAM - - m5.2xlarge: 8 vCPU, 32 GB RAM - - m5.4xlarge: 16 vCPU, 64 GB RAM - - m5.8xlarge: 32 vCPU, 128 GB RAM - - m5.12xlarge: 48 vCPU, 192 GB RAM - - m5.16xlarge: 64 vCPU, 256 GB RAM - - m5.24xlarge: 96 vCPU, 384 GB RAM - - Args: - image (str): docker image name - timeout (int): timeout in minutes - instance_cores (int): number of EC2 instance cpu cores - **kwargs: Will be turned into "--{arg}={kwargs[arg]" format and passed to docker container - """ - assert ( - instance_cores in cores - ), f"instance_cores {instance_cores} not in {cores.keys()}" - instance_type = cores[instance_cores] - - absl_flags = "" # Will be passed to docker run in EC2 instance - - for arg in kwargs: - if kwargs[arg] is None: - # Don't pass flags where arg has value None - continue - absl_flags += f"--{arg}={kwargs[arg]} " - - absl_flags = absl_flags.strip() - - instance_name = ( - f"{kwargs['group_name']}_{kwargs['task_name']}" - ) # Will be used to make the instance easier identifyable - - udata = user_data( - image=image, - timeout=timeout, - S3_results_bucket=FLAGS.S3_results_bucket, - flags=absl_flags, - ) - - client = boto3.client("ec2") - run_response = client.run_instances( - ImageId="ami-08806c999be9493f1", - MinCount=1, - MaxCount=1, - InstanceType=instance_type, - KeyName="xain-ec2-remote-training", - SubnetId="subnet-1bc3c466", - IamInstanceProfile={"Name": "XainEC2RemoteTraining"}, - SecurityGroupIds=["sg-01ff10b690dffbaf5", "sg-01207b671ffadadf5"], - InstanceInitiatedShutdownBehavior="terminate", - UserData=udata, - TagSpecifications=[ - { - "ResourceType": "instance", - "Tags": [{"Key": "Name", "Value": instance_name}], - } - ], - AdditionalInfo=absl_flags, # Helpful to identify instance in EC2 UI - ) - instance_id = run_response["Instances"][0]["InstanceId"] - logger.info( - "Started EC2 instance", instance_id=instance_id, instance_name=instance_name - ) diff --git a/benchmarks/train_remote.py b/benchmarks/train_remote.py deleted file mode 100644 index 716c29106..000000000 --- a/benchmarks/train_remote.py +++ /dev/null @@ -1,23 +0,0 @@ -"""Used as entry_point for console_script `train_remote` in `setup.py`. - -Expects the following flags: - - - benchmark_name - -Example: - train_remote --benchmark_name=flul-fashion-mnist-100p-iid-balanced --group_name=GROUP_NAME -""" -from absl import app, flags - -from benchmarks.benchmark import benchmark - -FLAGS = flags.FLAGS - - -def main(): - flags.mark_flag_as_required("benchmark_name") - app.run(main=benchmark.main) - - -if __name__ == "__main__": - main() diff --git a/conftest.py b/conftest.py deleted file mode 100644 index a350b319d..000000000 --- a/conftest.py +++ /dev/null @@ -1,26 +0,0 @@ -""" -This conftest should only contain options for pytest -itself but nothing like fixtures etc. -""" -import pytest - - -def pytest_addoption(parser): - parser.addoption( - "--runslow", action="store_true", default=False, help="run slow tests" - ) - - -def pytest_configure(config): - config.addinivalue_line("markers", "slow: mark test as slow to run") - - -def pytest_collection_modifyitems(config, items): - skip_slow = pytest.mark.skip(reason="need --runslow option to run") - - for item in items: - if not any(item.iter_markers()): - item.add_marker("unmarked") - - if not config.getoption("--runslow") and "slow" in item.keywords: - item.add_marker(skip_slow) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml new file mode 100644 index 000000000..c17628314 --- /dev/null +++ b/docker-compose-dev.yml @@ -0,0 +1,74 @@ +version: "3.7" +services: + + minio-dev: + image: minio/minio # Stable minio + volumes: + - minio-data:/data + networks: + - xain-fl-dev + environment: + MINIO_ACCESS_KEY: minio + MINIO_SECRET_KEY: minio123 + command: + server /data + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] + interval: 30s + timeout: 20s + retries: 3 + ports: + - "9000:9000" + + initial-buckets: + image: minio/mc + depends_on: + - minio-dev + environment: + MINIO_ACCESS_KEY: minio + MINIO_SECRET_KEY: minio123 + networks: + - xain-fl-dev + entrypoint: > + /bin/sh -c " + echo Waiting for minio service to start...; + while ! nc -z minio-dev 9000; + do + sleep 5; + done; + echo Connected!; + mc config host add dev-minio http://minio-dev:9000 $${MINIO_ACCESS_KEY} $${MINIO_SECRET_KEY}; + /usr/bin/mc mb -p dev-minio/xain-fl-temporary-weights; + /usr/bin/mc mb -p dev-minio/xain-fl-aggregated-weights; + /usr/bin/mc policy set upload dev-minio/xain-fl-temporary-weights; + /usr/bin/mc policy set download dev-minio/xain-fl-temporary-weights; + /usr/bin/mc policy set upload dev-minio/xain-fl-aggregated-weights; + /usr/bin/mc policy set download dev-minio/xain-fl-aggregated-weights; + /usr/bin/mc admin trace -v -e dev-minio; + " + + xain-fl-dev: + environment: + MINIO_ACCESS_KEY: minio + MINIO_SECRET_KEY: minio123 + build: + context: . + dockerfile: Dockerfile.dev + command: sh -c "coordinator -f test_array.npy --storage-endpoint http://minio-dev:9000 --storage-key-id $${MINIO_ACCESS_KEY} --storage-secret-access-key $${MINIO_SECRET_KEY} --storage-bucket xain-fl-aggregated-weights" + volumes: + # don't use the local egg-info, if one exists + - /app/xain_fl.egg-info + - ./xain_fl:/app/xain_fl + - ${PWD}/setup.py:/app/setup.py + - ${PWD}/README.md:/app/README.md + - ${PWD}/test_array.npy:/app/test_array.npy + networks: + - xain-fl-dev + ports: + - "50051:50051" + +volumes: + minio-data: + +networks: + xain-fl-dev: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..d5cb8120f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +version: "3.7" +services: + + minio: + image: minio/minio # Stable minio + volumes: + - minio-data:/data + networks: + - xain-fl + environment: + MINIO_ACCESS_KEY: minio + MINIO_SECRET_KEY: minio123 + command: server /data + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] + interval: 30s + timeout: 20s + retries: 3 + expose: + - "9000" + + xain-fl: + build: + context: . + dockerfile: Dockerfile + networks: + - xain-fl + ports: + - "50051:50051" + +volumes: + minio-data: + +networks: + xain-fl: diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100755 index 000000000..a38854506 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env sh + +set -o errexit +set -o pipefail +set -o nounset +# set -o xtrace + +if [ $# -eq 0 ]; then + exec coordinator -f test_array.npy --host ${HOST} --port ${PORT} +else + exec coordinator "$@" +fi diff --git a/docs/Makefile b/docs/Makefile index e8e7ce2eb..66bf9efbb 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -23,5 +23,6 @@ show: open _build/html/index.html docs: + rm -rf _code_reference_* make clean make html diff --git a/docs/README.md b/docs/README.md new file mode 120000 index 000000000..32d46ee88 --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/docs/_static/sequence2.png b/docs/_static/sequence2.png index 60b968822..ccc981cef 100644 Binary files a/docs/_static/sequence2.png and b/docs/_static/sequence2.png differ diff --git a/docs/conf.py b/docs/conf.py index 3372eff44..b54339c68 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -9,10 +9,12 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -# + import os import sys +from sphinx.ext import apidoc + sys.path.insert(0, os.path.abspath("..")) @@ -41,12 +43,14 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - "recommonmark", + "m2r", "sphinx.ext.napoleon", "sphinx.ext.autodoc", "sphinx.ext.intersphinx", "sphinx.ext.mathjax", "sphinxcontrib.mermaid", + "sphinx.ext.todo", + "sphinx_autodoc_typehints", ] source_suffix = {".rst": "restructuredtext", ".md": "markdown"} @@ -64,7 +68,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -# + html_theme = "alabaster" # https://alabaster.readthedocs.io/en/latest/customization.html @@ -87,13 +91,12 @@ intersphinx_mapping = { "python": ("https://docs.python.org/3", None), "numpy": ("https://docs.scipy.org/doc/numpy/", None), + "grpc": ("https://grpc.github.io/grpc/python/", None), } def run_apidoc(_): - from sphinx.ext import apidoc - - exclude = ["../xain_fl/**_test.py"] + exclude = [] argv = [ "--doc-project", @@ -111,23 +114,25 @@ def run_apidoc(_): apidoc.main(argv) - exclude_benchmark = ["../benchmarks/**_test.py"] - - argv_benchmark = [ - "--doc-project", - "Code Reference Benchmarks", - "-M", - "-f", - "-d", - "3", - "--tocfile", - "index", - "-o", - "./_code_reference_benchmarks/", - "../benchmarks/", - ] + exclude_benchmark - - apidoc.main(argv_benchmark) + # TODO: (XP-350): Decide about benchmark documentation after moving benchmarks to + # separate repository + # exclude_benchmark = ["../benchmarks/**_test.py"] + + # argv_benchmark = [ + # "--doc-project", + # "Code Reference Benchmarks", + # "-M", + # "-f", + # "-d", + # "3", + # "--tocfile", + # "index", + # "-o", + # "./_code_reference_benchmarks/", + # "../benchmarks/", + # ] + exclude_benchmark + + # apidoc.main(argv_benchmark) def setup(app): diff --git a/docs/index.rst b/docs/index.rst index c7786de79..85233293f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,51 +3,12 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -XAIN: Federated Learning -======================== - -.. image:: https://img.shields.io/circleci/build/github/xainag/xain-fl/master?style=flat-square - :target: https://circleci.com/gh/xainag/xain-fl/tree/master - -.. image:: https://img.shields.io/pypi/v/xain-fl?style=flat-square - :target: https://pypi.org/project/xain-fl/ - -.. image:: https://img.shields.io/github/license/xainag/xain-fl?style=flat-square - :target: https://github.com/xainag/xain-fl/blob/master/LICENSE - -.. image:: https://readthedocs.org/projects/xain/badge/?version=latest&style=flat-square - :target: https://docs.xain.io/en/latest/?badge=latest - :alt: Documentation Status - -**XAIN FL** is an open source framework for federated learning. - - -.. image:: _static/platform-intro.svg - :class: intro-image - -The XAIN FL project is building a GDPR-compliance layer for machine learning. The -approach relies on federated machine learning (FedML) as enabling technology -that removes compliance-related adoption barriers of AI applications used in -production. - - -User Guide ----------- +.. mdinclude:: README.md .. toctree:: :maxdepth: 2 - - intro - install - quick + :hidden: + + README.md network_architecture - - -API Documentation ------------------ - -.. toctree:: - :maxdepth: 1 - - _code_reference_xain_fl/index - _code_reference_benchmarks/index + _code_reference_xain_fl/index diff --git a/docs/install.md b/docs/install.md deleted file mode 100644 index d218cbd8f..000000000 --- a/docs/install.md +++ /dev/null @@ -1,59 +0,0 @@ -# Installation of XAIN - -XAIN FL requires [Python 3.6+](https://python.org/). - -## Install from PyPi package - -To install the `xain-fl` package just run: - -```shell -$ python -m pip install xain-fl -``` - -XAIN FL can also be installed with GPU support through the `gpu` extra feature. To -install the `xain-fl` package with support for GPUs just run: - -```shell -$ python -m pip install xain-fl[gpu] -``` - -## Install from source - -For development we require some extra system dependencies: - -- [clang-format 8+](https://clang.llvm.org/docs/ClangFormat.html) - - Linux: `sudo apt install clang-format` - - macOS: `brew install clang-format` - -### Clone Repository & Install XAIN FL in development mode - -To clone this repository and to install the XAIN FL project, please execute the following commands: - -```shell -$ git clone https://github.com/xainag/xain-fl.git -$ cd xain-fl - -$ python -m pip install -e .[dev] -``` - -### Verify Installation - -You can verify the installation by running the tests - -```shell -$ pytest -``` - -### Building the Documentation - -The project documentation resides under `docs/`. To build the documentation -run: - -```shell -$ cd docs/ -$ make docs -``` - -The generated documentation will be under `docs/_build/html/`. You can open the -root of the documentation by opening `docs/_build/html/index.html` on your -favorite browser. diff --git a/docs/intro.md b/docs/intro.md deleted file mode 100644 index ca4b08aa1..000000000 --- a/docs/intro.md +++ /dev/null @@ -1,33 +0,0 @@ -# Introduction - -The XAIN project is building a GDPR-compliance layer for machine learning. The -approach relies on federated machine learning (FedML) as enabling technology -that removes compliance-related adoption barriers of AI applications used in -production. - -At present, the source code in this project demonstrates the effectiveness of -our FedML implementation on well known benchmarks using a realistic deep -learning model structure. We will soon add a link to details on those -experiments. - -In the future, we will open source here a first minimal viable product for this -layer. And we will add links to articles and papers that describe our -approaches to networking, architecture, and privacy-preserving technology. We -will also provide references to legal opinions about how and why our compliance -layer for machine learning meets the demands of GDPR. - -POLITE NOTE: We want to point out that running the benchmarks as described -below is consuming considerable resources. XAIN cannot take any -responsibilities for costs that arise for you when you execute these demanding -machine-learning benchmarks. - -## Related Papers and Articles - -- [An introduction to XAIN’s GDPR-compliance Layer for Machine - Learning](https://medium.com/xain/an-introduction-to-xains-gdpr-compliance-layer-for-machine-learning-f7c321b31b06) -- [Communication-Efficient Learning of Deep Networks from Decentralized - Data](https://arxiv.org/abs/1602.05629) -- [Analyzing Federated Learning through an Adversarial - Lens](https://arxiv.org/abs/1811.12470) -- [Towards Federated Learning at Scale: System - Design](https://arxiv.org/abs/1902.01046) diff --git a/docs/network_architecture.rst b/docs/network_architecture.rst index 89c2b05a6..9384a88eb 100644 --- a/docs/network_architecture.rst +++ b/docs/network_architecture.rst @@ -89,18 +89,18 @@ A **Rendezvous** method that allows *Participants* to register with a about the *Participant* in order to keep track of what the *Participant* is doing. -A **StartTraining** method that allows *Participants* to get the current global +A **StartTrainingRound** method that allows *Participants* to get the current global model as well as signaling their intent to participate in a given round. -An **EndTraining** method that allows *Participants* to submit their updated +An **EndTrainingRound** method that allows *Participants* to submit their updated models after they finished their training task. In order to remain agnostic to the machine learning framework *Participants* and *Coordinator* exchange models in the form of numpy arrays. How models are converted from a particular machine learning framework model into numpy arrays -are outside the scope of this document. We do provide the `Numproto -`_ python package that performs +are outside the scope of this document. We do provide the `xain-proto +`_ python package that performs serialization and deserialization of numpy arrays into and from protobuf. @@ -192,7 +192,7 @@ either: # rest of the method logic -*Periodically check if a the rcp call is active:* +*Periodically check if the rpc call is active:* .. code-block:: python @@ -218,7 +218,7 @@ it's participant list. .. code-block:: python - def Hearthbeat(self, request, context): + def Heartbeat(self, request, context): self.participants[context.peer()].expires = time.now() + KEEPALIVE_TIME return PingResponse() @@ -276,12 +276,12 @@ having finished training. Once all :math:`N` have finished training, :math:`C` collects together all the trained data and aggregates them generating a new global model. It either -increments the round and repeats, or if there are more rounds to go, it +increments the round and repeats, or if there are no more rounds to go, it transitions to the **FINISHED** state signaling the participants to disconnect. So far we've only discussed the lifecycle of a *successful* interaction with all participants i.e. without faults, dropouts, etc. The true picture (taking -into account of `fault tolerance `_) +into account `fault tolerance `_) will be more complicated than above but this is still useful to give the basic structure. @@ -300,33 +300,31 @@ single-machine "prototype" :code:`fl/Coordinator`: .. code-block:: python # note: code updated since time of writing but idea remains the same - def train_local(p, theta, epochs, epoch_base): - theta_update, history = p.train_round(theta, epochs, epoch_base) + def train_local(p, weights, epochs, epoch_base): + weights_update, history = p.train_round(weights, epochs, epoch_base) metrics = p.metrics() - return theta_update, history, metrics + return weights_update, history, metrics To do its training, :math:`P` will invoke its own :code:`train_round` function. For this, it requires the following data (annotated with their types) from :math:`C` -* :code:`theta: KerasWeights` where :code:`KerasWeights = List[ndarray]` +* :code:`weights: List[ndarray]` * :code:`epochs: int` * :code:`epoch_base: int` In return :math:`P` sends back a pair of data -* :code:`theta_update: Tuple[KerasWeights, int]` -* :code:`history: KerasHistory` where :code:`KerasHistory = Dict[str, List[float]]` +* :code:`weights_update: Tuple[List[ndarray], int]` +* :code:`history: Dict[str, List[float]]` After a :code:`train_round`, :math:`C` also needs from :math:`P` -a :code:`metrics` of type - -* :code:`Metrics = Tuple[int, VolumeByClass]` where :code:`VolumeByClass = List[int]` +a :code:`metrics` of type :code:`Dict[str, ndarray]`. .. note:: It is worth bearing in mind that since we are working with gRPC, all service - calls must be initiated by the client (as discussed above) i.e. :math:`P`. This + calls must be initiated by the client (as discussed above), i.e. :math:`P`. This is completely unlike the code excerpt above, where it is naturally :math:`C` that calls :math:`P`. @@ -342,52 +340,65 @@ exchanging training data. The Coordinator exposes two service methods .. code-block:: proto - rpc StartTraining(StartTrainingRequest) returns (StartTrainingReply) {} - rpc EndTraining(EndTrainingRequest) returns (EndTrainingReply) {} + rpc StartTrainingRound(StartTrainingRoundRequest) returns (StartTrainingRoundResponse) {} + rpc EndTrainingRound(EndTrainingRoundRequest) returns (EndTrainingRoundResponse) {} -where the request and reply data are given as the following protobuf messages: +where the request and response data are given as the following protobuf messages: .. code-block:: proto - message StartTrainingRequest {} + message StartTrainingRoundRequest {} - message StartTrainingReply { - repeated numproto.protobuf.NDArray theta = 1; + message StartTrainingRoundResponse { + repeated xain_proto.numproto.NDArray weights = 1; int32 epochs = 2; int32 epoch_base = 3; } - message EndTrainingRequest { - ThetaUpdate theta_update = 1; - map history = 2; - Metrics metrics = 3; /* also bundled here */ + message EndTrainingRoundRequest { + repeated xain_proto.numproto.NDArray weights = 1; + int32 number_samples = 2; + map metrics = 3; } - /* message defns for ThetaUpdate, HistoryValue, Metrics omitted */ - - message EndTrainingReply {} + message EndTrainingRoundResponse {} Note that while most of the Python data types to be exchanged can be "protobuf-erized" (and back), :code:`ndarray` requires more work. Fortunately we -have the `numproto `_ project to help with -this conversion. +have the +`xain_proto/numproto `_ +project to help with this conversion. Training Round Communication ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The communication is -summarised in the following sequence diagram. +The communication is summarised in the following sequence diagram. In a training round, :math:`C` is in the state :code:`ROUND`. The selected participant :math:`P` is in :code:`TRAINING` state. The first message is by :math:`P` essentially kicks off the exchange. :math:`C` responds with the global -model :math:`\theta` (and other data as specified in -:code:`StartTrainingReply`). Then :math:`P` carries out the training locally. -When complete, it sends the updated model :math:`\theta'` (and other metadata) +model :math:`\weights` (and other data as specified in +:code:`StartTrainingRoundResponse`). Then :math:`P` carries out the training locally. +When complete, it sends the updated model :math:`\weights'` (and other metadata) back. :math:`C` responds with an acknowledgement. .. image:: _static/sequence2.png +.. + this comment is just here to keep the original markdown code of the above sequence diagram! + ```sequence + participant Coord. as C + participant Part. as P + Note left of C: ROUND + P->C: StartTrainingRound() + Note right of P: TRAINING + C->P: weights, ... + Note right of P: (local training) + P->C: EndTrainingRound(weights_update, ...) + C->P: + Note right of P: POST-TRAINING + ``` + **Participant Notification via Extended Heartbeat** In the above, how did :math:`P` detect the state change in :math:`C` to @@ -427,8 +438,8 @@ After a successful rendezvous, :math:`P` is in **Wait for Selection**. :math:`P` this state as long as it keeps receiving :code:`STANDBY` heartbeats. At some round :math:`i`, :math:`C` may select :math:`P` for the round by responding with a :code:`ROUND` :math:`i` heartbeat. At this point, :math:`P` moves to **Training** where the above sequence of -training messages (:code:`StartTraining` :math:`\rightarrow \theta \rightarrow \theta' -\rightarrow` :code:`EndTraining`) occur. Having received the :code:`EndTraining` reply from +training messages (:code:`StartTrainingRound` :math:`\rightarrow \weights \rightarrow \weights' +\rightarrow` :code:`EndTrainingRound`) occur. Having received the :code:`EndTrainingRound` response from :math:`C`, :math:`P` makes an "internal" transition to **Post-training** where it waits until the start of the next round. If it has been selected again, it will observe :code:`ROUND` :math:`i+1`. If not, it observes :code:`STANDBY`. Alternatively, if round diff --git a/docs/quick.md b/docs/quick.md deleted file mode 100644 index 2490796d9..000000000 --- a/docs/quick.md +++ /dev/null @@ -1,137 +0,0 @@ -# Quickstart - -## Training - -To execute a training session locally: - -```shell -$ python -m benchmarks.benchmark.exec \ - --group_name=abc \ - --task_name=def \ - --dataset=fashion-mnist-100p-iid-balanced \ - --model=blog_cnn \ - --R=2 \ - --E=2 \ - --C=0.02 \ - --B=64 \ - --nopush_results -``` - -## Benchmark Suites (using AWS EC2) - -Here we describe how to configure and run an AWS service. Please bear in mind -that you are responsible for any costs that may arise when using these external -services. - -### Configuration - -In `~/.aws`, place two config files: `config` and `credentials`. Then execute -the command: - -```shell -export AWS_PROFILE=xain-xain -``` - -### Running a benchmark suite - -```shell -$ python -m benchmarks.benchmark --benchmark_name=BENCHMARK_NAME -``` - -You can see valid benchmark names by using - -```shell -$ python -m benchmarks.benchmark --helpfull -``` - -### Connect to running instances - -Start a benchmark suite - -Then: - -1. List all running EC2 instances: - -```shell -$ AWS_PROFILE=xain-xain aws ec2 describe-instances --filters Name=instance-state-code,Values=16 | jq '.Reservations[].Instances[] | "\(.Tags[].Value), \(.PublicIpAddress)"' -InstanceName1, "35.158.158.119" -OtherInstanceName2, "18.185.67.166" -``` - -2. Connect to one of the running instances using ssh: - -```shell -$ ssh -i ~/.ssh/xain-ec2-remote-training.pem ubuntu@18.185.67.166 -``` - -3. Follow the logs of the container to see how things are running: - -```shell -$ docker logs -f $(docker ps -q) -``` - -## Plotting - -To plot final task accuracies in a group of tasks use - -```shell -$ pull_results -$ aggregate --group_name GROUP_NAME -``` - -### Removing obsolete plots - -To remove a **single** benchmark result from S3: - -```shell -aws s3 rm --recursive s3://xain-results/[group-name] -``` - -To remove **all** benchmark results from S3: - -```shell -aws s3 rm --recursive s3://xain-results -``` - -## Ops - -Package encapsulates most OPS related tasks. - -### Local task - -Run a task locally - -```python -from xain_fl.ops import docker, run - -image_name = docker.build(should_push=True) -run.docker(image_name=image_name, benchmark_name="fashion-mnist-100p-iid-balanced") -``` - -### Remote task - -Run a task on EC2 - -```python -from xain_fl.ops import docker, run - -image_name = docker.build(should_push=True) -run.ec2( - image_name=image_name, - timeout=20, - benchmark_name="fashion-mnist-100p-iid-balanced", -) -``` - -## Datasets - - -This modules makes various public datasets available in federated dataset form. - -You can find all public methods of the package in its `api` module. - -**Example:** - -```python -from xain_fl.datasets.api import cifar10_random_splits_10_load_split -``` diff --git a/examples/tensorflow_hello_world/helloworld.py b/examples/tensorflow_hello_world/helloworld.py deleted file mode 100644 index 7884f3290..000000000 --- a/examples/tensorflow_hello_world/helloworld.py +++ /dev/null @@ -1,287 +0,0 @@ -import math -from typing import Callable, List - -import tensorflow as tf -from absl import app, flags -from tensorflow.keras.layers import Conv2D, Dense, Flatten, Input, MaxPool2D - -from xain_fl.datasets import load_splits -from xain_fl.fl.coordinator import Coordinator, RandomController -from xain_fl.fl.coordinator.aggregate import FederatedAveragingAgg -from xain_fl.fl.participant import ModelProvider, Participant -from xain_fl.types import Partition - -# Defining the 'task_name' flag here, to be used by the absl-py app. -FLAGS = flags.FLAGS -flags.DEFINE_string("task_name", None, "") - - -DATASET_NAME = "fashion-mnist-100p-iid-balanced" -"""Specifying a dataset name for this example. - -We will use a partitioned version of the Fashion MNIST dataset. -Please see here: https://xainag.github.io/xain-fl/ - -100p means that the dataset is split into 100 partitions, which are IID -Each partition represents the dataset a single client stores locally. -""" - -NUM_CLASSES = 10 -INPUT_SHAPE = (28, 28, 1) -"""Standard attributes of the Fashion MNIST dataset. -""" - -R = 2 -"""int: Number of global rounds the model is going to be trained for. -""" - -E = 2 -"""int: Number of local epochs. - -Each Participant in a round will train the model with its local data for E epochs. -""" - -C = 0.02 -"""float: Fraction of total clients that participate in a training round. -""" - -B = 10 -"""int: Local batch size for a client update. -""" - - -def main(_): - """Main function that runs in the script. - - This function fetches the data split into training partitions, validation and test - dataset. A Keras model is then declared and compiled, potential Participants are - initiated, as well as the Coordinator. We then call fit and evaluate on the - Coordinator and print some basic stats as well as final performance metrics. - """ - - # Fetching the data. - # xy_train_partitions: Each partition is the local training dataset of a single client. - # xy_validation: Contains the global validation data (shared by all participants). - # xy_test: Contains the global test data (shared by all participants). - xy_train_partitions, xy_validation, xy_test = load_splits(DATASET_NAME) - - # Declaring model architecture and compiling Keras model. - model_fn = create_and_compile_model - - # Passing model and learning rate functions to ModelProvider. - model_provider = ModelProvider(model_fn=model_fn, lr_fn_fn=learning_rate_fn) - - # Initiating the Participant for each client. - # At this stage they are not yet selected for training. - potential_participants = init_participants( - xy_train_partitions=xy_train_partitions, - model_provider=model_provider, - xy_validation=xy_validation, - ) - - # Initiating the centralized Coordinator of the training. - coordinator = init_coordinator( - participants=potential_participants, - model_provider=model_provider, - xy_validation=xy_validation, - ) - - # Printing some basic statistics. - print_dataset_stats(xy_train_partitions, xy_validation, xy_test) - - # Calling fit on the coordinator starts the training. - # It prints validation metrics after R rounds of federated learning are completed. - validation_metrics, _, _, _ = coordinator.fit(num_rounds=R) - print_validation_metrics(validation_metrics) - - # Evaluating the model with the test set. - loss, accuracy = coordinator.evaluate(xy_test) - - # Printing final test loss and accuracy. - print(f"---\nTest completed!\nLoss: {loss} | Test accuracy: {accuracy}") - - -def learning_rate_fn( - epoch_base: int, lr_initial: float = 0.002, k: float = 0.01 -) -> Callable: - """Specifies the learning rate function, in this case with exponential decay. - - Args: - epoch_base: Base epoch value. - lr_initial: Initial learning rate value. - k: Exponential decay constant. - - Returns: - Decayed learning rate based on epoch_optimizer. - """ - - def exp_decay(epoch_optimizer: int) -> float: - epoch = epoch_base + epoch_optimizer - return lr_initial * math.exp(-k * epoch) - - return exp_decay - - -def create_and_compile_model(epoch_base: int = 0) -> Callable[[], tf.keras.Model]: - """Contains the model architecture and compiles it with Keras API. - - Args: - epoch_base: Base epoch value. - - Returns: - A compiled tf.keras.Model instance, with exponential learning rate decay. - """ - - def add_convolution(filters, kernel_inizializer): - convolution = Conv2D( - filters, - kernel_size=(5, 5), - strides=(1, 1), - kernel_initializer=kernel_inizializer, - padding="same", - activation="relu", - ) - return convolution - - ki = tf.keras.initializers.glorot_uniform(seed=42) - - inputs = Input(shape=INPUT_SHAPE) - x = add_convolution(filters=32, kernel_inizializer=ki)(inputs) - x = MaxPool2D(pool_size=(2, 2), strides=(2, 2))(x) - x = add_convolution(filters=64, kernel_inizializer=ki)(x) - x = MaxPool2D(pool_size=(2, 2), strides=(2, 2))(x) - x = Flatten()(x) - x = Dense(512, kernel_initializer=ki, activation="relu")(x) - outputs = Dense(NUM_CLASSES, kernel_initializer=ki, activation="softmax")(x) - - model = tf.keras.Model(inputs=inputs, outputs=outputs) - - lr_fn = learning_rate_fn(epoch_base=epoch_base) - optimizer = tf.keras.optimizers.Adam(lr=lr_fn(0)) - - model.compile( - loss=tf.keras.losses.categorical_crossentropy, - optimizer=optimizer, - metrics=["accuracy"], - ) - return model - - -def init_participants( - xy_train_partitions: List[Partition], - model_provider: ModelProvider, - xy_validation: Partition, -) -> List[Participant]: - """Initiates potential Participants. - - Iterate through each partition (a client's training data) and - initiates a Participant instance. - - Args: - xy_train_partitions: Partitioned training data. - model_provider: ModelProvider instance holding model and - learning rate functions. - xy_validation: Validation dataset. - - Returns: - A list of initiated Participant instances, one per client. - """ - - potential_participants = [] - for client_id, xy_train in enumerate(xy_train_partitions): - participant = Participant( - cid=client_id, - model_provider=model_provider, - xy_train=xy_train, - xy_val=xy_validation, - num_classes=NUM_CLASSES, - batch_size=B, - ) - potential_participants.append(participant) - return potential_participants - - -def init_coordinator( - participants: List[Participant], - model_provider: ModelProvider, - xy_validation: Partition, -) -> Coordinator: - """Initiates the Coordinator. - - The controller will select the indices of the clients participating in the training. - It is initialized with all the indices of the clients available. - - Federated Averaging is a common aggregation method. - See here for more details: https://arxiv.org/pdf/1602.05629.pdf - - The Coordinator will coordinate the training. It will: - - Select a C fraction of potential participants. - - Send training jobs to each selected Participant, - who will train its own local data for E local epochs. - - Args: - participants: List of initiated Participant instances, one per client. - model_provider: ModelProvider instance holding model and learning rate functions. - xy_validation: Validation dataset. - - Returns: - Initiated Coordinator instance. - """ - participant_ids = [str(participant.cid) for participant in participants] - controller = RandomController(participant_ids, fraction_of_participants=C) - - aggregator = FederatedAveragingAgg() - - coordinator = Coordinator( - controller=controller, - model_provider=model_provider, - participants=participants, - C=C, - E=E, - xy_val=xy_validation, - aggregator=aggregator, - ) - return coordinator - - -def print_dataset_stats( - xy_train_partitions: List[Partition], xy_validation: Partition, xy_test: Partition -): - """Prints some preliminary stats to the terminal. - - Args: - xy_train_partitions: Partitioned training data. - xy_validation: Validation dataset. - xy_test: Test dataset. - """ - - print(f"\nthere are {len(xy_train_partitions)} client/potential partitions") - images_first_client, labels_first_client = xy_train_partitions[0] - n_images, height, width = images_first_client.shape - print(f"the first client has {n_images} images, of {width}x{height} size") - print(f"there are {len(labels_first_client)} labels, one label per image") - - validation_images, _ = xy_validation - print(f"---\nthe validation set is made of {len(validation_images)} images") - - test_images, _ = xy_test - print(f"the test set is made of {len(test_images)} images\n---") - - -def print_validation_metrics(validation_metrics: dict): - """Prints the validation metrics to the terminal. - - Args: - validation_metrics: Dictionary containing loss and accuracy per each round. - """ - - for round_id in range(R): - print( - f"validation round: {round_id + 1}: " - f"loss: {validation_metrics['val_loss'][round_id]}, " - f"accuracy: {validation_metrics['val_acc'][round_id]}" - ) - - -if __name__ == "__main__": - app.run(main=main) diff --git a/mypy.ini b/mypy.ini index 19d1da725..23d20f36d 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,5 +1,5 @@ [mypy] ignore_missing_imports = True -[mypy-xain_fl.cproto.participant] +[mypy-xain_fl.coordinator.legacy_participant] ignore_errors = True diff --git a/output/.gitkeep b/output/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/protobuf/xain_fl/cproto/coordinator.proto b/protobuf/xain_fl/cproto/coordinator.proto deleted file mode 100644 index 41088c094..000000000 --- a/protobuf/xain_fl/cproto/coordinator.proto +++ /dev/null @@ -1,66 +0,0 @@ -syntax = "proto3"; - -import "numproto/protobuf/ndarray.proto"; - -package xain.protobuf.coordinator; - -service Coordinator { - rpc Rendezvous(RendezvousRequest) returns (RendezvousReply) {} - rpc Heartbeat(HeartbeatRequest) returns (HeartbeatReply) {} - rpc StartTraining(StartTrainingRequest) returns (StartTrainingReply) {} - rpc EndTraining(EndTrainingRequest) returns (EndTrainingReply) {} -} - -enum RendezvousResponse { - ACCEPT = 0; - LATER = 1; -} - -message RendezvousRequest {} - -message RendezvousReply { - RendezvousResponse response = 1; -} - -enum State { - // Set by the coordinator to signal there is no round in progress - STANDBY = 0; - // Set by the coordinator to signal what round is currently in progress - ROUND = 1; - // Set by the coordinator to signal that the session is over - FINISHED = 2; - // Set by the participant to signal that it is ready for work - READY = 3; - // Set by the participant to signal that it is currently training - TRAINING = 4; -} - -message HeartbeatRequest { - State state = 1; - int32 round = 2; -} - -message HeartbeatReply { - State state = 1; - int32 round = 2; -} - -message StartTrainingRequest {} - -message StartTrainingReply { - repeated numproto.protobuf.NDArray weights = 1; - int32 epochs = 2; - int32 epoch_base = 3; -} - -message EndTrainingRequest { - repeated numproto.protobuf.NDArray weights = 1; - int32 number_samples = 2; - map metrics = 3; - - message Metrics { - repeated numproto.protobuf.NDArray metrics = 1; - } -} - -message EndTrainingReply {} diff --git a/protobuf/xain_fl/cproto/hellonumproto.proto b/protobuf/xain_fl/cproto/hellonumproto.proto deleted file mode 100644 index ad096a8c4..000000000 --- a/protobuf/xain_fl/cproto/hellonumproto.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; - -import "numproto/protobuf/ndarray.proto"; - -package hellonumproto; - -service NumProtoServer { - rpc SayHelloNumProto(NumProtoRequest) returns (NumProtoReply) {} -} - -message NumProtoRequest { - numproto.protobuf.NDArray arr = 1; -} - -message NumProtoReply { - numproto.protobuf.NDArray arr = 1; -} diff --git a/pylint.ini b/pylint.ini deleted file mode 100644 index ca59b4d42..000000000 --- a/pylint.ini +++ /dev/null @@ -1,21 +0,0 @@ -[MESSAGES CONTROL] - -# C0103: Invalid constant name (invalid-name) -# C0111: Missing module docstring (missing-docstring) -# C0111: Missing function docstring (missing-docstring) -# C0330: Wrong hanging indentation before block -# E0401: import-error -# R0801: duplicate-code -# R0913: too-many-arguments -# R0914: too-many-locals -disable=C0103,C0111,C0330,C0412,E0401,W0511,R0903,R0801,R0913,R0914 - -[TYPECHECK] -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -# See: https://github.com/pytorch/pytorch/issues/701#issuecomment-378048755 -generated-members=numpy.*,torch.* - -# ignore auto generated grpc files -ignore-patterns=.*_pb2.* diff --git a/pytest.ini b/pytest.ini index f92f55666..d739e1b6d 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,5 +1,5 @@ [pytest] -testpaths = benchmarks xain_fl +testpaths = tests markers = unmarked: every test without a marker will automatically have this marker assigned. You could senselessly add it manually integration: mark a integration test diff --git a/scripts/create_git_hooks.sh b/scripts/create_git_hooks.sh index bc87ce78c..b0963732c 100755 --- a/scripts/create_git_hooks.sh +++ b/scripts/create_git_hooks.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Exit immediately if a command exits with a non-zero status. set -e @@ -11,10 +11,10 @@ cd $DIR/../ if [ -f "$PRE_PUSH_HOOK" ]; then echo "$PRE_PUSH_HOOK exist" -else +else echo "#!/bin/sh" >> $PRE_PUSH_HOOK echo "./scripts/test.sh" >> $PRE_PUSH_HOOK - + chmod +x $PRE_PUSH_HOOK echo "$PRE_PUSH_HOOK created" diff --git a/scripts/format.sh b/scripts/format.sh index 1adcbc4e0..aa61c84f7 100755 --- a/scripts/format.sh +++ b/scripts/format.sh @@ -1,11 +1,10 @@ -#!/bin/bash +#!/usr/bin/env bash -# Exit immediately if a command exits with a non-zero status. +# Exit immediately if a command exits with a non-zero status set -e - DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - cd $DIR/../ -isort --indent=4 -rc setup.py conftest.py benchmarks examples xain_fl docs/conf.py -black --exclude "xain_fl/cproto/.*_pb2.*" setup.py conftest.py benchmarks examples xain_fl docs/conf.py +set -x +isort --indent=4 -rc setup.py xain_fl tests +black --line-length 100 setup.py xain_fl tests diff --git a/scripts/ls_running_instances.sh b/scripts/ls_running_instances.sh deleted file mode 100755 index ea9796c32..000000000 --- a/scripts/ls_running_instances.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -e # Exit immediately if a command exits with a non-zero status -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -cd $DIR/../ - -AWS_PROFILE=xain-xain aws ec2 describe-instances --filters Name=instance-state-code,Values=16 | jq '.Reservations[].Instances[] | "\(.Tags[].Value), \(.PublicIpAddress)"' diff --git a/scripts/rm_caches.sh b/scripts/rm_caches.sh index a71fb1bfe..d2baaacaa 100755 --- a/scripts/rm_caches.sh +++ b/scripts/rm_caches.sh @@ -1,10 +1,13 @@ -#!/bin/bash +#!/usr/bin/env bash + set -e # Exit immediately if a command exits with a non-zero status DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" cd $DIR/../ +set -x rm -rf .mypy_cache rm -rf .pytest_cache -find . -type d -name __pycache__ -exec rm -r {} \+ +rm -rf __pycache__ +find xain_fl tests -type d -name __pycache__ -exec rm -r {} \+ rm -rf docs/_code_reference_* rm -rf docs/_build diff --git a/scripts/setup-examples.sh b/scripts/setup-examples.sh deleted file mode 100644 index 45f5e11e9..000000000 --- a/scripts/setup-examples.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# Exit immediately if a command exits with a non-zero status. -set -e - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -cd $DIR/../ - -python -m pip install -U pip==19.3.1 -python -m pip install -U setuptools==41.6.0 -python -m pip install .[examples] diff --git a/scripts/setup.sh b/scripts/setup.sh deleted file mode 100755 index aa2efc2a5..000000000 --- a/scripts/setup.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# Exit immediately if a command exits with a non-zero status. -set -e - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -cd $DIR/../ - -python -m pip install -U pip==19.3.1 -python -m pip install -U setuptools==41.6.0 -python -m pip install -e .[dev] diff --git a/scripts/setup_pyenv.sh b/scripts/setup_pyenv.sh deleted file mode 100755 index 06b4bad98..000000000 --- a/scripts/setup_pyenv.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash -set -e # Exit immediately if a command exits with a non-zero status -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -cd $DIR/../ - -PROJECT_DIR="$( pwd | awk 'BEGIN { FS = "/" } ; { print $NF }' )" -UNAME_OUT="$(uname -s)" - -# Check if `git` is installed -if ! [ -x "$(command -v git)" ]; then - echo 'Error: git is not installed.' >&2 - exit 1 -fi - -# Check if `brew` is installed on macOS -if [ $UNAME_OUT == "Darwin" ]; then - if ! [ -x "$(command -v brew)" ]; then - echo 'Error: git is not installed.' >&2 - exit 1 - fi -fi - -case $UNAME_OUT in - Linux*) CONFIG_FILE=".bashrc";; - Darwin*) CONFIG_FILE=".zshenv";; # macOS 10.15+ defaults to ZSH - *) exit 1 -esac - -# Install for macOS -if [ $UNAME_OUT == "Darwin" ]; then - brew install openssl readline sqlite3 xz zlib - # sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -allowUntrusted -target / -fi - -# Install for Ubuntu/Debian/Mint -if [ $UNAME_OUT == "Linux" ]; then - su -c "apt-get update" - su -c "DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev" -fi - -# Setup pyenv -git clone https://github.com/pyenv/pyenv.git ~/.pyenv -echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/$CONFIG_FILE -echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/$CONFIG_FILE -echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/$CONFIG_FILE - -PYENV_ROOT="$HOME/.pyenv" -PATH="$PYENV_ROOT/bin:$PATH" - -# Setup pyenv-virtualenv -git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv -echo 'eval "$(pyenv virtualenv-init -)"' >> ~/$CONFIG_FILE - -# Install relevant CPython versions -pyenv install 3.6.9 -pyenv install 3.7.5 -pyenv install 3.8.0 - -# Creates project specific virtualenv -pyenv virtualenv 3.6.9 ${PROJECT_DIR}-3.6.9 - -# Create .python-version project file -echo "${PROJECT_DIR}-3.6.9" >> .python-version diff --git a/scripts/test.sh b/scripts/test.sh index 26d37ebbd..51eb357d4 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -1,39 +1,20 @@ -#!/bin/bash - -# clang-format does not provide a way to check the files. -# This function iterates over a list of files and checks each one of them -# for formatting errors -clang_format() { - local_ret=0 - - for f in ./protobuf/xain_fl/cproto/*.proto - do - echo "Processing $f" - clang-format -style="{Language: Proto, BasedOnStyle: Google}" $f | diff $f - - - if [ $? -ne 0 ] ; then - local local_ret=1 - fi - - done - return $local_ret -} +#!/usr/bin/env bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" cd $DIR/../ # sort import -isort --check-only --indent=4 -rc setup.py conftest.py benchmarks examples xain_fl && echo "===> isort says: well done <===" && +isort --check-only --indent=4 -rc setup.py xain_fl tests && echo "===> isort says: well done <===" && # format code -black --check --exclude "xain_fl/cproto/.*_pb2.*" setup.py conftest.py benchmarks examples xain_fl && echo "===> black says: well done <===" && +black --line-length 100 --check setup.py xain_fl tests && echo "===> black says: well done <===" && # lint -pylint --rcfile=pylint.ini benchmarks examples xain_fl && echo "===> pylint says: well done <===" && +pylint --rcfile=.pylintrc xain_fl tests && echo "===> pylint says: well done <===" && # type checks -mypy benchmarks examples/* xain_fl && echo "===> mypy says: well done <===" && +mypy xain_fl tests && echo "===> mypy says: well done <===" && # documentation checks (cd docs/ && SPHINXOPTS="-W" make docs) && echo "===> sphinx-build says: well done <===" && diff --git a/scripts/test_slow.sh b/scripts/test_slow.sh deleted file mode 100755 index cd903db84..000000000 --- a/scripts/test_slow.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -cd $DIR/../ - -# tests -pytest -v -m slow --runslow diff --git a/setup.py b/setup.py index d5e1976a7..cfc573340 100644 --- a/setup.py +++ b/setup.py @@ -1,10 +1,7 @@ -import glob import os.path -import pathlib import sys from setuptools import find_packages, setup -from setuptools.command.develop import develop if sys.version_info < (3, 6): sys.exit("Please use Python version 3.6 or higher.") @@ -24,90 +21,41 @@ readme = fp.read() -# Handle protobuf -class CustomDevelopCommand(develop): - def run(self): - # we need to import this here or else these packages would have to be - # installed in the system before we could run the setup.py - import numproto - import grpc_tools - from grpc_tools import protoc - - develop.run(self) - - # get the path of the numproto protofiles - # this will give us the path to the site-packages where numproto is - # installed - numproto_path = pathlib.Path(numproto.__path__[0]).parent - - # get the path of grpc_tools protofiles - grpc_path = grpc_tools.__path__[0] - - proto_files = glob.glob("./protobuf/xain_fl/cproto/*.proto") - command = [ - "grpc_tools.protoc", - # path to numproto .proto files - f"--proto_path={numproto_path}", - # path to google .proto fiels - f"--proto_path={grpc_path}/_proto", - "--proto_path=./protobuf", - "--python_out=./", - "--grpc_python_out=./", - "--mypy_out=./", - ] + proto_files - - print("Building proto_files {}".format(proto_files)) - if protoc.main(command) != 0: - raise Exception("error: {} failed".format(command)) - - # License comments according to `pip-licenses` install_requires = [ - "typing-extensions~=3.7", # PSF - "numpy~=1.15", # BSD - "absl-py~=0.8", # Apache 2.0 - "grpcio~=1.23", # Apache License 2.0 - "protobuf~=3.9", # 3-Clause BSD License - "numproto~=0.3", # Apache License 2.0 - "requests==2.22.0", # Apache 2.0 # TODO(XP-185) remove - "tensorflow==1.14.0", # Apache 2.0 # TODO(XP-131) remove + "numpy==1.15", # BSD + "grpcio==1.23", # Apache License 2.0 "structlog==19.2.0", # Apache License 2.0 + "xain-proto==0.3.0", # Apache License 2.0 + "boto3==1.10.48", # Apache License 2.0 ] -benchmarks_require = [ - "matplotlib==3.1.1", # PSF - "botocore==1.12.220", # Apache License 2.0 - "boto3==1.9.220", # Apache License 2.0 - "awscli==1.16.230", # Apache License 2.0 - "faker==2.0.0", # MIT License -] - -gpu_require = ["tensorflow-gpu==1.14.0"] # Apache 2.0 - dev_require = [ - "grpcio-tools~=1.23", # Apache License 2.0 - "black==19.3b0", # MIT - "mypy==0.720", # MIT License + "black==19.10b0", # MIT + "mypy==0.760", # MIT License "pylint==2.3.1", # GPL - "astroid<=2.2.5", # LGPL - "isort==4.3.20", # MIT - "rope==0.14.0", # GNU GPL + "astroid==2.2.5", # LGPL + "isort==4.3.21", # MIT "pip-licenses==1.15.2", # MIT License - "mypy-protobuf==1.15", # Apache License 2.0 "twine==2.0.0", # Apache License 2.0 "wheel==0.33.6", # MIT + "typing-extensions==3.7.4.1", # PSF ] -examples_require = ["tensorflow==1.14.0"] # Apache 2.0 - tests_require = [ - "pytest==4.6.2", # MIT license - "pytest-cov==2.7.1", # MIT + "pytest==5.3.2", # MIT license + "pytest-cov==2.8.1", # MIT "pytest-watch==4.2.0", # MIT + "xain-sdk==0.3.0", # Apache License 2.0 ] -docs_require = ["Sphinx==2.2.1", "recommonmark==0.6.0", "sphinxcontrib-mermaid==0.3.1"] +docs_require = [ + "Sphinx==2.2.1", + "m2r==0.2.1", + "sphinxcontrib-mermaid==0.3.1", + "sphinx-autodoc-typehints==1.10.3", # MIT +] setup( name="xain_fl", @@ -116,10 +64,7 @@ def run(self): long_description=readme, long_description_content_type="text/markdown", url="https://github.com/xainag/xain-fl", - author=[ - "Daniel J. Beutel ", - "Taner Topal ", - ], + author=["XAIN AG"], author_email="services@xain.io", license="Apache License Version 2.0", zip_safe=False, @@ -143,30 +88,13 @@ def run(self): "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", ], - packages=find_packages( - where=".", exclude=["benchmarks", "benchmarks.*", "*_test.py"] - ), + packages=find_packages(exclude=["tests"]), install_requires=install_requires, tests_require=tests_require, extras_require={ "test": tests_require, - "gpu": gpu_require, "docs": docs_require, - "benchmarks": benchmarks_require, - "examples": examples_require, - "dev": dev_require - + tests_require - + benchmarks_require - + docs_require - + examples_require, - }, - cmdclass={"develop": CustomDevelopCommand}, - entry_points={ - "console_scripts": [ - "coordinator=xain_fl.cproto.cli:main", - "train_remote=benchmarks.train_remote:main", - "pull_results=xain_fl.ops.__main__:download", - "aggregate=benchmarks.aggregate:main", - ] + "dev": dev_require + tests_require + docs_require, }, + entry_points={"console_scripts": ["coordinator=xain_fl.cli:main"]}, ) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..dd0638502 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +"""XAIN FL tests""" diff --git a/xain_fl/fl/coordinator/aggregate_test.py b/tests/aggregate_test.py similarity index 69% rename from xain_fl/fl/coordinator/aggregate_test.py rename to tests/aggregate_test.py index 8e09e5325..df2adfa60 100644 --- a/xain_fl/fl/coordinator/aggregate_test.py +++ b/tests/aggregate_test.py @@ -1,9 +1,16 @@ +"""XAIN FL tests for coordinator aggregation""" + import numpy as np -from . import aggregate +from xain_fl.fl.coordinator.aggregate import federated_averaging def test_federated_averaging(): # pylint: disable=too-many-locals + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + # Prepare: # - Three weight updates (u0, u1, u2) # - One layer in the model @@ -11,17 +18,17 @@ def test_federated_averaging(): # pylint: disable=too-many-locals u0_l1_w0 = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) u0_l1_w1 = np.ones((2)) - u0 = [u0_l1_w0, u0_l1_w1] + u0_ = [u0_l1_w0, u0_l1_w1] u1_l1_w0 = np.array([[2.0, 3.0, 1.0], [4.0, 5.0, 6.0]]) u1_l1_w1 = np.ones((2)) - u1 = [u1_l1_w0, u1_l1_w1] + u1_ = [u1_l1_w0, u1_l1_w1] u2_l1_w0 = np.array([[3.0, 1.0, 2.0], [4.0, 5.0, 6.0]]) u2_l1_w1 = np.ones((2)) - u2 = [u2_l1_w0, u2_l1_w1] + u2_ = [u2_l1_w0, u2_l1_w1] - thetas = [u0, u1, u2] + thetas = [u0_, u1_, u2_] theta_expected = [ np.array([[2.0, 2.0, 2.0], [4.0, 5.0, 6.0]]), @@ -31,7 +38,7 @@ def test_federated_averaging(): # pylint: disable=too-many-locals weighting = np.ones((len(thetas))) # Execute - theta_actual = aggregate.federated_averaging(thetas, weighting) + theta_actual = federated_averaging(thetas, weighting) # Assert assert len(theta_actual) == len(theta_expected) diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..39f43b45b --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,142 @@ +"""XAIN FL conftest for cproto""" + +from concurrent import futures +import threading +from unittest import mock + +import grpc +import pytest +from xain_proto.fl import coordinator_pb2_grpc, hellonumproto_pb2_grpc + +from xain_fl.coordinator.coordinator import Coordinator +from xain_fl.coordinator.coordinator_grpc import CoordinatorGrpc +from xain_fl.coordinator.heartbeat import monitor_heartbeats +from xain_fl.fl.coordinator.aggregate import ModelSumAgg +from xain_fl.fl.coordinator.controller import IdController +from xain_fl.helloproto.numproto_server import NumProtoServer + +from .port_forwarding import ConnectionManager +from .store import TestStore + + +@pytest.fixture +def greeter_server(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) + hellonumproto_pb2_grpc.add_NumProtoServerServicer_to_server(NumProtoServer(), server) + server.add_insecure_port("localhost:50051") + server.start() + yield + server.stop(0) + + +@pytest.fixture +def coordinator_service(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) + coordinator = Coordinator(minimum_participants_in_round=10, fraction_of_participants=1.0) + store = TestStore() + coordinator_grpc = CoordinatorGrpc(coordinator, store) + coordinator_pb2_grpc.add_CoordinatorServicer_to_server(coordinator_grpc, server) + server.add_insecure_port("localhost:50051") + server.start() + yield coordinator_grpc + server.stop(0) + + +@pytest.fixture +def mock_coordinator_service(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) + agg = ModelSumAgg() + ctrl = IdController() + coordinator = Coordinator( + num_rounds=2, + minimum_participants_in_round=1, + fraction_of_participants=1.0, + aggregator=agg, + controller=ctrl, + ) + with mock.patch("xain_fl.coordinator.coordinator_grpc.Store") as mock_obj: + mock_store = mock_obj.return_value + coordinator_grpc = CoordinatorGrpc(coordinator, mock_store) + coordinator_pb2_grpc.add_CoordinatorServicer_to_server(coordinator_grpc, server) + server.add_insecure_port("localhost:50051") + server.start() + terminate_event = threading.Event() + monitor_thread = threading.Thread( + target=monitor_heartbeats, args=(coordinator, terminate_event) + ) + monitor_thread.start() + yield coordinator_grpc + terminate_event.set() + monitor_thread.join() + server.stop(0) + + +@pytest.fixture +def participant_stub(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Returns: + [type]: [description] + """ + + channel = grpc.insecure_channel("localhost:50051") + stub = coordinator_pb2_grpc.CoordinatorStub(channel) + + yield stub + + channel.close() + + +def port_generator(): + """A generator that yields incrementing port numbers. + + """ + port = 50052 + while True: + yield port + port += 1 + + +@pytest.fixture +def participant_stubs(): + """Generator that yields functions instantiate participant stubs. + Each participant creates a new TCP connection, so that they get a + different participant ID. + + """ + + ports = port_generator() + connections = ConnectionManager() + channels = [] + + def generate_participant_stubs(): + for port in ports: + connections.start("localhost", port, "localhost", 50051) + channel = grpc.insecure_channel(f"localhost:{port}") + channels.append(channel) + stub = coordinator_pb2_grpc.CoordinatorStub(channel) + yield stub + + yield generate_participant_stubs() + + for channel in channels: + channel.close() + + connections.stop_all() diff --git a/xain_fl/fl/coordinator/controller_test.py b/tests/controller_test.py similarity index 71% rename from xain_fl/fl/coordinator/controller_test.py rename to tests/controller_test.py index 449d88642..72474336d 100644 --- a/xain_fl/fl/coordinator/controller_test.py +++ b/tests/controller_test.py @@ -1,3 +1,5 @@ +"""XAIN FL tests for controller""" + import numpy as np from xain_fl.fl.coordinator.controller import RandomController @@ -9,14 +11,10 @@ def test_random_controller(): """ participant_ids = ["a", "b", "c", "d", "e", "f", "g"] fractions = np.arange(0.25, 1, 0.25) - expected_lengths = [ - np.ceil(fraction * len(participant_ids)) for fraction in fractions - ] + expected_lengths = [np.ceil(fraction * len(participant_ids)) for fraction in fractions] for fraction, expected_length in zip(fractions, expected_lengths): - controller = RandomController( - participant_ids, fraction_of_participants=fraction - ) - ids = controller.select_ids() + controller = RandomController(fraction_of_participants=fraction) + ids = controller.select_ids(participant_ids) set_ids = set(ids) # check that length of set_ids is as expected diff --git a/tests/port_forwarding.py b/tests/port_forwarding.py new file mode 100644 index 000000000..b3af87530 --- /dev/null +++ b/tests/port_forwarding.py @@ -0,0 +1,205 @@ +""" +This module provides logic to perform port forwarding. We use this to +artificially open new TCP connections when creating gRPC clients. +""" +from errno import EBADF, ECONNRESET, ENOTCONN +import faulthandler +import socket +from threading import Event, Thread + +# Buffer size for reading from a connection +BUFFER_SIZE = 4096 + + +def transfer_worker(src, dst, terminate_event): + """A worker that reads data from the `src` socket and forwards it to + the `dst` socket. + + Args: + + src (socket.socket): source socket + dst (socket.socket): destination socket + terminate_event (Event): event used to tell the caller that + the `src` socket is closed + + """ + while True: + try: + # Block until there's data to read OR the connection + # closes. + data = src.recv(BUFFER_SIZE) + except OSError as exc: + if exc.errno in [ECONNRESET, EBADF, ENOTCONN]: + terminate_event.set() + return + raise + + # The socket is closed + if not data: + terminate_event.set() + return + + try: + dst.send(data) + except OSError as exc: + if exc.errno in [ECONNRESET, EBADF, ENOTCONN]: + terminate_event.set() + return + raise + + +def forward(host, port, target_host, target_port, terminate_event): + """Set up a TCP socket listening on host:port. Once a connection is + established, open a connection to target_host:target_port and + forward data both way. + + # Example + + ```python + >>> forward("localhost", 8080, "localhost", 80) + ``` + + has the same effect than: + + ```shell + socat tcp-listen:8080,reuseaddr,fork tcp:localhost:80 + ``` + + Args: + + host (str): hostname or ip address for listening + port (str): port number for listening + target_host (str): hostname of ip address to establish a + connection with + target_port (str): port number to establish a connection to + connection with + terminate_event (Event): when this event is set, this function: + - closes the sockets it opened + - waits for the two `transfer_worker()` threads to finish + - returns + """ + # Set up a server socket that will wait for incoming connections + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + # Make the socket non-blocking so that `accept()` doesn't block + # forever, and we can periodically check whether the + # `terminate_event` is set. + server.settimeout(0.1) + server.bind((host, port)) + # Allow only one connection + server.listen(1) + + # Block until the first client connects or we're told to terminate + while True: + try: + client_conn, _ = server.accept() + except socket.timeout: + # Check whether we should terminate + if terminate_event.is_set(): + server.close() + return + else: + break + + # Once the client is connected, open a connection with the target + target_conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + target_conn.connect((target_host, target_port)) + + # Start transfering data both way + tx_thread = Thread( + target=transfer_worker, + name=f"{target_host}:{target_port}->{host}:{port}", + args=(target_conn, client_conn, terminate_event), + daemon=True, + ) + rx_thread = Thread( + target=transfer_worker, + name=f"{host}:{port}->{target_host}:{target_port}", + args=(client_conn, target_conn, terminate_event), + daemon=True, + ) + tx_thread.start() + rx_thread.start() + + # Wait until we're told to terminate (this event can be fired for + # the `transfer_worker()` threads, or by the caller. + _ = terminate_event.wait() + + # Close all the sockets + for sock in [target_conn, client_conn, server]: + try: + sock.shutdown(socket.SHUT_RDWR) + except OSError as exc: + if exc.errno not in [ECONNRESET, EBADF, ENOTCONN]: + raise + sock.close() + + # Wait for the transfer workers to terminate + tx_thread.join(timeout=0.2) + assert not tx_thread.isAlive() + rx_thread.join(timeout=0.2) + assert not rx_thread.isAlive() + + +class ConnectionManager: + """ + Manage multiple forwarding workers. + """ + + def __init__(self): + self.forwarders = {} + + def start(self, host, port, target_host, target_port): + """Start a new forwarding worker. + + Args: + + host (str): hostname or ip address for listening + port (str): port number for listening + target_host (str): hostname of ip address to establish a + connection with + target_port (str): port number to establish a connection + to connection with + + """ + terminate_event = Event() + thread = Thread( + target=forward, + name=f"{host}:{port}<->{target_host}:{target_port}", + args=(host, port, target_host, target_port, terminate_event), + daemon=True, + ) + thread.start() + self.forwarders[(host, port)] = (terminate_event, thread) + + def stop(self, host, port): + """Stop the forwarding worker listening on the given host and port + + Args: + host (str): hostname or ip address the worker is listening + on + port (str): port number the worker is listening on + + """ + terminate_event, thread = self.forwarders.pop((host, port)) + terminate_event.set() + thread.join(timeout=5) + + def stop_all(self): + """ + Stop all the forwarding workers + """ + threads = [] + for (host, port) in self.forwarders: + terminate_event, thread = self.forwarders[(host, port)] + terminate_event.set() + threads.append(thread) + for thread in threads: + thread.join(timeout=1) + # FIXME: sometimes some threads don't terminate in CI, so + # we're dumping the stacktraces for all the current + # threads for debugging purpose. + if thread.isAlive(): + faulthandler.dump_traceback() + raise Exception(f"Thread {thread.name} is still alive") + self.forwarders = {} diff --git a/tests/store.py b/tests/store.py new file mode 100644 index 000000000..9534ccb24 --- /dev/null +++ b/tests/store.py @@ -0,0 +1,101 @@ +"""This module provide a subclass of +`xain_fl.coordinator.store.Store` that stores data in memory. +""" +from collections import defaultdict +import pickle +import typing + +import numpy as np + +from xain_fl.coordinator.store import Store, StoreConfig + + +class FakeS3Resource: + """Mock of the `xain-fl.coordinator.Store.s3` attribute. + + This class offers the same API than `boto3.S3.Client.bucket` but + writes data in memory and keeps track of the reads and writes. + """ + + def __init__(self): + # fake store where data gets written to + self.fake_store = {} + # count the writes for each key in the store + self.writes = defaultdict(lambda: 0) + # count the reads for each key in the store + self.reads = defaultdict(lambda: 0) + + # The names come from the `boto3` API we're mocking + # pylint: disable=invalid-name + def Bucket(self, _name: str): + """Mock of the `boto3.S3.Client.Bucket` method. + + Args: + _name (str): name of the bucket (un-used) + """ + return self + + # The names come from the `boto3` API we're mocking + # pylint: disable=invalid-name + def put_object(self, Body: bytes, Key: str): + """Mock of the `boto3.S3.Client.put_object` method. + + Args: + Body (bytes): data to write to the bucket + Key (str): key under which the data should be stored + """ + # We store the data non-serialized, to make it easier to + # check it. + self.fake_store[Key] = pickle.loads(Body) + self.writes[Key] += 1 + + def download_fileobj(self, key: str, buf: typing.IO): + """Mock of the `boto3.S3.Client.download_fileobj` method. + + Args: + key (str): key under which the data to retrieve is stored + buf (bytes of file-like object): buffer for writing the data + """ + data = pickle.dumps(self.fake_store[key]) + buf.write(data) + self.reads[key] += 1 + + +class TestStore(Store): + """A partial mock of the `xain-fl.coordinator.store.Store` class that + does not perform any IO. Instead, data is stored in memory. + """ + + # We DO NOT want to call the parent class __init__, since it tries + # to initialize a connection to a non-existent external resource + # + # pylint: disable=super-init-not-called + def __init__(self): + self.config = StoreConfig("endpoint_url", "access_key_id", "secret_access_key", "bucket") + self.s3 = FakeS3Resource() + + def assert_wrote(self, round: int, weights: np.ndarray): + """Check that the given weights have been written to the store for the +given round. + + Args: + weights (np.ndarray): weights to store + round (int): round to which the weights belong + """ + writes = self.s3.writes[str(round)] + # Under normal conditions, we should write data exactly once + assert writes == 1, f"got {writes} writes for round {round}, expected 1" + # If the arrays contains `NaN` we cannot compare them, so we + # replace them by zeros to do the comparison + stored_array = np.nan_to_num(self.s3.fake_store[str(round)]) + expected_array = np.nan_to_num(weights) + assert np.array_equal(stored_array, expected_array) + + def assert_didnt_write(self, round: int): + """Check that the weights for the given round have NOT been written to the store. + + Args: + round (int): round to which the weights belong + + """ + assert self.s3.writes[str(round)] == 0 diff --git a/tests/test_coordinator.py b/tests/test_coordinator.py new file mode 100644 index 000000000..9add70f07 --- /dev/null +++ b/tests/test_coordinator.py @@ -0,0 +1,321 @@ +"""XAIN FL tests for coordinator""" + +import numpy as np +import pytest +from xain_proto.fl.coordinator_pb2 import ( + EndTrainingRoundRequest, + HeartbeatRequest, + RendezvousReply, + RendezvousRequest, + RendezvousResponse, + StartTrainingRoundRequest, + State, +) +from xain_proto.numproto import proto_to_ndarray + +from xain_fl.coordinator.coordinator import Coordinator +from xain_fl.tools.exceptions import ( + DuplicatedUpdateError, + InvalidRequestError, + UnknownParticipantError, +) + + +def test_rendezvous_accept(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + coordinator: Coordinator = Coordinator() + response: RendezvousResponse = coordinator.on_message(RendezvousRequest(), "participant1") + + assert isinstance(response, RendezvousResponse) + assert response.reply == RendezvousReply.ACCEPT + + +def test_rendezvous_later_fraction_1(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + coordinator = Coordinator(minimum_participants_in_round=1, fraction_of_participants=1.0) + coordinator.on_message(RendezvousRequest(), "participant1") + response = coordinator.on_message(RendezvousRequest(), "participant2") + + assert isinstance(response, RendezvousResponse) + assert response.reply == RendezvousReply.LATER + + +def test_rendezvous_later_fraction_05(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + coordinator = Coordinator(minimum_participants_in_round=1, fraction_of_participants=0.5) + + # with 0.5 fraction it needs to accept at least two participants + response = coordinator.on_message(RendezvousRequest(), "participant1") + + assert isinstance(response, RendezvousResponse) + assert response.reply == RendezvousReply.ACCEPT + + response = coordinator.on_message(RendezvousRequest(), "participant2") + + assert isinstance(response, RendezvousResponse) + assert response.reply == RendezvousReply.ACCEPT + + # the third participant must receive LATER RendezvousReply + response = coordinator.on_message(RendezvousRequest(), "participant3") + + assert isinstance(response, RendezvousResponse) + assert response.reply == RendezvousReply.LATER + + +def test_coordinator_state_standby_round(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + # tests that the coordinator transitions from STANDBY to ROUND once enough participants + # are connected + coordinator = Coordinator(minimum_participants_in_round=1, fraction_of_participants=1.0) + + assert coordinator.state == State.STANDBY + + coordinator.on_message(RendezvousRequest(), "participant1") + + assert coordinator.state == State.ROUND + assert coordinator.current_round == 1 + + +def test_start_training_round(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + test_weights = [np.arange(10), np.arange(10, 20)] + coordinator = Coordinator( + minimum_participants_in_round=1, fraction_of_participants=1.0, weights=test_weights, + ) + coordinator.on_message(RendezvousRequest(), "participant1") + + response = coordinator.on_message(StartTrainingRoundRequest(), "participant1") + received_weights = [proto_to_ndarray(nda) for nda in response.weights] + + np.testing.assert_equal(test_weights, received_weights) + + +def start_training_round_wrong_state(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + # if the coordinator receives a StartTrainingRound request while not in the + # ROUND state it will raise an exception + coordinator = Coordinator(minimum_participants_in_round=2, fraction_of_participants=1.0) + coordinator.on_message(RendezvousRequest(), "participant1") + + with pytest.raises(InvalidRequestError): + coordinator.on_message(StartTrainingRoundRequest(), "participant1") + + +def test_end_training_round(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + # we need two participants so that we can check the status of the local update mid round + # with only one participant it wouldn't work because the local updates state is cleaned at + # the end of each round + coordinator = Coordinator(minimum_participants_in_round=2, fraction_of_participants=1.0) + coordinator.on_message(RendezvousRequest(), "participant1") + coordinator.on_message(RendezvousRequest(), "participant2") + + coordinator.on_message(EndTrainingRoundRequest(), "participant1") + + assert len(coordinator.round.updates) == 1 + + +def test_end_training_round_update(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + # Test that the round number is updated once all participants sent their updates + coordinator = Coordinator( + minimum_participants_in_round=2, fraction_of_participants=1.0, num_rounds=2 + ) + coordinator.on_message(RendezvousRequest(), "participant1") + coordinator.on_message(RendezvousRequest(), "participant2") + + # check that we are currently in round 1 + assert coordinator.current_round == 1 + + coordinator.on_message(EndTrainingRoundRequest(), "participant1") + # check we are still in round 1 + assert coordinator.current_round == 1 + coordinator.on_message(EndTrainingRoundRequest(), "participant2") + + # check that round number was updated + assert coordinator.current_round == 2 + + +def test_end_training_round_reinitialize_local_models(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + coordinator = Coordinator( + minimum_participants_in_round=2, fraction_of_participants=1.0, num_rounds=2 + ) + coordinator.on_message(RendezvousRequest(), "participant1") + coordinator.on_message(RendezvousRequest(), "participant2") + + coordinator.on_message(EndTrainingRoundRequest(), "participant1") + + # After one participant sends its updates we should have one update in the coordinator + assert len(coordinator.round.updates) == 1 + + coordinator.on_message(EndTrainingRoundRequest(), "participant2") + + # once the second participant delivers its updates the round ends and the local models + # are reinitialized + assert coordinator.round.updates == {} + + +def test_training_finished(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + coordinator = Coordinator( + minimum_participants_in_round=1, fraction_of_participants=1.0, num_rounds=2 + ) + coordinator.on_message(RendezvousRequest(), "participant1") + + # Deliver results for 2 rounds + coordinator.on_message(EndTrainingRoundRequest(), "participant1") + coordinator.on_message(EndTrainingRoundRequest(), "participant1") + + assert coordinator.state == State.FINISHED + + +def test_wrong_participant(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + # coordinator should not accept requests from participants that it has not accepted + coordinator = Coordinator(minimum_participants_in_round=1, fraction_of_participants=1.0) + coordinator.on_message(RendezvousRequest(), "participant1") + + with pytest.raises(UnknownParticipantError): + coordinator.on_message(HeartbeatRequest(), "participant2") + + with pytest.raises(UnknownParticipantError): + coordinator.on_message(StartTrainingRoundRequest(), "participant2") + + with pytest.raises(UnknownParticipantError): + coordinator.on_message(EndTrainingRoundRequest(), "participant2") + + +def test_duplicated_update_submit(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + # the coordinator should not accept multiples updates from the same participant + # in the same round + coordinator = Coordinator(minimum_participants_in_round=2, fraction_of_participants=1.0) + coordinator.on_message(RendezvousRequest(), "participant1") + coordinator.on_message(RendezvousRequest(), "participant2") + + coordinator.on_message(EndTrainingRoundRequest(), "participant1") + + with pytest.raises(DuplicatedUpdateError): + coordinator.on_message(EndTrainingRoundRequest(), "participant1") + + +def test_remove_participant(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + coordinator = Coordinator(minimum_participants_in_round=1, fraction_of_participants=1.0) + coordinator.on_message(RendezvousRequest(), "participant1") + + assert coordinator.state == State.ROUND + + coordinator.remove_participant("participant1") + + assert coordinator.participants.len() == 0 + assert coordinator.state == State.STANDBY + + coordinator.on_message(RendezvousRequest(), "participant1") + + assert coordinator.state == State.ROUND + + +def test_number_of_selected_participants(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + # test that the coordinator needs minimum 3 participants and selects 2 of them + coordinator = Coordinator(minimum_participants_in_round=2, fraction_of_participants=0.6) + coordinator.on_message(RendezvousRequest(), "participant1") + + # the coordinator should wait for three participants to be connected before starting a round, + # and select participants. Before that coordinator.round.participant_ids is an empty list + assert coordinator.minimum_connected_participants == 3 + assert coordinator.state == State.STANDBY + assert coordinator.round.participant_ids == [] + + coordinator.on_message(RendezvousRequest(), "participant2") + + assert coordinator.state == State.STANDBY + assert coordinator.round.participant_ids == [] + + # add the third participant + coordinator.on_message(RendezvousRequest(), "participant3") + + # now the coordinator must have started a round and selected 2 participants + assert coordinator.state == State.ROUND + assert len(coordinator.round.participant_ids) == 2 + + +def test_correct_round_advertised_to_participants(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + # test that only selected participants receive ROUND state and the others STANDBY + coordinator = Coordinator(minimum_participants_in_round=1, fraction_of_participants=0.5) + coordinator.on_message(RendezvousRequest(), "participant1") + coordinator.on_message(RendezvousRequest(), "participant2") + + # override selected participant + coordinator.round.participant_ids = ["participant1"] + + # state ROUND will be advertised to participant1 (which has been selected) + response = coordinator.on_message(HeartbeatRequest(), "participant1") + assert response.state == State.ROUND + + # state STANDBY will be advertised to participant2 (which has NOT been selected) + response = coordinator.on_message(HeartbeatRequest(), "participant2") + assert response.state == State.STANDBY diff --git a/tests/test_grpc.py b/tests/test_grpc.py new file mode 100644 index 000000000..8e36ecfcf --- /dev/null +++ b/tests/test_grpc.py @@ -0,0 +1,484 @@ +"""XAIN FL tests for gRPC coordinator""" + +from concurrent import futures +import threading +from unittest import mock + +import grpc +import numpy as np +import pytest +from xain_proto.fl.coordinator_pb2 import ( + EndTrainingRoundRequest, + EndTrainingRoundResponse, + HeartbeatRequest, + HeartbeatResponse, + RendezvousReply, + RendezvousRequest, + StartTrainingRoundRequest, + StartTrainingRoundResponse, + State, +) +from xain_proto.fl.coordinator_pb2_grpc import add_CoordinatorServicer_to_server +from xain_proto.fl.hellonumproto_pb2 import NumProtoRequest +from xain_proto.fl.hellonumproto_pb2_grpc import NumProtoServerStub +from xain_proto.numproto import ndarray_to_proto, proto_to_ndarray +from xain_sdk.participant_state_machine import ( + StateRecord, + end_training_round, + message_loop, + rendezvous, + start_participant, + start_training_round, +) + +from xain_fl.coordinator.coordinator import Coordinator +from xain_fl.coordinator.coordinator_grpc import CoordinatorGrpc +from xain_fl.coordinator.heartbeat import monitor_heartbeats +from xain_fl.coordinator.participants import Participants + +from .store import TestStore + + +@pytest.mark.integration +def test_greeter_server(greeter_server): # pylint: disable=unused-argument + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + greeter_server ([type]): [description] + """ + + with grpc.insecure_channel("localhost:50051") as channel: + stub = NumProtoServerStub(channel) + + nda = np.arange(10) + response = stub.SayHelloNumProto(NumProtoRequest(arr=ndarray_to_proto(nda))) + + response_nda = proto_to_ndarray(response.arr) + + assert np.array_equal(nda * 2, response_nda) + + +@pytest.mark.integration +def test_participant_rendezvous_accept( # pylint: disable=unused-argument + participant_stub, coordinator_service +): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + participant_stub ([type]): [description] + coordinator_service ([type]): [description] + """ + + response = participant_stub.Rendezvous(RendezvousRequest()) + + assert response.reply == RendezvousReply.ACCEPT + + +@pytest.mark.integration +def test_participant_rendezvous_later(participant_stub): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + participant_stub ([type]): [description] + """ + + # populate participants + coordinator = Coordinator(minimum_participants_in_round=10, fraction_of_participants=1.0) + required_participants = 10 + for i in range(required_participants): + coordinator.participants.add(str(i)) + + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) + store = TestStore() + add_CoordinatorServicer_to_server(CoordinatorGrpc(coordinator, store), server) + server.add_insecure_port("localhost:50051") + server.start() + + # try to rendezvous the 11th participant + response = participant_stub.Rendezvous(RendezvousRequest()) + server.stop(0) + + assert response.reply == RendezvousReply.LATER + + +@pytest.mark.integration +def test_heartbeat(participant_stub, coordinator_service): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + participant_stub ([type]): [description] + coordinator_service ([type]): [description] + """ + + # first we need to rendezvous so that the participant is added to the list of participants + _ = participant_stub.Rendezvous(RendezvousRequest()) + response = participant_stub.Heartbeat(HeartbeatRequest()) + + # the Coordinator is initialised in conftest.py::coordinator_service with 10 participants + # needed per round. so here we expect the HeartbeatResponse to have State.STANDBY + # because we connected only one participant + assert response == HeartbeatResponse() + assert coordinator_service.coordinator.state == State.STANDBY + + +@pytest.mark.integration +def test_heartbeat_denied(participant_stub, coordinator_service): # pylint: disable=unused-argument + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + participant_stub ([type]): [description] + coordinator_service ([type]): [description] + """ + + # heartbeat requests are only allowed if the participant has already + # rendezvous with the coordinator + with pytest.raises(grpc.RpcError): + response = participant_stub.Heartbeat(HeartbeatRequest()) + assert response.status_code == grpc.StatusCode.PERMISSION_DENIED + + +@mock.patch("xain_fl.coordinator.heartbeat.threading.Event.is_set", side_effect=[False, True]) +@mock.patch("xain_fl.coordinator.heartbeat.time.sleep", return_value=None) +@mock.patch("xain_fl.coordinator.heartbeat.Coordinator.remove_participant") +def test_monitor_heartbeats(mock_participants_remove, _mock_sleep, _mock_event): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + mock_participants_remove ([type]): [description] + _mock_sleep ([type]): [description] + _mock_event ([type]): [description] + """ + + participants = Participants() + participants.add("participant_1") + participants.participants["participant_1"].heartbeat_expires = 0 + + coordinator = Coordinator() + coordinator.participants = participants + + terminate_event = threading.Event() + monitor_heartbeats(coordinator, terminate_event) + + mock_participants_remove.assert_called_once_with("participant_1") + + +@mock.patch("xain_fl.coordinator.heartbeat.threading.Event.is_set", side_effect=[False, True]) +@mock.patch("xain_fl.coordinator.heartbeat.time.sleep", return_value=None) +def test_monitor_heartbeats_remove_participant(_mock_sleep, _mock_event): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + _mock_sleep ([type]): [description] + _mock_event ([type]): [description] + """ + + participants = Participants() + participants.add("participant_1") + participants.participants["participant_1"].heartbeat_expires = 0 + + coordinator = Coordinator() + coordinator.participants = participants + + terminate_event = threading.Event() + monitor_heartbeats(coordinator, terminate_event) + + assert participants.len() == 0 + + +@mock.patch( + "xain_sdk.participant_state_machine.threading.Event.is_set", side_effect=[False, False, True] +) +@mock.patch("xain_sdk.participant_state_machine.time.sleep", return_value=None) +@mock.patch("xain_sdk.participant_state_machine.HeartbeatRequest") +def test_message_loop(mock_heartbeat_request, _mock_sleep, _mock_event): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + mock_heartbeat_request ([type]): [description] + _mock_sleep ([type]): [description] + _mock_event ([type]): [description] + """ + + channel = mock.MagicMock() + terminate_event = threading.Event() + state_record = StateRecord() + + message_loop(channel, state_record, terminate_event) + + # check that the heartbeat is sent exactly twice + mock_heartbeat_request.assert_has_calls([mock.call(), mock.call()]) + + +@pytest.mark.integration +def test_start_training_round(coordinator_service): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + coordinator_service ([type]): [description] + """ + + test_weights = [np.arange(10), np.arange(10, 20)] + + # set coordinator global model and hyper-params so that it needs only 1 participant + coord = coordinator_service.coordinator + coord.minimum_participants_in_round = 1 + coord.fraction_of_participants = 1.0 + coord.epochs = 5 + coord.epoch_base = 2 + coord.weights = test_weights + coord.minimum_connected_participants = coord.get_minimum_connected_participants() + + # simulate a participant communicating with coordinator via channel + with grpc.insecure_channel("localhost:50051") as channel: + # we need to rendezvous before we can send any other requests + rendezvous(channel) + # call StartTrainingRound service method on coordinator + weights, epochs, epoch_base = start_training_round(channel) + + # check global model received + assert epochs == 5 + assert epoch_base == 2 + np.testing.assert_equal(weights, test_weights) + + +@pytest.mark.integration +def test_start_training_round_denied( # pylint: disable=unused-argument + participant_stub, coordinator_service +): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + participant_stub ([type]): [description] + coordinator_service ([type]): [description] + """ + + # start training requests are only allowed if the participant has already + # rendezvous with the coordinator + with pytest.raises(grpc.RpcError): + response = participant_stub.StartTrainingRound(StartTrainingRoundRequest()) + assert response.status_code == grpc.StatusCode.PERMISSION_DENIED + + +@pytest.mark.integration +def test_start_training_round_failed_precondition( # pylint: disable=unused-argument + participant_stub, coordinator_service +): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + participant_stub ([type]): [description] + coordinator_service ([type]): [description] + """ + + # start training requests are only allowed if the coordinator is in ROUND state. + # Since we need 10 participants to be connected (see conftest.py::coordinator_service) + # the StartTrainingRoundRequest is expected to fail + participant_stub.Rendezvous(RendezvousRequest()) + with pytest.raises(grpc.RpcError): + response = participant_stub.StartTrainingRound(StartTrainingRoundRequest()) + assert response.status_code == grpc.StatusCode.FAILED_PRECONDITION + + +@pytest.mark.integration +def test_end_training_round(coordinator_service): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + coordinator_service ([type]): [description] + """ + + assert coordinator_service.coordinator.round.updates == {} + + # simulate trained local model data + test_weights, number_samples = [np.arange(20, 30), np.arange(30, 40)], 2 + test_metrics = {"metric": np.arange(10, 20)} + + with grpc.insecure_channel("localhost:50051") as channel: + # we first need to rendezvous before we can send any other request + rendezvous(channel) + # call EndTrainingRound service method on coordinator + end_training_round(channel, test_weights, number_samples, test_metrics) + # check local model received... + + assert len(coordinator_service.coordinator.round.updates) == 1 + + round_ = coordinator_service.coordinator.round + + # first the weights update + _, round_update = round_.updates.popitem() + update_item1, update_item2 = round_update["weight_update"] + assert update_item2 == number_samples + np.testing.assert_equal(update_item1, test_weights) + + round_update_metrics = round_update["metrics"] + assert round_update_metrics.keys() == test_metrics.keys() + for key, values in test_metrics.items(): + np.testing.assert_equal(round_update_metrics[key], values) + + +@pytest.mark.integration +def test_end_training_round_duplicated_updates( # pylint: disable=unused-argument + coordinator_service, participant_stub +): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + coordinator_service ([type]): [description] + participant_stub ([type]): [description] + """ + + # participant can only send updates once in a single round + participant_stub.Rendezvous(RendezvousRequest()) + + participant_stub.EndTrainingRound(EndTrainingRoundRequest()) + + with pytest.raises(grpc.RpcError): + response = participant_stub.EndTrainingRound(EndTrainingRoundRequest()) + assert response.status_code == grpc.StatusCode.ALREADY_EXISTS + + +@pytest.mark.integration +def test_end_training_round_denied( # pylint: disable=unused-argument + participant_stub, coordinator_service +): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + participant_stub ([type]): [description] + coordinator_service ([type]): [description] + """ + + # heartbeat requests are only allowed if the participant has already + # rendezvous with the coordinator + with pytest.raises(grpc.RpcError): + response = participant_stub.EndTrainingRound(EndTrainingRoundRequest()) + assert response.status_code == grpc.StatusCode.PERMISSION_DENIED + + +@pytest.mark.integration +def test_full_training_round( + participant_stubs, coordinator_service +): # pylint: disable=unused-argument + """Run a complete training round with multiple participants. + """ + # Initialize the coordinator with dummy weights, otherwise, the + # aggregated weights at the end of the round are an empty array. + dummy_weights = np.ndarray([1, 2, 3, 4]) + coordinator_service.coordinator.weights = dummy_weights + weights_proto = [ndarray_to_proto(nda) for nda in dummy_weights] + + # Create 10 partipants + participants = [next(participant_stubs) for _ in range(0, 10)] + + # 9 participants out of 10 connect to the coordinator, so it stays + # in STANDBY and accepts the connections. + for participant in participants[:-1]: + response = participant.Rendezvous(RendezvousRequest()) + assert response.reply == RendezvousReply.ACCEPT + + response = participant.Heartbeat(HeartbeatRequest()) + assert response == HeartbeatResponse(state=State.STANDBY, round=0) + + assert coordinator_service.coordinator.state == State.STANDBY + assert coordinator_service.coordinator.current_round == 0 + + # The 10th participant connect, so the coordinator switches to ROUND> + last_participant = participants[-1] + response = last_participant.Rendezvous(RendezvousRequest()) + assert response.reply == RendezvousReply.ACCEPT + + assert coordinator_service.coordinator.state == State.ROUND + assert coordinator_service.coordinator.current_round == 1 + + response = last_participant.Heartbeat(HeartbeatRequest()) + assert response == HeartbeatResponse(state=State.ROUND, round=1) + + # The initial 9 participants send another heatbeat request. + for participant in participants[:-1]: + response = participant.Heartbeat(HeartbeatRequest(state=State.STANDBY, round=0)) + assert response == HeartbeatResponse(state=State.ROUND, round=1) + + # The participants start training + for participant in participants: + response = participant.StartTrainingRound(StartTrainingRoundRequest()) + assert response == StartTrainingRoundResponse( + weights=weights_proto, + epochs=coordinator_service.coordinator.epochs, + epoch_base=coordinator_service.coordinator.epoch_base, + ) + + # The first 9th participants end training + for participant in participants[:-1]: + response = participant.EndTrainingRound( + EndTrainingRoundRequest(weights=weights_proto, number_samples=1) + ) + assert response == EndTrainingRoundResponse() + + assert not coordinator_service.coordinator.round.is_finished() + coordinator_service.store.assert_didnt_write(1) + + # The last participant finishes training + response = last_participant.EndTrainingRound(EndTrainingRoundRequest()) + assert response == EndTrainingRoundResponse() + # Make sure we wrote the results for the given round + coordinator_service.store.assert_wrote(1, coordinator_service.coordinator.weights) + + +@pytest.mark.integration +@pytest.mark.slow +def test_start_participant(mock_coordinator_service): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + mock_coordinator_service ([type]): [description] + """ + + init_weight = [np.arange(10), np.arange(10, 20)] + mock_coordinator_service.coordinator.weights = init_weight + + # mock a local participant with a constant train_round function + with mock.patch("xain_sdk.participant_state_machine.Participant") as mock_obj: + mock_local_part = mock_obj.return_value + mock_local_part.train_round.return_value = init_weight, 1, {} + + start_participant(mock_local_part, "localhost:50051") + + coord = mock_coordinator_service.coordinator + assert coord.state == State.FINISHED + + # coordinator set to 2 round for good measure, but the resulting + # aggregated weights are the same as a single round + assert coord.current_round == 2 + + # expect weight aggregated by summation - see mock_coordinator_service + np.testing.assert_equal(coord.weights, [np.arange(start=10, stop=29, step=2)]) diff --git a/xain_fl/CONFIG.md b/xain_fl/CONFIG.md deleted file mode 100644 index 468ad3279..000000000 --- a/xain_fl/CONFIG.md +++ /dev/null @@ -1,21 +0,0 @@ -# Configuration - -Currently configuration happens two fold. - -## `config.cfg` - -On the initial run of the library the `xain_fl.config.init_config()` function -will be executed and initialize a `config.cfg` file in the projects root directory. -If the user wants to run benchmarks and wants results to be uploaded to S3 he will need to replace the -`ACCESSIBLE_S3_BUCKET_FOR_RESULTS_TO_BE_UPLOADED` string in the `config.cfg` with an actual S3 bucket name. The bucket -should be accessible with the currently active AWS credentials (either default credentials or the currently set AWS_PROFILE). - -## abseil.io flags - -The second form of configuration happens via abseil.io flags. All entry points are configured as abseil.io apps which -accept various flags. To find out what valid flag exist one can run any entry point with the `--helpfull` flag. -For example - -```shell -$ aggregate --helpfull -``` diff --git a/xain_fl/__init__.py b/xain_fl/__init__.py index e762f6393..0ba763dba 100644 --- a/xain_fl/__init__.py +++ b/xain_fl/__init__.py @@ -1,31 +1 @@ -import os - -from absl import flags - -import xain_fl.config - -if not xain_fl.config.check_config_file_exists(): - xain_fl.config.init_config() - -c = xain_fl.config.load() - -# following: https://abseil.io/docs/cpp/guides/flags#flags-best-practices -# we will define our flags in this file -FLAGS = flags.FLAGS - - -flags.DEFINE_string( - "output_dir", c.get("Path", "output_dir"), "Output directory as absolute path" -) - -flags.DEFINE_string( - "results_dir", c.get("Path", "results_dir"), "Results directory as absolute path" -) - -flags.DEFINE_string( - "S3_results_bucket", - c.get("S3", "results_bucket", fallback=None), - "Bucket name for the results to be uploaded to", -) - -os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python" +"""XAIN FL init""" diff --git a/xain_fl/__version__.py b/xain_fl/__version__.py index d762ba20c..214b32310 100644 --- a/xain_fl/__version__.py +++ b/xain_fl/__version__.py @@ -1,4 +1,4 @@ """central place to handle versioning""" -__version__ = "0.2.0" +__version__ = "0.3.0" # used by the documentation -__short_version__ = "0.2" +__short_version__ = "0.3" diff --git a/xain_fl/cli.py b/xain_fl/cli.py index c403d2a82..c04f2698e 100644 --- a/xain_fl/cli.py +++ b/xain_fl/cli.py @@ -8,38 +8,80 @@ import numpy as np from xain_fl.coordinator.coordinator import Coordinator +from xain_fl.coordinator.store import Store, StoreConfig from xain_fl.serve import serve def type_num_rounds(value): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + value ([type]): [description] + + Returns: + [type]: [description] + + Raises: + ~argparse.ArgumentTypeError: [description] + ~argparse.ArgumentTypeError: [description] + """ + ivalue = int(value) if ivalue <= 0: raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value) if ivalue > 1_000: - raise argparse.ArgumentTypeError( - "%s More than 1_000 rounds is not supported" % value - ) + raise argparse.ArgumentTypeError("%s More than 1_000 rounds is not supported" % value) return ivalue def type_num_epochs(value): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + value ([type]): [description] + + Returns: + [type]: [description] + + Raises: + ~argparse.ArgumentTypeError: [description] + ~argparse.ArgumentTypeError: [description] + """ + ivalue = int(value) - if ivalue <= 0: + if ivalue < 0: raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value) if ivalue > 10_000: - raise argparse.ArgumentTypeError( - "%s More than 10_000 epochs is not supported" % value - ) + raise argparse.ArgumentTypeError("%s More than 10_000 epochs is not supported" % value) return ivalue def type_min_num_participants_in_round(value): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + value ([type]): [description] + + Returns: + [type]: [description] + + Raises: + ~argparse.ArgumentTypeError: [description] + ~argparse.ArgumentTypeError: [description] + """ + ivalue = int(value) if ivalue <= 0: @@ -54,12 +96,25 @@ def type_min_num_participants_in_round(value): def type_fraction(value): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + value ([type]): [description] + + Returns: + [type]: [description] + + Raises: + ~argparse.ArgumentTypeError: [description] + ~argparse.ArgumentTypeError: [description] + """ + ivalue = float(value) if ivalue <= 0: - raise argparse.ArgumentTypeError( - "%s is an invalid positive float value" % value - ) + raise argparse.ArgumentTypeError("%s is an invalid positive float value" % value) if ivalue > 1: raise argparse.ArgumentTypeError( @@ -70,6 +125,14 @@ def type_fraction(value): def get_cmd_parameters(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Returns: + [type]: [description] + """ + # Allow various parameters to be passed via the commandline parser = argparse.ArgumentParser(description="Coordinator CLI") @@ -116,10 +179,39 @@ def get_cmd_parameters(): A float between 0 and 1", ) + parser.add_argument( + "--storage-endpoint", required=True, type=str, help="URL to the storage service to use", + ) + + parser.add_argument( + "--storage-bucket", + required=True, + type=str, + help="Name of the bucket for storing the aggregated models", + ) + + parser.add_argument( + "--storage-key-id", + required=True, + type=str, + help="AWS access key ID to use to authenticate to the storage service", + ) + + parser.add_argument( + "--storage-secret-access-key", + required=True, + type=str, + help="AWS secret access to use to authenticate to the storage service", + ) return parser.parse_args() def main(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + parameters = get_cmd_parameters() coordinator = Coordinator( @@ -130,7 +222,15 @@ def main(): fraction_of_participants=parameters.fraction, ) - serve(coordinator=coordinator, host=parameters.host, port=parameters.port) + store_config = StoreConfig( + parameters.storage_endpoint, + parameters.storage_key_id, + parameters.storage_secret_access_key, + parameters.storage_bucket, + ) + store = Store(store_config) + + serve(coordinator=coordinator, store=store, host=parameters.host, port=parameters.port) if __name__ == "__main__": diff --git a/xain_fl/config.py b/xain_fl/config.py deleted file mode 100644 index cccabbb0f..000000000 --- a/xain_fl/config.py +++ /dev/null @@ -1,68 +0,0 @@ -import configparser -import os -from functools import lru_cache -from pathlib import Path - -from xain_fl.helpers import project -from xain_fl.logger import get_logger - -# Storage dir for bigger files like the datasets -storage_dir = Path.home().joinpath(".xain-fl") -datasets_dir_default = storage_dir.joinpath("datasets") - -# Local outputs and remote results -root_dir = project.root() -config_file = root_dir.joinpath("config.cfg") -output_dir_default = root_dir.joinpath("output") -results_dir_default = root_dir.joinpath("results") - -logger = get_logger(__name__) - - -def init_config(): - """Creates initial config file if non exists""" - logger.info("Initializing config", config_file=config_file) - - config = configparser.ConfigParser() - - # Path config section - config.add_section("Path") - config.set("Path", "output_dir", str(output_dir_default)) - config.set("Path", "results_dir", str(results_dir_default)) - config.set("Path", "local_datasets_dir", str(datasets_dir_default)) - - config.add_section("S3") - config.set( - "S3", - "results_bucket", - # Using an ENV variable here to we can set it on the CI as an environment variable - os.environ.get( - "S3_RESULTS_BUCKET", - default="ACCESSIBLE_S3_BUCKET_FOR_RESULTS_TO_BE_UPLOADED", - ), - ) - - # Dataset config section - config.add_section("Dataset") - config.set( - "Dataset", - "repository", - "http://xain-datasets.s3-website.eu-central-1.amazonaws.com", - ) - config.set( - "Dataset", "fetch_datasets", "True" - ) # Indicates if datasets should be fetched from remote by default - - with open(config_file, "w") as configfile: - config.write(configfile) - - -def check_config_file_exists(): - return os.path.isfile(config_file) - - -@lru_cache() # Using this to avoid loading file every time from disk -def load(): - config = configparser.ConfigParser() - config.read(config_file) - return config diff --git a/xain_fl/conftest.py b/xain_fl/conftest.py deleted file mode 100644 index fb4cda4d9..000000000 --- a/xain_fl/conftest.py +++ /dev/null @@ -1,88 +0,0 @@ -import numpy as np -import pytest -from absl import flags - -from xain_fl.types import FederatedDataset, KerasDataset - -FLAGS = flags.FLAGS - - -def pytest_collection_modifyitems(items): - for item in items: - if not any(item.iter_markers()): - item.add_marker("unmarked") - - -def pytest_runtest_setup(): - # Invoking FLAGS will make the flags usable for the - # test execution and avoid throwing an error - FLAGS( - argv=[ - "test", # some app name required - "--fetch_datasets=True", # resetting to default at beginning of every test - ] - ) - - -@pytest.fixture -def output_dir(tmpdir): - tmpdir = str(tmpdir) - FLAGS(["test", f"--output_dir={tmpdir}"]) - - return tmpdir - - -@pytest.fixture -def disable_fetch(): - FLAGS(["test", "--fetch_datasets=False"]) - - -def create_mock_keras_dataset() -> KerasDataset: - labels = np.arange(10, dtype=np.int8) - - x_train = np.ones((600, 32, 32, 3), dtype=np.int8) - y_train = np.tile(labels, 60) - assert x_train.shape[0] == y_train.shape[0] - - x_test = np.ones((100, 32, 32, 3), dtype=np.int8) - y_test = np.tile(labels, 10) - assert x_test.shape[0] == y_test.shape[0] - - return (x_train, y_train), (x_test, y_test) - - -def create_mock_federated_dataset() -> FederatedDataset: - labels = np.arange(10, dtype=np.int8) - - x_train = np.ones((540, 32, 32, 3), dtype=np.int8) - y_train = np.tile(labels, 54) - assert x_train.shape[0] == y_train.shape[0] - - xy_partitions = list( - zip( - np.split(x_train, indices_or_sections=2, axis=0), - np.split(y_train, indices_or_sections=2, axis=0), - ) - ) - - x_val = np.ones((60, 32, 32, 3), dtype=np.int8) - y_val = np.tile(labels, 6) - assert x_val.shape[0] == y_val.shape[0] - - x_test = np.ones((100, 32, 32, 3), dtype=np.int8) - y_test = np.tile(labels, 10) - assert x_test.shape[0] == y_test.shape[0] - - return xy_partitions, (x_val, y_val), (x_test, y_test) - - -@pytest.fixture -def mock_keras_dataset() -> KerasDataset: - """dataset mock after it went through internal load method""" - return create_mock_keras_dataset() - - -@pytest.fixture -def mock_federated_dataset() -> FederatedDataset: - """dataset mock after it went through internal load method""" - return create_mock_federated_dataset() diff --git a/xain_fl/coordinator/coordinator.py b/xain_fl/coordinator/coordinator.py index 45d3fb7d8..5ed828ecf 100644 --- a/xain_fl/coordinator/coordinator.py +++ b/xain_fl/coordinator/coordinator.py @@ -1,89 +1,115 @@ +"""XAIN FL Coordinator""" + from typing import Dict, List, Optional, Tuple from google.protobuf.internal.python_message import GeneratedProtocolMessageType -from numproto import ndarray_to_proto, proto_to_ndarray from numpy import ndarray +from xain_proto.fl.coordinator_pb2 import ( + EndTrainingRoundRequest, + EndTrainingRoundResponse, + HeartbeatRequest, + HeartbeatResponse, + RendezvousReply, + RendezvousRequest, + RendezvousResponse, + StartTrainingRoundRequest, + StartTrainingRoundResponse, + State, +) +from xain_proto.numproto import ndarray_to_proto, proto_to_ndarray from xain_fl.coordinator.participants import Participants from xain_fl.coordinator.round import Round -from xain_fl.cproto import coordinator_pb2 from xain_fl.fl.coordinator.aggregate import Aggregator, FederatedAveragingAgg from xain_fl.fl.coordinator.controller import Controller, RandomController -from xain_fl.logger import get_logger +from xain_fl.logger import StructLogger, get_logger from xain_fl.tools.exceptions import InvalidRequestError, UnknownParticipantError -logger = get_logger(__name__) +logger: StructLogger = get_logger(__name__) -class Coordinator: +# TODO: raise exceptions for invalid attribute values: https://xainag.atlassian.net/browse/XP-387 +class Coordinator: # pylint: disable=too-many-instance-attributes """Class implementing the main Coordinator logic. It is implemented as a state machine that reacts to received messages. The states of the Coordinator are: - STANDBY: The coordinator is in standby mode, typically when waiting for - participants to connect. In this mode the only messages that the - coordinator can receive are :class:`~.coordinator_pb2.RendezvousRequest` - and :class:`~.coordinator_pb2.HeartbeatRequest`. - ROUND: A round is currently in progress. During a round the important - messages the coordinator can receive are - :class:`~.coordinator_pb2.StartTrainingRequest` and - :class:`~.coordinator_pb2.EndTrainingRequest`. - Since participants are selected for rounds or not, they can be advertised - either ROUND or STANDBY accordingly. - FINISHED: The training session has ended and participants should - disconnect from the coordinator. - - States are exchanged during heartbeats so that both coordinators and - participants can react to each others state change. + + - ``STANDBY``: The coordinator is in standby mode, typically + when waiting for participants to connect. In this mode the + only messages that the coordinator can receive are + :class:`~.coordinator_pb2.RendezvousRequest` and + :class:`~.coordinator_pb2.HeartbeatRequest`. + + - ``ROUND``: A round is currently in progress. During a round + the important messages the coordinator can receive are + :class:`~.coordinator_pb2.StartTrainingRoundRequest` and + :class:`~.coordinator_pb2.EndTrainingRoundRequest`. Since + participants are selected for rounds or not, they can be + advertised either ROUND or STANDBY accordingly. + + - ``FINISHED``: The training session has ended and + participants should disconnect from the coordinator. + + States are exchanged during heartbeats so that both coordinators + and participants can react to each others state change. The flow of the Coordinator: + 1. The coordinator is started and waits for enough participants to join. `STANDBY`. 2. Once enough participants are connected the coordinator starts the rounds. `ROUND N`. 3. Repeat step 2. for the given number of rounds 4. The training session is over and the coordinator is ready to shutdown. `FINISHED`. Note: + :class:`~.coordinator_pb2.RendezvousRequest` is always allowed regardless of which state the coordinator is on. - Constants: - DEFAULT_AGGREGATOR (:class:`~.Aggregator`): if no Aggregator instance is provided - during initialisation, then :class:`~.FederatedAveragingAgg` in used. - DEFAULT_CONTROLLER (:class:`~.Controller`): if no Controller instance is provided - during initialisation, then :class:`~.RandomController` in used. - - Attributes: - num_rounds (:obj:`int`, optional): The number of rounds of the training - session. Defaults to 10. - minimum_participants_in_round (:obj:`int`, optional): The minimum number of - participants that participate in a round. Defaults to 1. - fraction_of_participants (:obj:`float`, optional): The fraction of total - connected participants to be selected in a single round. Defaults to 1.0, - meaning that all connected participants will be selected. - weights (:obj:`list` of :class:`~numpy.ndarray`, optional): The weights of - the global model. Defaults to []. - epochs (:obj:`int`, optional): Number of training iterations local to - Participant. Defaults to 0. - epochs_base (:obj:`int`, optional): Global number of epochs as of last - round. Defaults to 0. - aggregator: (:class:`~.Aggregator`, optional): The type of aggregation - to perform at the end of each round. Defaults to :class:`~.FederatedAveragingAgg`. - controller: (:class:`~.Controller`, optional): Controls how the Participants - are selected at the start of each round. Defaults to :class:`~.RandomController`. - """ + Args: - # pylint: disable-msg=too-many-instance-attributes - # pylint: disable-msg=dangerous-default-value + num_rounds: The number of rounds of the training session - DEFAULT_AGGREGATOR: Aggregator = FederatedAveragingAgg() - DEFAULT_CONTROLLER: Controller = RandomController(participant_ids=[]) + minimum_participants_in_round: The minimum number of + participants that participate in a round + + fraction_of_participants: The fraction of total connected + participants to be selected in a single round. Defaults to + 1.0, meaning that all connected participants will be + selected. It must be in the (0.0, 1.0] interval. + + weights: The weights of the global model. + + epochs: Number of training iterations local to Participant. + + epochs_base: Global number of epochs as of last round. - def __init__( + aggregator: The type of aggregation to perform at the end of + each round. Defaults to :class:`~.FederatedAveragingAgg`. + + controller: Controls how the Participants are selected at the + start of each round. Defaults to + :class:`~.RandomController`. + """ + + DEFAULT_AGGREGATOR: Aggregator = FederatedAveragingAgg() + """ + if no Aggregator instance is provided during initialisation, then + :class:`~.FederatedAveragingAgg` in used. + """ + + DEFAULT_CONTROLLER: Controller = RandomController() + """ + if no Controller instance is provided during initialisation, then + :class:`~.RandomController` in used. + """ + + def __init__( # pylint: disable=too-many-arguments,dangerous-default-value self, num_rounds: int = 1, minimum_participants_in_round: int = 1, fraction_of_participants: float = 1.0, - weights: List[ndarray] = [], + weights: List[ndarray] = [], # TODO: change to non-dangerous default value epochs: int = 1, epoch_base: int = 0, aggregator: Optional[Aggregator] = None, @@ -106,7 +132,7 @@ def __init__( self.round: Round = Round(self.participants.ids()) # state variables - self.state: coordinator_pb2.State = coordinator_pb2.State.STANDBY + self.state: State = State.STANDBY self.current_round: int = 0 def get_minimum_connected_participants(self) -> int: @@ -121,17 +147,24 @@ def on_message( self, message: GeneratedProtocolMessageType, participant_id: str ) -> GeneratedProtocolMessageType: """Coordinator method that implements the state machine. + Args: - message (:class:`~.GeneratedProtocolMessageType`): A protobuf message. - participant_id (:obj:`str`): The id of the participant making the request. + + message: A protobuf message. + participant_id: The id of the participant making the request. + Returns: - :class:`~.GeneratedProtocolMessageType`: The reply to be sent back to the participant. + + The response sent back to the participant. + Raises: - :class:`~UnknownParticipantError`: If it receives a request from an - unknown participant. Typically a participant that has not - rendezvous with the :class:`~.Coordinator`. - :class:`~InvalidRequestError`: If it receives a request that is not - allowed in the current :class:`~.Coordinator` state. + + UnknownParticipantError: If it receives a request from an + unknown participant. Typically a participant that has not + rendezvous with the :class:`~.Coordinator`. + + InvalidRequestError: If it receives a request that is not + allowed in the current :class:`~.Coordinator` state. """ logger.debug( "Received message from participant", @@ -142,7 +175,7 @@ def on_message( # Unless this is a RendezvousRequest the coordinator should not accept messages # from participants that have not been accepted if ( - not isinstance(message, coordinator_pb2.RendezvousRequest) + not isinstance(message, RendezvousRequest) and participant_id not in self.participants.ids() ): raise UnknownParticipantError( @@ -150,67 +183,68 @@ def on_message( "Please try to rendezvous with the coordinator before making a request." ) - # pylint: disable-msg=no-else-return - if isinstance(message, coordinator_pb2.RendezvousRequest): + if isinstance(message, RendezvousRequest): # Handle rendezvous return self._handle_rendezvous(message, participant_id) - elif isinstance(message, coordinator_pb2.HeartbeatRequest): + if isinstance(message, HeartbeatRequest): # Handle heartbeat return self._handle_heartbeat(message, participant_id) - elif isinstance(message, coordinator_pb2.StartTrainingRequest): + if isinstance(message, StartTrainingRoundRequest): # handle start training - return self._handle_start_training(message, participant_id) + return self._handle_start_training_round(message, participant_id) - elif isinstance(message, coordinator_pb2.EndTrainingRequest): + if isinstance(message, EndTrainingRoundRequest): # handle end training - return self._handle_end_training(message, participant_id) + return self._handle_end_training_round(message, participant_id) - else: - raise NotImplementedError + raise NotImplementedError def remove_participant(self, participant_id: str) -> None: """Remove a participant from the list of accepted participants. - This method is to be called when it is detected that a participant has - disconnected. - After a participant is removed, if the number of remaining participants - is less than the minimum number of participants that need to be connected, - the :class:`~.Coordinator` will transition to STANDBY state. + + This method is to be called when it is detected that a + participant has disconnected. After a participant is removed, + if the number of remaining participants is less than the + minimum number of participants that need to be connected, the + :class:`~.Coordinator` will transition to STANDBY state. + Args: - participant_id (:obj:`str`): The id of the participant to remove. + + participant_id: The id of the participant to remove. + """ self.participants.remove(participant_id) logger.info("Removing participant", participant_id=participant_id) if self.participants.len() < self.minimum_connected_participants: - self.state = coordinator_pb2.State.STANDBY + self.state = State.STANDBY def select_participant_ids_and_init_round(self) -> None: - """Initiates the Controller, selects ids and initiates a Round. + """Selects the participant ids and initiates a Round. """ - self.controller = RandomController( - participant_ids=self.participants.ids(), - fraction_of_participants=self.fraction_of_participants, - ) - selected_ids = self.controller.select_ids() + self.controller.fraction_of_participants = self.fraction_of_participants + selected_ids = self.controller.select_ids(self.participants.ids()) self.round = Round(selected_ids) def _handle_rendezvous( - self, _message: coordinator_pb2.RendezvousRequest, participant_id: str - ) -> coordinator_pb2.RendezvousReply: + self, _message: RendezvousRequest, participant_id: str + ) -> RendezvousResponse: """Handles a Rendezvous request. + Args: - _message (:class:`~.coordinator_pb2.RendezvousRequest`): The - request to handle. Currently not used. - participant_id (:obj:`str`): The id of the participant making the - request. + + _message: The request to handle. Currently not used. + participant_id: The id of the participant making the request. + Returns: - :class:`~.coordinator_pb2.RendezvousReply`: The reply to the participant. + + The response to the participant. """ if self.participants.len() < self.minimum_connected_participants: - response = coordinator_pb2.RendezvousResponse.ACCEPT + reply = RendezvousReply.ACCEPT self.participants.add(participant_id) logger.info( "Accepted participant", @@ -224,117 +258,121 @@ def _handle_rendezvous( self.select_participant_ids_and_init_round() # TODO: We may need to make this update thread safe - self.state = coordinator_pb2.State.ROUND - self.current_round = ( - 1 if self.current_round == 0 else self.current_round - ) + self.state = State.ROUND + self.current_round = 1 if self.current_round == 0 else self.current_round else: - response = coordinator_pb2.RendezvousResponse.LATER + reply = RendezvousReply.LATER logger.info( "Reject participant", participant_id=participant_id, current_participants_count=self.participants.len(), ) - return coordinator_pb2.RendezvousReply(response=response) + return RendezvousResponse(reply=reply) def _handle_heartbeat( - self, _message: coordinator_pb2.HeartbeatRequest, participant_id: str - ) -> coordinator_pb2.HeartbeatReply: + self, _message: HeartbeatRequest, participant_id: str + ) -> HeartbeatResponse: """Handles a Heartbeat request. - It checks if a participant has been selected, if it has, - returns ROUND state to them, else STANDBY. + + Responds to the participant with: + + - ``FINISHED``: if coordinator is in state FINISHED, + - ``ROUND``: if the participant is selected for the current round, + - ``STANDBY``: if the participant is not selected for the current round. + Args: - _message (:class:`~.coordinator_pb2.HeartbeatRequest`): The - request to handle. Currently not used. - participant_id (:obj:`str`): The id of the participant making the - request. + + _message: The request to handle. Currently not used. + participant_id: The id of the participant making the request. + Returns: - :class:`~.coordinator_pb2.HeartbeatReply`: The reply to the participant. + + The response to the participant. """ self.participants.update_expires(participant_id) - if participant_id in self.round.participant_ids: - state = coordinator_pb2.State.ROUND + if self.state == State.FINISHED or participant_id in self.round.participant_ids: + state = self.state else: - state = coordinator_pb2.State.STANDBY + state = State.STANDBY - # send heartbeat reply advertising the current state - return coordinator_pb2.HeartbeatReply(state=state, round=self.current_round) + # send heartbeat response advertising the current state + logger.debug( + "Heartbeat response", + participant_id=participant_id, + message=state, + round=self.current_round, + ) + return HeartbeatResponse(state=state, round=self.current_round) + + def _handle_start_training_round( + self, _message: StartTrainingRoundRequest, participant_id: str + ) -> StartTrainingRoundResponse: + """Handles a StartTrainingRound request. - def _handle_start_training( - self, _message: coordinator_pb2.StartTrainingRequest, participant_id: str - ) -> coordinator_pb2.StartTrainingReply: - """Handles a StartTraining request. Args: - _message (:class:`~.coordinator_pb2.StartTrainingRequest`): The - request to handle. Currently not used. - participant_id (:obj:`str`): The id of the participant making the - request. + _message: The request to handle. Currently not used. + participant_id: The id of the participant making the request. Returns: - :class:`~.coordinator_pb2.StartTrainingReply`: The reply to the participant. + :class:`~.coordinator_pb2.StartTrainingRoundResponse`: The response to the participant. """ - # The coordinator should only accept StartTraining requests if it is + # The coordinator should only accept StartTrainingRound requests if it is # in the ROUND state and when the participant has been selected for the round. - coordinator_not_in_a_round = self.state != coordinator_pb2.State.ROUND + coordinator_not_in_a_round = self.state != State.ROUND participant_not_selected = participant_id not in self.round.participant_ids if coordinator_not_in_a_round or participant_not_selected: raise InvalidRequestError( f"Participant {participant_id} sent a " - "StartTrainingRequest outside of a round" + "StartTrainingRoundRequest outside of a round" ) weights_proto = [ndarray_to_proto(nda) for nda in self.weights] - return coordinator_pb2.StartTrainingReply( - weights=weights_proto, epochs=self.epochs, epoch_base=self.epoch_base + return StartTrainingRoundResponse( + weights=weights_proto, epochs=self.epochs, epoch_base=self.epoch_base, ) - def _handle_end_training( - self, message: coordinator_pb2.EndTrainingRequest, participant_id: str - ) -> coordinator_pb2.EndTrainingReply: - """Handles a EndTraining request. + def _handle_end_training_round( + self, message: EndTrainingRoundRequest, participant_id: str + ) -> EndTrainingRoundResponse: + """Handles a EndTrainingRound request. + Args: - message (:class:`~.coordinator_pb2.EndTrainingRequest`): The request to handle. - participant_id (:obj:`str`): The id of the participant making the request. + + message: The request to handle. + participant_id: The id of the participant making the request. + Returns: - :class:`~.coordinator_pb2.EndTrainingReply`: The reply to the participant. + + The response to the participant. """ # TODO: Ideally we want to know for which round the participant is # submitting the updates and raise an exception if it is the wrong # round. - weights_proto, number_samples, metrics_proto = ( - message.weights, - message.number_samples, - message.metrics, - ) # record the request data weight_update: Tuple[List[ndarray], int] = ( - [proto_to_ndarray(pnda) for pnda in weights_proto], - number_samples, + [proto_to_ndarray(pnda) for pnda in message.weights], + message.number_samples, ) - metrics: Dict[str, List[ndarray]] = { - k: [proto_to_ndarray(v) for v in mv.metrics] - for k, mv in metrics_proto.items() - } + metrics: Dict[str, ndarray] = {k: proto_to_ndarray(v) for k, v in message.metrics.items()} self.round.add_updates(participant_id, weight_update, metrics) # The round is over. Run the aggregation if self.round.is_finished(): - logger.info( - "Running aggregation for round", current_round=self.current_round - ) + logger.info("Running aggregation for round", current_round=self.current_round) self.weights = self.aggregator.aggregate(self.round.get_weight_updates()) # update the round or finish the training session if self.current_round == self.num_rounds: - self.state = coordinator_pb2.State.FINISHED + logger.debug("Last round over", round=self.current_round) + self.state = State.FINISHED else: self.current_round += 1 # reinitialize the round self.select_participant_ids_and_init_round() - return coordinator_pb2.EndTrainingReply() + return EndTrainingRoundResponse() diff --git a/xain_fl/coordinator/coordinator_grpc.py b/xain_fl/coordinator/coordinator_grpc.py index b79e7cde8..07a3e5eaf 100644 --- a/xain_fl/coordinator/coordinator_grpc.py +++ b/xain_fl/coordinator/coordinator_grpc.py @@ -1,7 +1,21 @@ +"""XAIN FL gRPC Coordinator""" + import grpc +from xain_proto.fl.coordinator_pb2 import ( + EndTrainingRoundRequest, + EndTrainingRoundResponse, + HeartbeatRequest, + HeartbeatResponse, + RendezvousRequest, + RendezvousResponse, + StartTrainingRoundRequest, + StartTrainingRoundResponse, + State, +) +from xain_proto.fl.coordinator_pb2_grpc import CoordinatorServicer from xain_fl.coordinator.coordinator import Coordinator -from xain_fl.cproto import coordinator_pb2, coordinator_pb2_grpc +from xain_fl.coordinator.store import Store from xain_fl.tools.exceptions import ( DuplicatedUpdateError, InvalidRequestError, @@ -9,7 +23,7 @@ ) -class CoordinatorGrpc(coordinator_pb2_grpc.CoordinatorServicer): +class CoordinatorGrpc(CoordinatorServicer): """The Coordinator gRPC service. The main logic for the Coordinator is decoupled from gRPC and implemented in the @@ -18,16 +32,21 @@ class CoordinatorGrpc(coordinator_pb2_grpc.CoordinatorServicer): :class:`xain_fl.coordinator.coordinator.Coordinator`. Args: - coordinator (:class:`xain_fl.coordinator.coordinator.Coordinator`): The Coordinator - state machine. + + coordinator: The Coordinator state machine. + + store: The Store in which the coordinator fetches trained + models from the participants and to which it saves + aggregated models. """ - def __init__(self, coordinator: Coordinator): + def __init__(self, coordinator: Coordinator, store: Store): self.coordinator: Coordinator = coordinator + self.store: Store = store def Rendezvous( - self, request: coordinator_pb2.RendezvousRequest, context: grpc.ServicerContext - ) -> coordinator_pb2.RendezvousReply: + self, request: RendezvousRequest, context: grpc.ServicerContext + ) -> RendezvousResponse: """The Rendezvous gRPC method. A participant contacts the coordinator and the coordinator adds the @@ -35,111 +54,124 @@ def Rendezvous( all the participants it tells the participant to try again later. Args: - request (:class:`~.coordinator_pb2.RendezvousRequest`): The participant's request. - context (:class:`~grpc.ServicerContext`): The context associated with the gRPC request. + + request: The participant's request. + context: The context associated with the gRPC request. Returns: - :class:`~.coordinator_pb2.RendezvousReply`: The reply to the - participant's request. The reply is an enum containing either: - ACCEPT: If the :class:`xain_fl.coordinator.coordinator.Coordinator` - does not have enough participants. - LATER: If the :class:`xain_fl.coordinator.coordinator.Coordinator` + The response to the participant's request. The response is + an enum containing either: + + - `ACCEPT`: If the + :class:`xain_fl.coordinator.coordinator.Coordinator` + does not have enough participants. + + - `LATER`: If the + :class:`xain_fl.coordinator.coordinator.Coordinator` already has enough participants. """ return self.coordinator.on_message(request, context.peer()) def Heartbeat( - self, request: coordinator_pb2.HeartbeatRequest, context: grpc.ServicerContext - ) -> coordinator_pb2.HeartbeatReply: + self, request: HeartbeatRequest, context: grpc.ServicerContext + ) -> HeartbeatResponse: """The Heartbeat gRPC method. Participants periodically send an heartbeat so that the :class:`Coordinator` can detect failures. Args: - request (:class:`~.coordinator_pb2.HeartbeatRequest`): The - participant's request. The participant's request contains the - current :class:`~.coordinator_pb2.State` and round number the + + request: The participant's request. The participant's + request contains the current + :class:`~.coordinator_pb2.State` and round number the participant is on. - context (:class:`~grpc.ServicerContext`): The context associated - with the gRPC request. + + context: The context associated with the gRPC request. Returns: - :class:`~.coordinator_pb2.HeartbeatReply`: The reply to the - participant's request. The reply contains both the - :class:`~.coordinator_pb2.State` and the current round the - coordinator is on. If a training session has not started yet the - round number defaults to 0. + + The response to the participant's request. The response + contains both the :class:`~.coordinator_pb2.State` and the + current round the coordinator is on. If a training session + has not started yet the round number defaults to 0. """ try: return self.coordinator.on_message(request, context.peer()) except UnknownParticipantError as error: context.set_details(str(error)) context.set_code(grpc.StatusCode.PERMISSION_DENIED) - return coordinator_pb2.HeartbeatReply() + return HeartbeatResponse() - def StartTraining( - self, - request: coordinator_pb2.StartTrainingRequest, - context: grpc.ServicerContext, - ) -> coordinator_pb2.StartTrainingReply: - """The StartTraining gRPC method. + def StartTrainingRound( + self, request: StartTrainingRoundRequest, context: grpc.ServicerContext, + ) -> StartTrainingRoundResponse: + """The StartTrainingRound gRPC method. Once a participant is notified that the :class:`xain_fl.coordinator.coordinator.Coordinator` is in a round (through the state advertised in the - :class:`~.coordinator_pb2.HeartbeatReply`), the participant should call this + :class:`~.coordinator_pb2.HeartbeatResponse`), the participant should call this method in order to get the global model weights in order to start the training for the round. Args: - request (:class:`~.coordinator_pb2.StartTrainingRequest`): The participant's request. - context (:class:`~grpc.ServicerContext`): The context associated with the gRPC request. + + request: The participant's request. + context: The context associated with the gRPC request. Returns: - :class:`~.coordinator_pb2.StartTrainingReply`: The reply to the - participant's request. The reply contains the global model weights. - """ + + The response to the participant's request. The response + contains the global model weights. + """ try: return self.coordinator.on_message(request, context.peer()) except UnknownParticipantError as error: context.set_details(str(error)) context.set_code(grpc.StatusCode.PERMISSION_DENIED) - return coordinator_pb2.StartTrainingReply() + return StartTrainingRoundResponse() except InvalidRequestError as error: context.set_details(str(error)) context.set_Code(grpc.StatusCode.FAILED_PRECONDITION) - return coordinator_pb2.StartTrainingReply() + return StartTrainingRoundResponse() - def EndTraining( - self, request: coordinator_pb2.EndTrainingRequest, context: grpc.ServicerContext - ) -> coordinator_pb2.EndTrainingReply: - """The EndTraining gRPC method. + def EndTrainingRound( + self, request: EndTrainingRoundRequest, context: grpc.ServicerContext + ) -> EndTrainingRoundResponse: + """The EndTrainingRound gRPC method. Once a participant has finished the training for the round it calls this method in order to submit to the :class:`xain_fl.coordinator.coordinator.Coordinator` the updated weights. Args: - request (:class:`~.coordinator_pb2.EndTrainingRequest`): The - participant's request. The request contains the updated weights as - a result of the training as well as any metrics helpful for the + + request: The participant's request. The request contains + the updated weights as a result of the training as + well as any metrics helpful for the :class:`xain_fl.coordinator.coordinator.Coordinator`. - context (:class:`~grpc.ServicerContext`): The context associated with the gRPC request. + + context: The context associated with the gRPC request. Returns: - :class:`~.coordinator_pb2.EndTrainingReply`: The reply to the - participant's request. The reply is just an acknowledgment that - the :class:`xain_fl.coordinator.coordinator.Coordinator` successfully received - the updated weights. + + The response to the participant's request. The response is + just an acknowledgment that the + :class:`xain_fl.coordinator.coordinator.Coordinator` + successfully received the updated weights. """ try: - return self.coordinator.on_message(request, context.peer()) + response = self.coordinator.on_message(request, context.peer()) except DuplicatedUpdateError as error: context.set_details(str(error)) context.set_code(grpc.StatusCode.ALREADY_EXISTS) - return coordinator_pb2.EndTrainingReply() + return EndTrainingRoundResponse() except UnknownParticipantError as error: context.set_details(str(error)) context.set_code(grpc.StatusCode.PERMISSION_DENIED) - return coordinator_pb2.EndTrainingReply() + return EndTrainingRoundResponse() + + if self.coordinator.state == State.FINISHED: + self.store.write_weights(self.coordinator.current_round, self.coordinator.weights) + return response diff --git a/xain_fl/coordinator/heartbeat.py b/xain_fl/coordinator/heartbeat.py index 93d39b760..b50ff6d4b 100644 --- a/xain_fl/coordinator/heartbeat.py +++ b/xain_fl/coordinator/heartbeat.py @@ -1,29 +1,31 @@ +"""XAIN FL Hearbeats""" + import threading import time from typing import List from xain_fl.coordinator.coordinator import Coordinator -from xain_fl.logger import get_logger +from xain_fl.logger import StructLogger, get_logger -logger = get_logger(__name__) +logger: StructLogger = get_logger(__name__) -def monitor_heartbeats( - coordinator: Coordinator, terminate_event: threading.Event -) -> None: +def monitor_heartbeats(coordinator: Coordinator, terminate_event: threading.Event) -> None: """Monitors the heartbeat of participants. If a heartbeat expires the participant is removed from the :class:`~.Participants`. Note: + This is meant to be run inside a thread and expects an :class:`~threading.Event`, to know when it should terminate. Args: - coordinator (:class:`xain_fl.coordinator.coordinator.Coordinator`): The coordinator - to monitor for heartbeats. - terminate_event (:class:`~threading.Event`): A threading event to signal - that this method should terminate. + + coordinator: The coordinator to monitor for heartbeats. + + terminate_event: A threading event to signal that this method + should terminate. """ logger.info("Heartbeat monitor starting...") diff --git a/xain_fl/coordinator/participants.py b/xain_fl/coordinator/participants.py index 71652e609..ac4fe5cd2 100644 --- a/xain_fl/coordinator/participants.py +++ b/xain_fl/coordinator/participants.py @@ -1,3 +1,5 @@ +"""XAIN FL Participants""" + import threading import time from typing import Dict, List @@ -5,15 +7,16 @@ from xain_fl.coordinator import HEARTBEAT_TIME, HEARTBEAT_TIMEOUT -class ParticipantContext: +class ParticipantContext: # pylint: disable=too-few-public-methods """Class to store state about each participant. Currently it only stores the `participant_id` and the time when the next heartbeat_expires. In the future we may store more information like in what state a participant is in e.g. - IDLE, RUNNING, ... + `IDLE`, `RUNNING`, ... + + Args: - Attributes: - participant_id (:obj:`str`): The id of the participant. Typically a + participant_id: The id of the participant. Typically a host:port or public key when using SSL. """ @@ -36,7 +39,8 @@ def add(self, participant_id: str) -> None: """Adds a new participant to the list of participants. Args: - participant_id (:obj:`str`): The id of the participant to add. + + participant_id: The id of the participant to add. """ with self._lock: @@ -45,10 +49,12 @@ def add(self, participant_id: str) -> None: def remove(self, participant_id: str) -> None: """Removes a participant from the list of participants. - This will be typically used after a participant is disconnected from the coordinator. + This will be typically used after a participant is + disconnected from the coordinator. Args: - participant_id (:obj:`str`): The id of the participant to remove. + + participant_id: The id of the participant to remove. """ with self._lock: @@ -62,7 +68,8 @@ def next_expiration(self) -> float: the next check. Returns: - :obj:`float`: The next heartbeat to expire. + + The next heartbeat to expire. """ with self._lock: @@ -75,7 +82,8 @@ def len(self) -> int: """Get the number of participants. Returns: - :obj:`int`: The number of participants in the list. + + The number of participants in the list. """ with self._lock: @@ -85,7 +93,8 @@ def ids(self) -> List[str]: """Get the ids of the participants. Returns: - :obj:`list` of :obj:`str`: The list of participant ids. + + The list of participant ids. """ with self._lock: @@ -98,7 +107,8 @@ def update_expires(self, participant_id: str) -> None: every time a participant sends a heartbeat. Args: - participant_id (:obj:`str`): The id of the participant to update the expire time. + + participant_id: The id of the participant to update the expire time. """ with self._lock: diff --git a/xain_fl/coordinator/round.py b/xain_fl/coordinator/round.py index 3cb7b8731..cf80bc16b 100644 --- a/xain_fl/coordinator/round.py +++ b/xain_fl/coordinator/round.py @@ -1,3 +1,5 @@ +"""XAIN FL Rounds""" + from typing import Dict, List, Tuple from numpy import ndarray @@ -11,9 +13,10 @@ class Round: participants during a round and does some sanity checks like preventing the same participant to submit multiple updates during a single round. - Attributes: - participant_ids(:obj:`list` of :obj:`str`): The list of IDs of the participants - selected to participate in this round. + Args: + + participant_ids: The list of IDs of the participants selected + to participate in this round. """ def __init__(self, participant_ids: List[str]) -> None: @@ -24,18 +27,21 @@ def add_updates( self, participant_id: str, weight_update: Tuple[List[ndarray], int], - metrics: Dict[str, List[ndarray]], + metrics: Dict[str, ndarray], ) -> None: """Valid a participant's update for the round. Args: - participant_id (:obj:`str`): The id of the participant making the request. - weight_update (:obj:`tuple` of :obj:`list` of :class:`~numpy.ndarray`): - A tuple containing a list of updated weights. - metrics (:obj:`dict`): A dictionary containing metrics with the name and the value - as list of ndarrays. + + participant_id: The id of the participant making the request. + + weight_update: A tuple containing a list of updated weights. + + metrics: A dictionary containing metrics with the name and + the value as list of ndarrays. Raises: + DuplicatedUpdateError: If the participant already submitted his update this round. """ @@ -54,8 +60,9 @@ def is_finished(self) -> bool: If all participants submitted their updates the round is considered finished. Returns: - :obj:`bool`:: :obj:`True` if all participants submitted their - updates this round. :obj:`False` otherwise. + + `True` if all participants submitted their updates this + round. `False` otherwise. """ return len(self.updates) == len(self.participant_ids) @@ -64,7 +71,7 @@ def get_weight_updates(self) -> List[Tuple[List[ndarray], int]]: This list will usually be used by the aggregation function. Returns: - :obj:`list` of :obj:`tuple`: The list of weight updates from all - participants. + + The list of weight updates from all participants. """ return [v["weight_update"] for k, v in self.updates.items()] diff --git a/xain_fl/coordinator/store.py b/xain_fl/coordinator/store.py new file mode 100644 index 000000000..564dae44e --- /dev/null +++ b/xain_fl/coordinator/store.py @@ -0,0 +1,43 @@ +# pylint: disable=missing-docstring +from io import BytesIO +import pickle + +import boto3 +from numpy import ndarray + + +# pylint: disable=too-few-public-methods +class StoreConfig: + def __init__( + self, endpoint_url: str, access_key_id: str, secret_access_key: str, bucket: str, + ): + self.endpoint_url = endpoint_url + self.access_key_id = access_key_id + self.secret_access_key = secret_access_key + self.bucket = bucket + + +class Store: + def __init__(self, config: StoreConfig): + self.config = config + # pylint: disable=invalid-name + self.s3 = boto3.resource( + "s3", + endpoint_url=self.config.endpoint_url, + aws_access_key_id=self.config.access_key_id, + aws_secret_access_key=self.config.secret_access_key, + # FIXME: not sure what this should be for now + region_name="dummy", + ) + + def write_weights(self, round: int, weights: ndarray): + bucket = self.s3.Bucket(self.config.bucket) + bucket.put_object(Body=pickle.dumps(weights), Key=str(round)) + + def read_weights(self, round: int) -> ndarray: + bucket = self.s3.Bucket(self.config.bucket) + data = BytesIO() + bucket.download_fileobj(str(round), data) + # FIXME: not sure whether getvalue() copies the data. If so we + # should probably prefer getbuffer() instead. + return pickle.loads(data.getvalue()) diff --git a/xain_fl/cproto/__init__.py b/xain_fl/cproto/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/xain_fl/cproto/conftest.py b/xain_fl/cproto/conftest.py deleted file mode 100644 index bb7dfd2f3..000000000 --- a/xain_fl/cproto/conftest.py +++ /dev/null @@ -1,43 +0,0 @@ -from concurrent import futures - -import grpc -import pytest - -from xain_fl.coordinator.coordinator import Coordinator -from xain_fl.coordinator.coordinator_grpc import CoordinatorGrpc -from xain_fl.cproto import coordinator_pb2_grpc, hellonumproto_pb2_grpc -from xain_fl.cproto.numproto_server import NumProtoServer - - -@pytest.fixture -def greeter_server(): - server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) - hellonumproto_pb2_grpc.add_NumProtoServerServicer_to_server( - NumProtoServer(), server - ) - server.add_insecure_port("localhost:50051") - server.start() - yield - server.stop(0) - - -@pytest.fixture -def coordinator_service(): - server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) - coordinator = Coordinator( - minimum_participants_in_round=10, fraction_of_participants=1.0 - ) - coordinator_grpc = CoordinatorGrpc(coordinator) - coordinator_pb2_grpc.add_CoordinatorServicer_to_server(coordinator_grpc, server) - server.add_insecure_port("localhost:50051") - server.start() - yield coordinator_grpc - server.stop(0) - - -@pytest.fixture -def participant_stub(): - channel = grpc.insecure_channel("localhost:50051") - stub = coordinator_pb2_grpc.CoordinatorStub(channel) - - return stub diff --git a/xain_fl/cproto/coordinator_pb2.py b/xain_fl/cproto/coordinator_pb2.py deleted file mode 100644 index 88f88c3df..000000000 --- a/xain_fl/cproto/coordinator_pb2.py +++ /dev/null @@ -1,579 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: xain_fl/cproto/coordinator.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from numproto.protobuf import ndarray_pb2 as numproto_dot_protobuf_dot_ndarray__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='xain_fl/cproto/coordinator.proto', - package='xain.protobuf.coordinator', - syntax='proto3', - serialized_options=None, - serialized_pb=_b('\n xain_fl/cproto/coordinator.proto\x12\x19xain.protobuf.coordinator\x1a\x1fnumproto/protobuf/ndarray.proto\"\x13\n\x11RendezvousRequest\"R\n\x0fRendezvousReply\x12?\n\x08response\x18\x01 \x01(\x0e\x32-.xain.protobuf.coordinator.RendezvousResponse\"R\n\x10HeartbeatRequest\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .xain.protobuf.coordinator.State\x12\r\n\x05round\x18\x02 \x01(\x05\"P\n\x0eHeartbeatReply\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .xain.protobuf.coordinator.State\x12\r\n\x05round\x18\x02 \x01(\x05\"\x16\n\x14StartTrainingRequest\"e\n\x12StartTrainingReply\x12+\n\x07weights\x18\x01 \x03(\x0b\x32\x1a.numproto.protobuf.NDArray\x12\x0e\n\x06\x65pochs\x18\x02 \x01(\x05\x12\x12\n\nepoch_base\x18\x03 \x01(\x05\"\xc5\x02\n\x12\x45ndTrainingRequest\x12+\n\x07weights\x18\x01 \x03(\x0b\x32\x1a.numproto.protobuf.NDArray\x12\x16\n\x0enumber_samples\x18\x02 \x01(\x05\x12K\n\x07metrics\x18\x03 \x03(\x0b\x32:.xain.protobuf.coordinator.EndTrainingRequest.MetricsEntry\x1a\x65\n\x0cMetricsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x44\n\x05value\x18\x02 \x01(\x0b\x32\x35.xain.protobuf.coordinator.EndTrainingRequest.Metrics:\x02\x38\x01\x1a\x36\n\x07Metrics\x12+\n\x07metrics\x18\x01 \x03(\x0b\x32\x1a.numproto.protobuf.NDArray\"\x12\n\x10\x45ndTrainingReply*+\n\x12RendezvousResponse\x12\n\n\x06\x41\x43\x43\x45PT\x10\x00\x12\t\n\x05LATER\x10\x01*F\n\x05State\x12\x0b\n\x07STANDBY\x10\x00\x12\t\n\x05ROUND\x10\x01\x12\x0c\n\x08\x46INISHED\x10\x02\x12\t\n\x05READY\x10\x03\x12\x0c\n\x08TRAINING\x10\x04\x32\xbe\x03\n\x0b\x43oordinator\x12h\n\nRendezvous\x12,.xain.protobuf.coordinator.RendezvousRequest\x1a*.xain.protobuf.coordinator.RendezvousReply\"\x00\x12\x65\n\tHeartbeat\x12+.xain.protobuf.coordinator.HeartbeatRequest\x1a).xain.protobuf.coordinator.HeartbeatReply\"\x00\x12q\n\rStartTraining\x12/.xain.protobuf.coordinator.StartTrainingRequest\x1a-.xain.protobuf.coordinator.StartTrainingReply\"\x00\x12k\n\x0b\x45ndTraining\x12-.xain.protobuf.coordinator.EndTrainingRequest\x1a+.xain.protobuf.coordinator.EndTrainingReply\"\x00\x62\x06proto3') - , - dependencies=[numproto_dot_protobuf_dot_ndarray__pb2.DESCRIPTOR,]) - -_RENDEZVOUSRESPONSE = _descriptor.EnumDescriptor( - name='RendezvousResponse', - full_name='xain.protobuf.coordinator.RendezvousResponse', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='ACCEPT', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LATER', index=1, number=1, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=842, - serialized_end=885, -) -_sym_db.RegisterEnumDescriptor(_RENDEZVOUSRESPONSE) - -RendezvousResponse = enum_type_wrapper.EnumTypeWrapper(_RENDEZVOUSRESPONSE) -_STATE = _descriptor.EnumDescriptor( - name='State', - full_name='xain.protobuf.coordinator.State', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='STANDBY', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ROUND', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='FINISHED', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='READY', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TRAINING', index=4, number=4, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=887, - serialized_end=957, -) -_sym_db.RegisterEnumDescriptor(_STATE) - -State = enum_type_wrapper.EnumTypeWrapper(_STATE) -ACCEPT = 0 -LATER = 1 -STANDBY = 0 -ROUND = 1 -FINISHED = 2 -READY = 3 -TRAINING = 4 - - - -_RENDEZVOUSREQUEST = _descriptor.Descriptor( - name='RendezvousRequest', - full_name='xain.protobuf.coordinator.RendezvousRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=96, - serialized_end=115, -) - - -_RENDEZVOUSREPLY = _descriptor.Descriptor( - name='RendezvousReply', - full_name='xain.protobuf.coordinator.RendezvousReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='response', full_name='xain.protobuf.coordinator.RendezvousReply.response', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=117, - serialized_end=199, -) - - -_HEARTBEATREQUEST = _descriptor.Descriptor( - name='HeartbeatRequest', - full_name='xain.protobuf.coordinator.HeartbeatRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='state', full_name='xain.protobuf.coordinator.HeartbeatRequest.state', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='round', full_name='xain.protobuf.coordinator.HeartbeatRequest.round', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=201, - serialized_end=283, -) - - -_HEARTBEATREPLY = _descriptor.Descriptor( - name='HeartbeatReply', - full_name='xain.protobuf.coordinator.HeartbeatReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='state', full_name='xain.protobuf.coordinator.HeartbeatReply.state', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='round', full_name='xain.protobuf.coordinator.HeartbeatReply.round', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=285, - serialized_end=365, -) - - -_STARTTRAININGREQUEST = _descriptor.Descriptor( - name='StartTrainingRequest', - full_name='xain.protobuf.coordinator.StartTrainingRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=367, - serialized_end=389, -) - - -_STARTTRAININGREPLY = _descriptor.Descriptor( - name='StartTrainingReply', - full_name='xain.protobuf.coordinator.StartTrainingReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='weights', full_name='xain.protobuf.coordinator.StartTrainingReply.weights', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='epochs', full_name='xain.protobuf.coordinator.StartTrainingReply.epochs', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='epoch_base', full_name='xain.protobuf.coordinator.StartTrainingReply.epoch_base', index=2, - number=3, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=391, - serialized_end=492, -) - - -_ENDTRAININGREQUEST_METRICSENTRY = _descriptor.Descriptor( - name='MetricsEntry', - full_name='xain.protobuf.coordinator.EndTrainingRequest.MetricsEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='xain.protobuf.coordinator.EndTrainingRequest.MetricsEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='xain.protobuf.coordinator.EndTrainingRequest.MetricsEntry.value', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=_b('8\001'), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=663, - serialized_end=764, -) - -_ENDTRAININGREQUEST_METRICS = _descriptor.Descriptor( - name='Metrics', - full_name='xain.protobuf.coordinator.EndTrainingRequest.Metrics', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='metrics', full_name='xain.protobuf.coordinator.EndTrainingRequest.Metrics.metrics', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=766, - serialized_end=820, -) - -_ENDTRAININGREQUEST = _descriptor.Descriptor( - name='EndTrainingRequest', - full_name='xain.protobuf.coordinator.EndTrainingRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='weights', full_name='xain.protobuf.coordinator.EndTrainingRequest.weights', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='number_samples', full_name='xain.protobuf.coordinator.EndTrainingRequest.number_samples', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='metrics', full_name='xain.protobuf.coordinator.EndTrainingRequest.metrics', index=2, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_ENDTRAININGREQUEST_METRICSENTRY, _ENDTRAININGREQUEST_METRICS, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=495, - serialized_end=820, -) - - -_ENDTRAININGREPLY = _descriptor.Descriptor( - name='EndTrainingReply', - full_name='xain.protobuf.coordinator.EndTrainingReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=822, - serialized_end=840, -) - -_RENDEZVOUSREPLY.fields_by_name['response'].enum_type = _RENDEZVOUSRESPONSE -_HEARTBEATREQUEST.fields_by_name['state'].enum_type = _STATE -_HEARTBEATREPLY.fields_by_name['state'].enum_type = _STATE -_STARTTRAININGREPLY.fields_by_name['weights'].message_type = numproto_dot_protobuf_dot_ndarray__pb2._NDARRAY -_ENDTRAININGREQUEST_METRICSENTRY.fields_by_name['value'].message_type = _ENDTRAININGREQUEST_METRICS -_ENDTRAININGREQUEST_METRICSENTRY.containing_type = _ENDTRAININGREQUEST -_ENDTRAININGREQUEST_METRICS.fields_by_name['metrics'].message_type = numproto_dot_protobuf_dot_ndarray__pb2._NDARRAY -_ENDTRAININGREQUEST_METRICS.containing_type = _ENDTRAININGREQUEST -_ENDTRAININGREQUEST.fields_by_name['weights'].message_type = numproto_dot_protobuf_dot_ndarray__pb2._NDARRAY -_ENDTRAININGREQUEST.fields_by_name['metrics'].message_type = _ENDTRAININGREQUEST_METRICSENTRY -DESCRIPTOR.message_types_by_name['RendezvousRequest'] = _RENDEZVOUSREQUEST -DESCRIPTOR.message_types_by_name['RendezvousReply'] = _RENDEZVOUSREPLY -DESCRIPTOR.message_types_by_name['HeartbeatRequest'] = _HEARTBEATREQUEST -DESCRIPTOR.message_types_by_name['HeartbeatReply'] = _HEARTBEATREPLY -DESCRIPTOR.message_types_by_name['StartTrainingRequest'] = _STARTTRAININGREQUEST -DESCRIPTOR.message_types_by_name['StartTrainingReply'] = _STARTTRAININGREPLY -DESCRIPTOR.message_types_by_name['EndTrainingRequest'] = _ENDTRAININGREQUEST -DESCRIPTOR.message_types_by_name['EndTrainingReply'] = _ENDTRAININGREPLY -DESCRIPTOR.enum_types_by_name['RendezvousResponse'] = _RENDEZVOUSRESPONSE -DESCRIPTOR.enum_types_by_name['State'] = _STATE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -RendezvousRequest = _reflection.GeneratedProtocolMessageType('RendezvousRequest', (_message.Message,), { - 'DESCRIPTOR' : _RENDEZVOUSREQUEST, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.RendezvousRequest) - }) -_sym_db.RegisterMessage(RendezvousRequest) - -RendezvousReply = _reflection.GeneratedProtocolMessageType('RendezvousReply', (_message.Message,), { - 'DESCRIPTOR' : _RENDEZVOUSREPLY, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.RendezvousReply) - }) -_sym_db.RegisterMessage(RendezvousReply) - -HeartbeatRequest = _reflection.GeneratedProtocolMessageType('HeartbeatRequest', (_message.Message,), { - 'DESCRIPTOR' : _HEARTBEATREQUEST, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.HeartbeatRequest) - }) -_sym_db.RegisterMessage(HeartbeatRequest) - -HeartbeatReply = _reflection.GeneratedProtocolMessageType('HeartbeatReply', (_message.Message,), { - 'DESCRIPTOR' : _HEARTBEATREPLY, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.HeartbeatReply) - }) -_sym_db.RegisterMessage(HeartbeatReply) - -StartTrainingRequest = _reflection.GeneratedProtocolMessageType('StartTrainingRequest', (_message.Message,), { - 'DESCRIPTOR' : _STARTTRAININGREQUEST, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.StartTrainingRequest) - }) -_sym_db.RegisterMessage(StartTrainingRequest) - -StartTrainingReply = _reflection.GeneratedProtocolMessageType('StartTrainingReply', (_message.Message,), { - 'DESCRIPTOR' : _STARTTRAININGREPLY, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.StartTrainingReply) - }) -_sym_db.RegisterMessage(StartTrainingReply) - -EndTrainingRequest = _reflection.GeneratedProtocolMessageType('EndTrainingRequest', (_message.Message,), { - - 'MetricsEntry' : _reflection.GeneratedProtocolMessageType('MetricsEntry', (_message.Message,), { - 'DESCRIPTOR' : _ENDTRAININGREQUEST_METRICSENTRY, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.EndTrainingRequest.MetricsEntry) - }) - , - - 'Metrics' : _reflection.GeneratedProtocolMessageType('Metrics', (_message.Message,), { - 'DESCRIPTOR' : _ENDTRAININGREQUEST_METRICS, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.EndTrainingRequest.Metrics) - }) - , - 'DESCRIPTOR' : _ENDTRAININGREQUEST, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.EndTrainingRequest) - }) -_sym_db.RegisterMessage(EndTrainingRequest) -_sym_db.RegisterMessage(EndTrainingRequest.MetricsEntry) -_sym_db.RegisterMessage(EndTrainingRequest.Metrics) - -EndTrainingReply = _reflection.GeneratedProtocolMessageType('EndTrainingReply', (_message.Message,), { - 'DESCRIPTOR' : _ENDTRAININGREPLY, - '__module__' : 'xain_fl.cproto.coordinator_pb2' - # @@protoc_insertion_point(class_scope:xain.protobuf.coordinator.EndTrainingReply) - }) -_sym_db.RegisterMessage(EndTrainingReply) - - -_ENDTRAININGREQUEST_METRICSENTRY._options = None - -_COORDINATOR = _descriptor.ServiceDescriptor( - name='Coordinator', - full_name='xain.protobuf.coordinator.Coordinator', - file=DESCRIPTOR, - index=0, - serialized_options=None, - serialized_start=960, - serialized_end=1406, - methods=[ - _descriptor.MethodDescriptor( - name='Rendezvous', - full_name='xain.protobuf.coordinator.Coordinator.Rendezvous', - index=0, - containing_service=None, - input_type=_RENDEZVOUSREQUEST, - output_type=_RENDEZVOUSREPLY, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name='Heartbeat', - full_name='xain.protobuf.coordinator.Coordinator.Heartbeat', - index=1, - containing_service=None, - input_type=_HEARTBEATREQUEST, - output_type=_HEARTBEATREPLY, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name='StartTraining', - full_name='xain.protobuf.coordinator.Coordinator.StartTraining', - index=2, - containing_service=None, - input_type=_STARTTRAININGREQUEST, - output_type=_STARTTRAININGREPLY, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name='EndTraining', - full_name='xain.protobuf.coordinator.Coordinator.EndTraining', - index=3, - containing_service=None, - input_type=_ENDTRAININGREQUEST, - output_type=_ENDTRAININGREPLY, - serialized_options=None, - ), -]) -_sym_db.RegisterServiceDescriptor(_COORDINATOR) - -DESCRIPTOR.services_by_name['Coordinator'] = _COORDINATOR - -# @@protoc_insertion_point(module_scope) diff --git a/xain_fl/cproto/coordinator_pb2.pyi b/xain_fl/cproto/coordinator_pb2.pyi deleted file mode 100644 index 248f8541b..000000000 --- a/xain_fl/cproto/coordinator_pb2.pyi +++ /dev/null @@ -1,249 +0,0 @@ -# @generated by generate_proto_mypy_stubs.py. Do not edit! -import sys -from google.protobuf.descriptor import ( - Descriptor as google___protobuf___descriptor___Descriptor, - EnumDescriptor as google___protobuf___descriptor___EnumDescriptor, -) - -from google.protobuf.internal.containers import ( - RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer, -) - -from google.protobuf.message import ( - Message as google___protobuf___message___Message, -) - -from numproto.protobuf.ndarray_pb2 import ( - NDArray as numproto___protobuf___ndarray_pb2___NDArray, -) - -from typing import ( - Iterable as typing___Iterable, - List as typing___List, - Mapping as typing___Mapping, - MutableMapping as typing___MutableMapping, - Optional as typing___Optional, - Text as typing___Text, - Tuple as typing___Tuple, - cast as typing___cast, -) - -from typing_extensions import ( - Literal as typing_extensions___Literal, -) - - -class RendezvousResponse(int): - DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ... - @classmethod - def Name(cls, number: int) -> str: ... - @classmethod - def Value(cls, name: str) -> RendezvousResponse: ... - @classmethod - def keys(cls) -> typing___List[str]: ... - @classmethod - def values(cls) -> typing___List[RendezvousResponse]: ... - @classmethod - def items(cls) -> typing___List[typing___Tuple[str, RendezvousResponse]]: ... - ACCEPT = typing___cast(RendezvousResponse, 0) - LATER = typing___cast(RendezvousResponse, 1) -ACCEPT = typing___cast(RendezvousResponse, 0) -LATER = typing___cast(RendezvousResponse, 1) - -class State(int): - DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ... - @classmethod - def Name(cls, number: int) -> str: ... - @classmethod - def Value(cls, name: str) -> State: ... - @classmethod - def keys(cls) -> typing___List[str]: ... - @classmethod - def values(cls) -> typing___List[State]: ... - @classmethod - def items(cls) -> typing___List[typing___Tuple[str, State]]: ... - STANDBY = typing___cast(State, 0) - ROUND = typing___cast(State, 1) - FINISHED = typing___cast(State, 2) - READY = typing___cast(State, 3) - TRAINING = typing___cast(State, 4) -STANDBY = typing___cast(State, 0) -ROUND = typing___cast(State, 1) -FINISHED = typing___cast(State, 2) -READY = typing___cast(State, 3) -TRAINING = typing___cast(State, 4) - -class RendezvousRequest(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - - def __init__(self, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> RendezvousRequest: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - -class RendezvousReply(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - response = ... # type: RendezvousResponse - - def __init__(self, - *, - response : typing___Optional[RendezvousResponse] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> RendezvousReply: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def ClearField(self, field_name: typing_extensions___Literal[u"response"]) -> None: ... - else: - def ClearField(self, field_name: typing_extensions___Literal[u"response",b"response"]) -> None: ... - -class HeartbeatRequest(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - state = ... # type: State - round = ... # type: int - - def __init__(self, - *, - state : typing___Optional[State] = None, - round : typing___Optional[int] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> HeartbeatRequest: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def ClearField(self, field_name: typing_extensions___Literal[u"round",u"state"]) -> None: ... - else: - def ClearField(self, field_name: typing_extensions___Literal[u"round",b"round",u"state",b"state"]) -> None: ... - -class HeartbeatReply(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - state = ... # type: State - round = ... # type: int - - def __init__(self, - *, - state : typing___Optional[State] = None, - round : typing___Optional[int] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> HeartbeatReply: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def ClearField(self, field_name: typing_extensions___Literal[u"round",u"state"]) -> None: ... - else: - def ClearField(self, field_name: typing_extensions___Literal[u"round",b"round",u"state",b"state"]) -> None: ... - -class StartTrainingRequest(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - - def __init__(self, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> StartTrainingRequest: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - -class StartTrainingReply(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - epochs = ... # type: int - epoch_base = ... # type: int - - @property - def weights(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[numproto___protobuf___ndarray_pb2___NDArray]: ... - - def __init__(self, - *, - weights : typing___Optional[typing___Iterable[numproto___protobuf___ndarray_pb2___NDArray]] = None, - epochs : typing___Optional[int] = None, - epoch_base : typing___Optional[int] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> StartTrainingReply: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def ClearField(self, field_name: typing_extensions___Literal[u"epoch_base",u"epochs",u"weights"]) -> None: ... - else: - def ClearField(self, field_name: typing_extensions___Literal[u"epoch_base",b"epoch_base",u"epochs",b"epochs",u"weights",b"weights"]) -> None: ... - -class EndTrainingRequest(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - class MetricsEntry(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - key = ... # type: typing___Text - - @property - def value(self) -> EndTrainingRequest.Metrics: ... - - def __init__(self, - *, - key : typing___Optional[typing___Text] = None, - value : typing___Optional[EndTrainingRequest.Metrics] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> EndTrainingRequest.MetricsEntry: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def HasField(self, field_name: typing_extensions___Literal[u"value"]) -> bool: ... - def ClearField(self, field_name: typing_extensions___Literal[u"key",u"value"]) -> None: ... - else: - def HasField(self, field_name: typing_extensions___Literal[u"value",b"value"]) -> bool: ... - def ClearField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> None: ... - - class Metrics(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - - @property - def metrics(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[numproto___protobuf___ndarray_pb2___NDArray]: ... - - def __init__(self, - *, - metrics : typing___Optional[typing___Iterable[numproto___protobuf___ndarray_pb2___NDArray]] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> EndTrainingRequest.Metrics: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def ClearField(self, field_name: typing_extensions___Literal[u"metrics"]) -> None: ... - else: - def ClearField(self, field_name: typing_extensions___Literal[u"metrics",b"metrics"]) -> None: ... - - number_samples = ... # type: int - - @property - def weights(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[numproto___protobuf___ndarray_pb2___NDArray]: ... - - @property - def metrics(self) -> typing___MutableMapping[typing___Text, EndTrainingRequest.Metrics]: ... - - def __init__(self, - *, - weights : typing___Optional[typing___Iterable[numproto___protobuf___ndarray_pb2___NDArray]] = None, - number_samples : typing___Optional[int] = None, - metrics : typing___Optional[typing___Mapping[typing___Text, EndTrainingRequest.Metrics]] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> EndTrainingRequest: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def ClearField(self, field_name: typing_extensions___Literal[u"metrics",u"number_samples",u"weights"]) -> None: ... - else: - def ClearField(self, field_name: typing_extensions___Literal[u"metrics",b"metrics",u"number_samples",b"number_samples",u"weights",b"weights"]) -> None: ... - -class EndTrainingReply(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - - def __init__(self, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> EndTrainingReply: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... diff --git a/xain_fl/cproto/coordinator_pb2_grpc.py b/xain_fl/cproto/coordinator_pb2_grpc.py deleted file mode 100644 index f2330c124..000000000 --- a/xain_fl/cproto/coordinator_pb2_grpc.py +++ /dev/null @@ -1,97 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - -from xain_fl.cproto import coordinator_pb2 as xain__fl_dot_cproto_dot_coordinator__pb2 - - -class CoordinatorStub(object): - # missing associated documentation comment in .proto file - pass - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.Rendezvous = channel.unary_unary( - '/xain.protobuf.coordinator.Coordinator/Rendezvous', - request_serializer=xain__fl_dot_cproto_dot_coordinator__pb2.RendezvousRequest.SerializeToString, - response_deserializer=xain__fl_dot_cproto_dot_coordinator__pb2.RendezvousReply.FromString, - ) - self.Heartbeat = channel.unary_unary( - '/xain.protobuf.coordinator.Coordinator/Heartbeat', - request_serializer=xain__fl_dot_cproto_dot_coordinator__pb2.HeartbeatRequest.SerializeToString, - response_deserializer=xain__fl_dot_cproto_dot_coordinator__pb2.HeartbeatReply.FromString, - ) - self.StartTraining = channel.unary_unary( - '/xain.protobuf.coordinator.Coordinator/StartTraining', - request_serializer=xain__fl_dot_cproto_dot_coordinator__pb2.StartTrainingRequest.SerializeToString, - response_deserializer=xain__fl_dot_cproto_dot_coordinator__pb2.StartTrainingReply.FromString, - ) - self.EndTraining = channel.unary_unary( - '/xain.protobuf.coordinator.Coordinator/EndTraining', - request_serializer=xain__fl_dot_cproto_dot_coordinator__pb2.EndTrainingRequest.SerializeToString, - response_deserializer=xain__fl_dot_cproto_dot_coordinator__pb2.EndTrainingReply.FromString, - ) - - -class CoordinatorServicer(object): - # missing associated documentation comment in .proto file - pass - - def Rendezvous(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Heartbeat(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def StartTraining(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def EndTraining(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_CoordinatorServicer_to_server(servicer, server): - rpc_method_handlers = { - 'Rendezvous': grpc.unary_unary_rpc_method_handler( - servicer.Rendezvous, - request_deserializer=xain__fl_dot_cproto_dot_coordinator__pb2.RendezvousRequest.FromString, - response_serializer=xain__fl_dot_cproto_dot_coordinator__pb2.RendezvousReply.SerializeToString, - ), - 'Heartbeat': grpc.unary_unary_rpc_method_handler( - servicer.Heartbeat, - request_deserializer=xain__fl_dot_cproto_dot_coordinator__pb2.HeartbeatRequest.FromString, - response_serializer=xain__fl_dot_cproto_dot_coordinator__pb2.HeartbeatReply.SerializeToString, - ), - 'StartTraining': grpc.unary_unary_rpc_method_handler( - servicer.StartTraining, - request_deserializer=xain__fl_dot_cproto_dot_coordinator__pb2.StartTrainingRequest.FromString, - response_serializer=xain__fl_dot_cproto_dot_coordinator__pb2.StartTrainingReply.SerializeToString, - ), - 'EndTraining': grpc.unary_unary_rpc_method_handler( - servicer.EndTraining, - request_deserializer=xain__fl_dot_cproto_dot_coordinator__pb2.EndTrainingRequest.FromString, - response_serializer=xain__fl_dot_cproto_dot_coordinator__pb2.EndTrainingReply.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'xain.protobuf.coordinator.Coordinator', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) diff --git a/xain_fl/cproto/hellonumproto_pb2.py b/xain_fl/cproto/hellonumproto_pb2.py deleted file mode 100644 index 931fa62eb..000000000 --- a/xain_fl/cproto/hellonumproto_pb2.py +++ /dev/null @@ -1,137 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: xain_fl/cproto/hellonumproto.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from numproto.protobuf import ndarray_pb2 as numproto_dot_protobuf_dot_ndarray__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='xain_fl/cproto/hellonumproto.proto', - package='hellonumproto', - syntax='proto3', - serialized_options=None, - serialized_pb=_b('\n\"xain_fl/cproto/hellonumproto.proto\x12\rhellonumproto\x1a\x1fnumproto/protobuf/ndarray.proto\":\n\x0fNumProtoRequest\x12\'\n\x03\x61rr\x18\x01 \x01(\x0b\x32\x1a.numproto.protobuf.NDArray\"8\n\rNumProtoReply\x12\'\n\x03\x61rr\x18\x01 \x01(\x0b\x32\x1a.numproto.protobuf.NDArray2d\n\x0eNumProtoServer\x12R\n\x10SayHelloNumProto\x12\x1e.hellonumproto.NumProtoRequest\x1a\x1c.hellonumproto.NumProtoReply\"\x00\x62\x06proto3') - , - dependencies=[numproto_dot_protobuf_dot_ndarray__pb2.DESCRIPTOR,]) - - - - -_NUMPROTOREQUEST = _descriptor.Descriptor( - name='NumProtoRequest', - full_name='hellonumproto.NumProtoRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='arr', full_name='hellonumproto.NumProtoRequest.arr', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=86, - serialized_end=144, -) - - -_NUMPROTOREPLY = _descriptor.Descriptor( - name='NumProtoReply', - full_name='hellonumproto.NumProtoReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='arr', full_name='hellonumproto.NumProtoReply.arr', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=146, - serialized_end=202, -) - -_NUMPROTOREQUEST.fields_by_name['arr'].message_type = numproto_dot_protobuf_dot_ndarray__pb2._NDARRAY -_NUMPROTOREPLY.fields_by_name['arr'].message_type = numproto_dot_protobuf_dot_ndarray__pb2._NDARRAY -DESCRIPTOR.message_types_by_name['NumProtoRequest'] = _NUMPROTOREQUEST -DESCRIPTOR.message_types_by_name['NumProtoReply'] = _NUMPROTOREPLY -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -NumProtoRequest = _reflection.GeneratedProtocolMessageType('NumProtoRequest', (_message.Message,), { - 'DESCRIPTOR' : _NUMPROTOREQUEST, - '__module__' : 'xain_fl.cproto.hellonumproto_pb2' - # @@protoc_insertion_point(class_scope:hellonumproto.NumProtoRequest) - }) -_sym_db.RegisterMessage(NumProtoRequest) - -NumProtoReply = _reflection.GeneratedProtocolMessageType('NumProtoReply', (_message.Message,), { - 'DESCRIPTOR' : _NUMPROTOREPLY, - '__module__' : 'xain_fl.cproto.hellonumproto_pb2' - # @@protoc_insertion_point(class_scope:hellonumproto.NumProtoReply) - }) -_sym_db.RegisterMessage(NumProtoReply) - - - -_NUMPROTOSERVER = _descriptor.ServiceDescriptor( - name='NumProtoServer', - full_name='hellonumproto.NumProtoServer', - file=DESCRIPTOR, - index=0, - serialized_options=None, - serialized_start=204, - serialized_end=304, - methods=[ - _descriptor.MethodDescriptor( - name='SayHelloNumProto', - full_name='hellonumproto.NumProtoServer.SayHelloNumProto', - index=0, - containing_service=None, - input_type=_NUMPROTOREQUEST, - output_type=_NUMPROTOREPLY, - serialized_options=None, - ), -]) -_sym_db.RegisterServiceDescriptor(_NUMPROTOSERVER) - -DESCRIPTOR.services_by_name['NumProtoServer'] = _NUMPROTOSERVER - -# @@protoc_insertion_point(module_scope) diff --git a/xain_fl/cproto/hellonumproto_pb2.pyi b/xain_fl/cproto/hellonumproto_pb2.pyi deleted file mode 100644 index 35ec44890..000000000 --- a/xain_fl/cproto/hellonumproto_pb2.pyi +++ /dev/null @@ -1,64 +0,0 @@ -# @generated by generate_proto_mypy_stubs.py. Do not edit! -import sys -from google.protobuf.descriptor import ( - Descriptor as google___protobuf___descriptor___Descriptor, -) - -from google.protobuf.message import ( - Message as google___protobuf___message___Message, -) - -from numproto.protobuf.ndarray_pb2 import ( - NDArray as numproto___protobuf___ndarray_pb2___NDArray, -) - -from typing import ( - Optional as typing___Optional, -) - -from typing_extensions import ( - Literal as typing_extensions___Literal, -) - - -class NumProtoRequest(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - - @property - def arr(self) -> numproto___protobuf___ndarray_pb2___NDArray: ... - - def __init__(self, - *, - arr : typing___Optional[numproto___protobuf___ndarray_pb2___NDArray] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> NumProtoRequest: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def HasField(self, field_name: typing_extensions___Literal[u"arr"]) -> bool: ... - def ClearField(self, field_name: typing_extensions___Literal[u"arr"]) -> None: ... - else: - def HasField(self, field_name: typing_extensions___Literal[u"arr",b"arr"]) -> bool: ... - def ClearField(self, field_name: typing_extensions___Literal[u"arr",b"arr"]) -> None: ... - -class NumProtoReply(google___protobuf___message___Message): - DESCRIPTOR: google___protobuf___descriptor___Descriptor = ... - - @property - def arr(self) -> numproto___protobuf___ndarray_pb2___NDArray: ... - - def __init__(self, - *, - arr : typing___Optional[numproto___protobuf___ndarray_pb2___NDArray] = None, - ) -> None: ... - @classmethod - def FromString(cls, s: bytes) -> NumProtoReply: ... - def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ... - if sys.version_info >= (3,): - def HasField(self, field_name: typing_extensions___Literal[u"arr"]) -> bool: ... - def ClearField(self, field_name: typing_extensions___Literal[u"arr"]) -> None: ... - else: - def HasField(self, field_name: typing_extensions___Literal[u"arr",b"arr"]) -> bool: ... - def ClearField(self, field_name: typing_extensions___Literal[u"arr",b"arr"]) -> None: ... diff --git a/xain_fl/cproto/hellonumproto_pb2_grpc.py b/xain_fl/cproto/hellonumproto_pb2_grpc.py deleted file mode 100644 index 8695042c5..000000000 --- a/xain_fl/cproto/hellonumproto_pb2_grpc.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - -from xain_fl.cproto import hellonumproto_pb2 as xain__fl_dot_cproto_dot_hellonumproto__pb2 - - -class NumProtoServerStub(object): - # missing associated documentation comment in .proto file - pass - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.SayHelloNumProto = channel.unary_unary( - '/hellonumproto.NumProtoServer/SayHelloNumProto', - request_serializer=xain__fl_dot_cproto_dot_hellonumproto__pb2.NumProtoRequest.SerializeToString, - response_deserializer=xain__fl_dot_cproto_dot_hellonumproto__pb2.NumProtoReply.FromString, - ) - - -class NumProtoServerServicer(object): - # missing associated documentation comment in .proto file - pass - - def SayHelloNumProto(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_NumProtoServerServicer_to_server(servicer, server): - rpc_method_handlers = { - 'SayHelloNumProto': grpc.unary_unary_rpc_method_handler( - servicer.SayHelloNumProto, - request_deserializer=xain__fl_dot_cproto_dot_hellonumproto__pb2.NumProtoRequest.FromString, - response_serializer=xain__fl_dot_cproto_dot_hellonumproto__pb2.NumProtoReply.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'hellonumproto.NumProtoServer', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) diff --git a/xain_fl/cproto/numproto_server.py b/xain_fl/cproto/numproto_server.py deleted file mode 100644 index 9ce77f9d0..000000000 --- a/xain_fl/cproto/numproto_server.py +++ /dev/null @@ -1,39 +0,0 @@ -import time -from concurrent import futures - -import grpc -from numproto import ndarray_to_proto, proto_to_ndarray - -from xain_fl.coordinator import _ONE_DAY_IN_SECONDS -from xain_fl.cproto import hellonumproto_pb2, hellonumproto_pb2_grpc -from xain_fl.logger import get_logger - -logger = get_logger(__name__) - - -class NumProtoServer(hellonumproto_pb2_grpc.NumProtoServerServicer): - def SayHelloNumProto(self, request, context): - nda = proto_to_ndarray(request.arr) - logger.info("NumProto server received", nda=nda) - - nda *= 2 - logger.info("NumProto server sent", nda=nda) - return hellonumproto_pb2.NumProtoReply(arr=ndarray_to_proto(nda)) - - -def serve(): - server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) - hellonumproto_pb2_grpc.add_NumProtoServerServicer_to_server( - NumProtoServer(), server - ) - server.add_insecure_port("[::]:50051") - server.start() - try: - while True: - time.sleep(_ONE_DAY_IN_SECONDS) - except KeyboardInterrupt: - server.stop(0) - - -if __name__ == "__main__": - serve() diff --git a/xain_fl/cproto/participant.py b/xain_fl/cproto/participant.py deleted file mode 100644 index cbfcc50bf..000000000 --- a/xain_fl/cproto/participant.py +++ /dev/null @@ -1,304 +0,0 @@ -"""Module implementing the networked Participant using gRPC. -""" - -# TODO: Currently, the participant is completely ignored in the mypy.ini, since the participant -# will be removed anyways in XP-208. - -import threading -import time -from enum import Enum, auto -from typing import Tuple - -import grpc -from numproto import ndarray_to_proto, proto_to_ndarray - -from xain_fl.cproto import coordinator_pb2, coordinator_pb2_grpc -from xain_fl.logger import get_logger -from xain_fl.types import History, Metrics, Theta - -RETRY_TIMEOUT = 5 -HEARTBEAT_TIME = 10 - -logger = get_logger(__name__) - - -class ParState(Enum): - """Enumeration of Participant states. - """ - - WAITING_FOR_SELECTION = auto() - TRAINING = auto() - POST_TRAINING = auto() - DONE = auto() - - -def rendezvous(channel): - """Starts a rendezvous exchange with Coordinator. - - Args: - channel: gRPC channel to Coordinator. - """ - stub = coordinator_pb2_grpc.CoordinatorStub(channel) - - response = coordinator_pb2.RendezvousResponse.LATER - - while response == coordinator_pb2.RendezvousResponse.LATER: - reply = stub.Rendezvous(coordinator_pb2.RendezvousRequest()) - if reply.response == coordinator_pb2.RendezvousResponse.ACCEPT: - logger.info("Participant received: ACCEPT") - elif reply.response == coordinator_pb2.RendezvousResponse.LATER: - logger.info( - "Participant received: LATER. Retrying...", retry_timeout=RETRY_TIMEOUT - ) - time.sleep(RETRY_TIMEOUT) - - response = reply.response - - -def start_training(channel) -> Tuple[Theta, int, int]: - """Starts a training initiation exchange with Coordinator. Returns the decoded - contents of the response from Coordinator. - - Args: - channel: gRPC channel to Coordinator. - - Returns: - obj:`Theta`: Global model to train on. - obj:`int`: Number of epochs. - obj:`int`: Epoch base. - """ - stub = coordinator_pb2_grpc.CoordinatorStub(channel) - req = coordinator_pb2.StartTrainingRequest() - # send request to start training - reply = stub.StartTraining(req) - logger.info("Participant received", reply_type=type(reply)) - theta, epochs, epoch_base = reply.theta, reply.epochs, reply.epoch_base - return [proto_to_ndarray(pnda) for pnda in theta], epochs, epoch_base - - -def end_training( - channel, theta_n: Tuple[Theta, int], history: History, metrics: Metrics -): - """Starts a training completion exchange with Coordinator, sending a locally - trained model and metadata. - - Args: - channel: gRPC channel to Coordinator. - theta_n (obj:`Tuple[Theta, int]`): Locally trained model. - history (obj:`History`): History metadata. - Metrics (obj:`Metrics`): Metrics metadata. - """ - - # pylint: disable=no-member - stub = coordinator_pb2_grpc.CoordinatorStub(channel) - # build request starting with theta update - theta, num = theta_n - theta_n_proto = coordinator_pb2.EndTrainingRequest.ThetaUpdate( - theta_prime=[ndarray_to_proto(nda) for nda in theta], num_examples=num - ) - # history data - h = { - k: coordinator_pb2.EndTrainingRequest.HistoryValue(values=v) - for k, v in history.items() - } - # metrics - cid, vbc = metrics - m = coordinator_pb2.EndTrainingRequest.Metrics(cid=cid, vol_by_class=vbc) - # assemble req - req = coordinator_pb2.EndTrainingRequest( - theta_update=theta_n_proto, history=h, metrics=m - ) - # send request to end training - reply = stub.EndTraining(req) - logger.info("Participant received", reply_type=type(reply)) - - -def training_round(channel, participant): - """Initiates training round exchange with Coordinator. - Begins with `start_training`. Then performs local training computation using - `participant`. Finally, completes with `end_training`. - - Args: - channel: gRPC channel to Coordinator. - participant (obj:`Participant`): Local Participant. - """ - theta, epochs, base = start_training(channel) - # training: - theta_n, his, _dict = participant.train_round(theta, epochs, base) - # NOTE _dict is the opt_config - ignore for now - met = participant.metrics() - end_training(channel, theta_n, his, met) - - -class StateRecord: - """Thread-safe record of Participant state and round number. - """ - - # pylint: disable=W0622 - def __init__(self, state=ParState.WAITING_FOR_SELECTION, round=0): - self.cv = threading.Condition() - self.round = round - self.state = state - - def lookup(self): - """Looks up the state and round number. - - Returns: - :obj:`Tuple[ParState, int]`: State and round number - """ - with self.cv: - return self.state, self.round - - def update(self, state): - """Updates state. - - Args: - state (:obj:`ParState`): State to update to. - """ - with self.cv: - self.state = state - self.cv.notify() - - def wait_until_selected_or_done(self): - """Waits until Participant is in the state of having been selected for training - (or is completely done). - - Returns: - :obj:`ParState`: New state Participant is in. - """ - with self.cv: - self.cv.wait_for(lambda: self.state in {ParState.TRAINING, ParState.DONE}) - # which one was it? - return self.state - - def wait_until_next_round(self): - """Waits until Participant is in a state indicating the start of the next round - of training. - - Returns: - :obj:`ParState`: New state Participant is in. - """ - with self.cv: - self.cv.wait_for( - lambda: self.state - in {ParState.TRAINING, ParState.WAITING_FOR_SELECTION, ParState.DONE} - ) - # which one was it? - return self.state - - -def transit(st, beat_reply): - """Participant state transition function on a heartbeat response. Updates the - state record `st`. - - Args: - st (obj:`StateRecord`): Participant state record to update. - beat_reply (obj:`coordinator_pb2.HeartbeatReply`): Heartbeat from Coordinator. - """ - msg, r = beat_reply.state, beat_reply.round - with st.cv: - if st.state == ParState.WAITING_FOR_SELECTION: - if msg == coordinator_pb2.State.ROUND: - st.state = ParState.TRAINING - st.round = r - st.cv.notify() - elif msg == coordinator_pb2.State.FINISHED: - st.state = ParState.DONE - st.cv.notify() - elif st.state == ParState.POST_TRAINING: - if msg == coordinator_pb2.State.STANDBY: - # not selected - st.state = ParState.WAITING_FOR_SELECTION - # prob ok to keep st.round as it is - st.cv.notify() - elif msg == coordinator_pb2.State.ROUND and r == st.round + 1: - st.state = ParState.TRAINING - st.round = r - st.cv.notify() - elif msg == coordinator_pb2.State.FINISHED: - st.state = ParState.DONE - st.cv.notify() - - -def message_loop(chan, st, terminate): - """Periodically sends (and handles) heartbeat messages in a loop. - - Args: - chan: gRPC channel to Coordinator. - st (obj:`StateRecord`): Participant state record. - terminate (obj:`threading.Event`): Event to terminate message loop. - """ - coord = coordinator_pb2_grpc.CoordinatorStub(chan) - while not terminate.is_set(): - req = coordinator_pb2.HeartbeatRequest() - reply = coord.Heartbeat(req) - transit(st, reply) - time.sleep(HEARTBEAT_TIME) - - -def go(part): - """Top-level function for the Participant state machine. - After rendezvous and heartbeat initiation, the Participant is - WAITING_FOR_SELECTION. When selected, it moves to TRAINING followed by - POST_TRAINING. If selected again for the next round, it moves back to - TRAINING, otherwise it is back to WAITING_FOR_SELECTION. - - Args: - part (obj:`Participant`): Participant object for training computation. - """ - # use insecure channel for now - with grpc.insecure_channel("localhost:50051") as chan: # thread-safe - rendezvous(chan) - - st = StateRecord() - terminate = threading.Event() - ml = threading.Thread(target=message_loop, args=(chan, st, terminate)) - ml.start() - - # in WAITING_FOR_SELECTION state - begin_selection_wait(st, chan, part) - - # possibly several training rounds later... - # in DONE state - terminate.set() - ml.join() - - -def begin_selection_wait(st, chan, part): - """Perform actions in Participant state WAITING_FOR_SELECTION. - - Args: - st (obj:`StateRecord`): Participant state record. - chan: gRPC channel to Coordinator. - part (obj:`Participant`): Participant object for training computation. - """ - ps = st.wait_until_selected_or_done() - if ps == ParState.TRAINING: - # selected - begin_training(st, chan, part) - elif ps == ParState.DONE: - pass - - -def begin_training(st, chan, part): - """Perform actions in Participant state TRAINING and POST_TRAINING. - - Args: - st (obj:`StateRecord`): Participant state record. - chan: gRPC channel to Coordinator. - part (obj:`Participant`): Participant object for training computation. - """ - # perform the training procedures - training_round(chan, part) - # move to POST_TRAINING state - st.update(ParState.POST_TRAINING) - ps = st.wait_until_next_round() - if ps == ParState.TRAINING: - # selected again - begin_training(st, chan, part) - elif ps == ParState.WAITING_FOR_SELECTION: - # not this time - begin_selection_wait(st, chan, part) - elif ps == ParState.DONE: - # that was the last round - pass diff --git a/xain_fl/cproto/test_coordinator.py b/xain_fl/cproto/test_coordinator.py deleted file mode 100644 index 49bc54901..000000000 --- a/xain_fl/cproto/test_coordinator.py +++ /dev/null @@ -1,267 +0,0 @@ -import numpy as np -import pytest -from numproto import proto_to_ndarray - -from xain_fl.coordinator.coordinator import Coordinator -from xain_fl.cproto import coordinator_pb2 -from xain_fl.cproto.coordinator_pb2 import ( - RendezvousReply, - RendezvousRequest, - RendezvousResponse, -) -from xain_fl.tools.exceptions import ( - DuplicatedUpdateError, - InvalidRequestError, - UnknownParticipantError, -) - - -def test_rendezvous_accept(): - coordinator: Coordinator = Coordinator() - result: RendezvousReply = coordinator.on_message( - RendezvousRequest(), "participant1" - ) - - assert isinstance(result, RendezvousReply) - assert result.response == RendezvousResponse.ACCEPT - - -def test_rendezvous_later_fraction_1(): - coordinator = Coordinator( - minimum_participants_in_round=1, fraction_of_participants=1.0 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - result = coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant2") - - assert isinstance(result, coordinator_pb2.RendezvousReply) - assert result.response == coordinator_pb2.RendezvousResponse.LATER - - -def test_rendezvous_later_fraction_05(): - coordinator = Coordinator( - minimum_participants_in_round=1, fraction_of_participants=0.5 - ) - - # with 0.5 fraction it needs to accept at least two participants - result = coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - assert isinstance(result, coordinator_pb2.RendezvousReply) - assert result.response == coordinator_pb2.RendezvousResponse.ACCEPT - - result = coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant2") - - assert isinstance(result, coordinator_pb2.RendezvousReply) - assert result.response == coordinator_pb2.RendezvousResponse.ACCEPT - - # the third participant must receive LATER RendezvousResponse - result = coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant3") - - assert isinstance(result, coordinator_pb2.RendezvousReply) - assert result.response == coordinator_pb2.RendezvousResponse.LATER - - -def test_coordinator_state_standby_round(): - # tests that the coordinator transitions from STANDBY to ROUND once enough participants - # are connected - coordinator = Coordinator( - minimum_participants_in_round=1, fraction_of_participants=1.0 - ) - - assert coordinator.state == coordinator_pb2.STANDBY - - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - assert coordinator.state == coordinator_pb2.State.ROUND - assert coordinator.current_round == 1 - - -def test_start_training(): - test_weights = [np.arange(10), np.arange(10, 20)] - coordinator = Coordinator( - minimum_participants_in_round=1, - fraction_of_participants=1.0, - weights=test_weights, - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - result = coordinator.on_message( - coordinator_pb2.StartTrainingRequest(), "participant1" - ) - received_weights = [proto_to_ndarray(nda) for nda in result.weights] - - np.testing.assert_equal(test_weights, received_weights) - - -def start_training_wrong_state(): - # if the coordinator receives a StartTraining request while not in the - # ROUND state it will raise an exception - coordinator = Coordinator( - minimum_participants_in_round=2, fraction_of_participants=1.0 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - with pytest.raises(InvalidRequestError): - coordinator.on_message(coordinator_pb2.StartTrainingRequest(), "participant1") - - -def test_end_training(): - # we need two participants so that we can check the status of the local update mid round - # with only one participant it wouldn't work because the local updates state is cleaned at - # the end of each round - coordinator = Coordinator( - minimum_participants_in_round=2, fraction_of_participants=1.0 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant2") - - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant1") - - assert len(coordinator.round.updates) == 1 - - -def test_end_training_round_update(): - # Test that the round number is updated once all participants sent their updates - coordinator = Coordinator( - minimum_participants_in_round=2, fraction_of_participants=1.0, num_rounds=2 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant2") - - # check that we are currently in round 1 - assert coordinator.current_round == 1 - - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant1") - # check we are still in round 1 - assert coordinator.current_round == 1 - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant2") - - # check that round number was updated - assert coordinator.current_round == 2 - - -def test_end_training_reinitialize_local_models(): - coordinator = Coordinator( - minimum_participants_in_round=2, fraction_of_participants=1.0, num_rounds=2 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant2") - - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant1") - - # After one participant sends its updates we should have one update in the coordinator - assert len(coordinator.round.updates) == 1 - - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant2") - - # once the second participant delivers its updates the round ends and the local models - # are reinitialized - assert coordinator.round.updates == {} - - -def test_training_finished(): - coordinator = Coordinator( - minimum_participants_in_round=1, fraction_of_participants=1.0, num_rounds=2 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - # Deliver results for 2 rounds - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant1") - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant1") - - assert coordinator.state == coordinator_pb2.State.FINISHED - - -def test_wrong_participant(): - # coordinator should not accept requests from participants that it has not accepted - coordinator = Coordinator( - minimum_participants_in_round=1, fraction_of_participants=1.0 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - with pytest.raises(UnknownParticipantError): - coordinator.on_message(coordinator_pb2.HeartbeatRequest(), "participant2") - - with pytest.raises(UnknownParticipantError): - coordinator.on_message(coordinator_pb2.StartTrainingRequest(), "participant2") - - with pytest.raises(UnknownParticipantError): - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant2") - - -def test_duplicated_update_submit(): - # the coordinator should not accept multiples updates from the same participant - # in the same round - coordinator = Coordinator( - minimum_participants_in_round=2, fraction_of_participants=1.0 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant2") - - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant1") - - with pytest.raises(DuplicatedUpdateError): - coordinator.on_message(coordinator_pb2.EndTrainingRequest(), "participant1") - - -def test_remove_participant(): - coordinator = Coordinator( - minimum_participants_in_round=1, fraction_of_participants=1.0 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - assert coordinator.state == coordinator_pb2.State.ROUND - - coordinator.remove_participant("participant1") - - assert coordinator.participants.len() == 0 - assert coordinator.state == coordinator_pb2.State.STANDBY - - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - assert coordinator.state == coordinator_pb2.State.ROUND - - -def test_number_of_selected_participants(): - # test that the coordinator needs minimum 3 participants and selects 2 of them - coordinator = Coordinator( - minimum_participants_in_round=2, fraction_of_participants=0.6 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - - # the coordinator should wait for three participants to be connected before starting a round, - # and select participants. Before that coordinator.round.participant_ids is an empty list - assert coordinator.minimum_connected_participants == 3 - assert coordinator.state == coordinator_pb2.State.STANDBY - assert coordinator.round.participant_ids == [] - - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant2") - - assert coordinator.state == coordinator_pb2.State.STANDBY - assert coordinator.round.participant_ids == [] - - # add the third participant - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant3") - - # now the coordinator must have started a round and selected 2 participants - assert coordinator.state == coordinator_pb2.State.ROUND - assert len(coordinator.round.participant_ids) == 2 - - -def test_correct_round_advertised_to_participants(): - # test that only selected participants receive ROUND state and the others STANDBY - coordinator = Coordinator( - minimum_participants_in_round=1, fraction_of_participants=0.5 - ) - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant1") - coordinator.on_message(coordinator_pb2.RendezvousRequest(), "participant2") - - # override selected participant - coordinator.round.participant_ids = ["participant1"] - - # state ROUND will be advertised to participant1 (which has been selected) - result = coordinator.on_message(coordinator_pb2.HeartbeatRequest(), "participant1") - assert result.state == coordinator_pb2.State.ROUND - - # state STANDBY will be advertised to participant2 (which has NOT been selected) - result = coordinator.on_message(coordinator_pb2.HeartbeatRequest(), "participant2") - assert result.state == coordinator_pb2.State.STANDBY diff --git a/xain_fl/cproto/test_grpc.py b/xain_fl/cproto/test_grpc.py deleted file mode 100644 index c245a7c85..000000000 --- a/xain_fl/cproto/test_grpc.py +++ /dev/null @@ -1,257 +0,0 @@ -# TODO: Once the old grpc participant is removed (XP-208), make sure to remove the -# skipping of tests. - -import sys -import threading -from concurrent import futures -from unittest import mock - -import grpc -import numpy as np -import pytest -from numproto import ndarray_to_proto, proto_to_ndarray - -from xain_fl.coordinator.coordinator import Coordinator -from xain_fl.coordinator.coordinator_grpc import CoordinatorGrpc -from xain_fl.coordinator.heartbeat import monitor_heartbeats -from xain_fl.coordinator.participants import Participants -from xain_fl.cproto import ( - coordinator_pb2, - coordinator_pb2_grpc, - hellonumproto_pb2, - hellonumproto_pb2_grpc, -) -from xain_fl.cproto.participant import ( - StateRecord, - end_training, - message_loop, - rendezvous, - start_training, -) - -# Some grpc tests fail on macos. -# `pytestmark` when defined on a module will mark all tests in that module. -# For more information check -# http://doc.pytest.org/en/latest/skipping.html#skip-all-test-functions-of-a-class-or-module -if sys.platform == "darwin": - pytestmark = pytest.mark.xfail(reason="some grpc tests fail on macos") - -# pylint: disable=W0613,W0621 -@pytest.mark.integration -def test_greeter_server(greeter_server): - with grpc.insecure_channel("localhost:50051") as channel: - stub = hellonumproto_pb2_grpc.NumProtoServerStub(channel) - - nda = np.arange(10) - response = stub.SayHelloNumProto( - hellonumproto_pb2.NumProtoRequest(arr=ndarray_to_proto(nda)) - ) - - response_nda = proto_to_ndarray(response.arr) - - assert np.array_equal(nda * 2, response_nda) - - -@pytest.mark.integration -def test_participant_rendezvous_accept(participant_stub, coordinator_service): - reply = participant_stub.Rendezvous(coordinator_pb2.RendezvousRequest()) - - assert reply.response == coordinator_pb2.RendezvousResponse.ACCEPT - - -# TODO(XP-119): Fix test so it also runs correctly on macos -@pytest.mark.integration -def test_participant_rendezvous_later(participant_stub): - - # populate participants - coordinator = Coordinator( - minimum_participants_in_round=10, fraction_of_participants=1.0 - ) - required_participants = 10 - for i in range(required_participants): - coordinator.participants.add(str(i)) - - server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) - coordinator_pb2_grpc.add_CoordinatorServicer_to_server( - CoordinatorGrpc(coordinator), server - ) - server.add_insecure_port("localhost:50051") - server.start() - - # try to rendezvous the 11th participant - reply = participant_stub.Rendezvous(coordinator_pb2.RendezvousRequest()) - server.stop(0) - - assert reply.response == coordinator_pb2.RendezvousResponse.LATER - - -@pytest.mark.integration -def test_heartbeat(participant_stub, coordinator_service): - # first we need to rendezvous so that the participant is added to the list of participants - _ = participant_stub.Rendezvous(coordinator_pb2.RendezvousRequest()) - reply = participant_stub.Heartbeat(coordinator_pb2.HeartbeatRequest()) - - # the Coordinator is initialised in conftest.py::coordinator_service with 10 participants - # needed per round. so here we expect the HeartbeatReply to have State.STANDBY - # because we connected only one participant - assert reply == coordinator_pb2.HeartbeatReply() - assert coordinator_service.coordinator.state == coordinator_pb2.State.STANDBY - - -@pytest.mark.integration -def test_heartbeat_denied(participant_stub, coordinator_service): - # heartbeat requests are only allowed if the participant has already - # rendezvous with the coordinator - with pytest.raises(grpc.RpcError): - reply = participant_stub.Heartbeat(coordinator_pb2.HeartbeatRequest()) - assert reply.status_code == grpc.StatusCode.PERMISSION_DENIED - - -@mock.patch("threading.Event.is_set", side_effect=[False, True]) -@mock.patch("time.sleep", return_value=None) -@mock.patch("xain_fl.coordinator.coordinator.Coordinator.remove_participant") -def test_monitor_heartbeats(mock_participants_remove, _mock_sleep, _mock_event): - participants = Participants() - participants.add("participant_1") - participants.participants["participant_1"].heartbeat_expires = 0 - - coordinator = Coordinator() - coordinator.participants = participants - - terminate_event = threading.Event() - monitor_heartbeats(coordinator, terminate_event) - - mock_participants_remove.assert_called_once_with("participant_1") - - -@mock.patch("threading.Event.is_set", side_effect=[False, True]) -@mock.patch("time.sleep", return_value=None) -def test_monitor_heartbeats_remove_participant(_mock_sleep, _mock_event): - participants = Participants() - participants.add("participant_1") - participants.participants["participant_1"].heartbeat_expires = 0 - - coordinator = Coordinator() - coordinator.participants = participants - - terminate_event = threading.Event() - monitor_heartbeats(coordinator, terminate_event) - - assert participants.len() == 0 - - -@mock.patch("threading.Event.is_set", side_effect=[False, False, True]) -@mock.patch("time.sleep", return_value=None) -@mock.patch("xain_fl.cproto.coordinator_pb2.HeartbeatRequest") -def test_participant_heartbeat(mock_heartbeat_request, _mock_sleep, _mock_event): - channel = mock.MagicMock() - terminate_event = threading.Event() - st = StateRecord() - - message_loop(channel, st, terminate_event) - - # check that the heartbeat is sent exactly twice - mock_heartbeat_request.assert_has_calls([mock.call(), mock.call()]) - - -@pytest.mark.skip("Skipping due to moving of the grpc participant as sdk to xain-sdk") -@pytest.mark.integration -def test_start_training(coordinator_service): - test_weights = [np.arange(10), np.arange(10, 20)] - - # set coordinator global model and hyper-params so that it needs only 1 participant - coord = coordinator_service.coordinator - coord.minimum_participants_in_round = 1 - coord.fraction_of_participants = 1.0 - coord.epochs = 5 - coord.epoch_base = 2 - coord.weights = test_weights - coord.minimum_connected_participants = coord.get_minimum_connected_participants() - - # simulate a participant communicating with coordinator via channel - with grpc.insecure_channel("localhost:50051") as channel: - # we need to rendezvous before we can send any other requests - rendezvous(channel) - # call startTraining service method on coordinator - weights, epochs, epoch_base = start_training(channel) - - # check global model received - assert epochs == 5 - assert epoch_base == 2 - np.testing.assert_equal(weights, test_weights) - - -@pytest.mark.integration -def test_start_training_denied(participant_stub, coordinator_service): - # start training requests are only allowed if the participant has already - # rendezvous with the coordinator - with pytest.raises(grpc.RpcError): - reply = participant_stub.StartTraining(coordinator_pb2.StartTrainingRequest()) - assert reply.status_code == grpc.StatusCode.PERMISSION_DENIED - - -@pytest.mark.skip("Skipping due to moving of the grpc participant as sdk to xain-sdk") -@pytest.mark.integration -def test_start_training_failed_precondition(participant_stub, coordinator_service): - # start training requests are only allowed if the coordinator is in ROUND state. - # Since we need 10 participants to be connected (see conftest.py::coordinator_service) - # the StartTrainingRequest is expected to fail - participant_stub.Rendezvous(coordinator_pb2.RendezvousRequest()) - with pytest.raises(grpc.RpcError): - reply = participant_stub.StartTraining(coordinator_pb2.StartTrainingRequest()) - assert reply.status_code == grpc.StatusCode.FAILED_PRECONDITION - - -@pytest.mark.skip("Skipping due to moving of the grpc participant as sdk to xain-sdk") -@pytest.mark.integration -def test_end_training(coordinator_service): - assert coordinator_service.coordinator.round.updates == {} - - # simulate trained local model data - test_weights, number_samples = [np.arange(20, 30), np.arange(30, 40)], 2 - metrics = {"metric": [np.arange(10, 20), np.arange(5, 10)]} - - with grpc.insecure_channel("localhost:50051") as channel: - # we first need to rendezvous before we can send any other request - rendezvous(channel) - # call endTraining service method on coordinator - end_training( # pylint: disable-msg=no-value-for-parameter - channel, test_weights, number_samples, metrics - ) - # check local model received... - - assert len(coordinator_service.coordinator.round.updates) == 1 - - round_ = coordinator_service.coordinator.round - - # first the weights update - _, update = round_.updates.popitem() - tu1, tu2 = update["weight_update"] - assert tu2 == number_samples - np.testing.assert_equal(tu1, test_weights) - - m = update["metrics"] - assert m.keys() == metrics.keys() - for k, vals in metrics.items(): - np.testing.assert_allclose(m[k], vals) - - -@pytest.mark.integration -def test_end_training_duplicated_updates(coordinator_service, participant_stub): - # participant can only send updates once in a single round - participant_stub.Rendezvous(coordinator_pb2.RendezvousRequest()) - - participant_stub.EndTraining(coordinator_pb2.EndTrainingRequest()) - - with pytest.raises(grpc.RpcError): - reply = participant_stub.EndTraining(coordinator_pb2.EndTrainingRequest()) - assert reply.status_code == grpc.StatusCode.ALREADY_EXISTS - - -@pytest.mark.integration -def test_end_training_denied(participant_stub, coordinator_service): - # heartbeat requests are only allowed if the participant has already - # rendezvous with the coordinator - with pytest.raises(grpc.RpcError): - reply = participant_stub.EndTraining(coordinator_pb2.EndTrainingRequest()) - assert reply.status_code == grpc.StatusCode.PERMISSION_DENIED diff --git a/xain_fl/cproto/test_participant.py b/xain_fl/cproto/test_participant.py deleted file mode 100644 index 1d8dd168d..000000000 --- a/xain_fl/cproto/test_participant.py +++ /dev/null @@ -1,106 +0,0 @@ -from xain_fl.cproto import coordinator_pb2 -from xain_fl.cproto.participant import ParState, StateRecord, transit - - -def test_from_start(): - st = StateRecord() - assert st.lookup() == (ParState.WAITING_FOR_SELECTION, 0) - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.ROUND) - transit(st, hb) - assert st.lookup() == (ParState.TRAINING, 0) - # should return immediately - assert st.wait_until_selected_or_done() == ParState.TRAINING - - -def test_waiting_to_training_i(): - st = StateRecord(state=ParState.WAITING_FOR_SELECTION) - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.ROUND, round=1) - transit(st, hb) - assert st.lookup() == (ParState.TRAINING, 1) - # should return immediately - assert st.wait_until_selected_or_done() == ParState.TRAINING - - -def test_waiting_to_done(): - st = StateRecord(state=ParState.WAITING_FOR_SELECTION, round=2) - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.FINISHED) - transit(st, hb) - assert st.lookup() == (ParState.DONE, 2) - # should return immediately - assert st.wait_until_selected_or_done() == ParState.DONE - - -def test_waiting_to_waiting(): - st = StateRecord(state=ParState.WAITING_FOR_SELECTION, round=3) - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.STANDBY) - transit(st, hb) - assert st.lookup() == (ParState.WAITING_FOR_SELECTION, 3) - - -def test_training_to_training(): - st = StateRecord(state=ParState.TRAINING, round=4) - start_state = st.lookup() - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.STANDBY) - transit(st, hb) - assert st.lookup() == start_state - hb.state = coordinator_pb2.ROUND - transit(st, hb) - assert st.lookup() == start_state - hb.state = coordinator_pb2.FINISHED - transit(st, hb) - assert st.lookup() == start_state - - -def test_posttraining_to_training(): - st = StateRecord(state=ParState.POST_TRAINING, round=5) - start_state = st.lookup() - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.ROUND, round=5) - transit(st, hb) - assert st.lookup() == start_state - # old round? shouldn't affect me... - hb.round = 0 - transit(st, hb) - assert st.lookup() == start_state - # NOTE a "future" round e.g. 7 would be unexpected under current assumptions - # it should be preceded by a STANDBY to indicate nonselection for round 6 - - # selected for next round - hb.round = 6 - transit(st, hb) - assert st.lookup() == (ParState.TRAINING, 6) - # should return immediately - assert st.wait_until_next_round() == ParState.TRAINING - - -def test_posttraining_to_done(): - st = StateRecord(state=ParState.POST_TRAINING, round=6) - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.FINISHED) - transit(st, hb) - assert st.lookup() == (ParState.DONE, 6) - # should return immediately - assert st.wait_until_next_round() == ParState.DONE - - -def test_posttraining_to_waiting(): - st = StateRecord(state=ParState.POST_TRAINING, round=7) - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.STANDBY) - transit(st, hb) - assert st.lookup() == (ParState.WAITING_FOR_SELECTION, 7) - # should return immediately - assert st.wait_until_next_round() == ParState.WAITING_FOR_SELECTION - - -def test_restart_round(): - # participant has done its training for round 8 - st = StateRecord(state=ParState.POST_TRAINING, round=8) - # it's told to go into waiting - hb = coordinator_pb2.HeartbeatReply(state=coordinator_pb2.STANDBY) - transit(st, hb) - assert st.lookup() == (ParState.WAITING_FOR_SELECTION, 8) - # and back again to training... - hb.state = coordinator_pb2.ROUND - hb.round = 8 # but still in round 8! - # => interpret this as "round restarted" e.g. original theta was corrupt or something - transit(st, hb) - # => re-do the training... - assert st.lookup() == (ParState.TRAINING, 8) diff --git a/xain_fl/datasets/__init__.py b/xain_fl/datasets/__init__.py deleted file mode 100644 index 6f86323de..000000000 --- a/xain_fl/datasets/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -import os - -from absl import flags - -import xain_fl.config - -from .dataset import load_splits - -c = xain_fl.config.load() - -FLAGS = flags.FLAGS - -flags.DEFINE_string( - "local_datasets_dir", - c.get("Path", "local_datasets_dir"), - "Local directory to store datasets in. Usually ~/.xain-fl/datasets", -) -flags.DEFINE_string( - "datasets_repository", - "http://xain-datasets.s3-website.eu-central-1.amazonaws.com", - "Remote datasets repository.", -) -flags.DEFINE_boolean( - "fetch_datasets", - True, - "Indicates if remote datasets should be fetched if required.", -) diff --git a/xain_fl/datasets/conftest.py b/xain_fl/datasets/conftest.py deleted file mode 100644 index 30e4a5926..000000000 --- a/xain_fl/datasets/conftest.py +++ /dev/null @@ -1,59 +0,0 @@ -import numpy as np -import pytest - - -@pytest.fixture -def mock_simple_keras_dataset(): - # train set with labels 0, 7, 1, 2 as 3x3 images/matrixes - x_train = np.array( - [ - [[1, 1, 1], [1, 0, 1], [1, 1, 1]], - [[1, 1, 1], [0, 1, 0], [1, 0, 0]], - [[0, 1, 0], [0, 1, 0], [0, 1, 0]], - [[1, 1, 1], [0, 1, 0], [1, 1, 1]], - ], - dtype=np.int8, - ) - y_train = np.array([0, 7, 1, 2], dtype=np.int8) - - # test set with label 1 and corresponding matrix (x_train[0]) - x_test = np.array([[[0, 0, 1], [0, 0, 1], [0, 0, 1]]], dtype=np.int8) - y_test = np.array([1], dtype=np.int8) - - assert x_train.shape[0] == y_train.shape[0] - assert x_test.shape[0] == y_test.shape[0] - - assert x_train.shape[1] == x_test.shape[1] - assert x_train.shape[2] == x_test.shape[2] - - return (x_train, y_train), (x_test, y_test) - - -@pytest.fixture -def mock_simple_federated_dataset(): - # train set with numbers 0, 7, 1, 2 as 3x3 images/matrixes - x_train = np.array( - [ - [[1, 1, 1], [1, 0, 1], [1, 1, 1]], - [[0, 1, 0], [0, 1, 0], [0, 1, 0]], - [[1, 1, 1], [0, 1, 0], [1, 0, 0]], - ], - dtype=np.int8, - ) - y_train = np.array([0, 1, 7], dtype=np.int8) - - x_val = np.array([[[1, 1, 1], [0, 1, 0], [1, 1, 1]]], dtype=np.int8) - y_val = np.array([2], dtype=np.int8) - - # test set with number 1 as matrix - x_test = np.array([[[0, 0, 1], [0, 0, 1], [0, 0, 1]]], dtype=np.int8) - y_test = np.array([1], dtype=np.int8) - - assert x_train.shape[0] == y_train.shape[0] - assert x_val.shape[0] == y_val.shape[0] - assert x_test.shape[0] == y_test.shape[0] - - x_splits = np.split(x_train, indices_or_sections=3, axis=0) - y_splits = np.split(y_train, indices_or_sections=3, axis=0) - - return zip(x_splits, y_splits), (x_val, y_val), (x_test, y_test) diff --git a/xain_fl/datasets/dataset.py b/xain_fl/datasets/dataset.py deleted file mode 100644 index 66325144c..000000000 --- a/xain_fl/datasets/dataset.py +++ /dev/null @@ -1,73 +0,0 @@ -import tensorflow as tf -from absl import flags - -from xain_fl.datasets import storage -from xain_fl.types import FederatedDataset - -FLAGS = flags.FLAGS - -cifar10 = tf.keras.datasets.cifar10 -fashion_mnist = tf.keras.datasets.fashion_mnist - -config = { - # cpp datasets - "cifar-10-100p-noniid-01cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-noniid-02cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-noniid-03cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-noniid-04cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-noniid-05cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-noniid-06cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-noniid-07cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-noniid-08cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-noniid-09cpp": {"keras_dataset": cifar10}, - "cifar-10-100p-iid-balanced": {"keras_dataset": cifar10}, - "fashion-mnist-100p-noniid-01cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-noniid-02cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-noniid-03cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-noniid-04cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-noniid-05cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-noniid-06cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-noniid-07cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-noniid-08cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-noniid-09cpp": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-iid-balanced": {"keras_dataset": fashion_mnist}, - # volume based datasets - "cifar-10-100p-b1_000": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_005": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_010": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_015": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_020": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_025": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_030": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_035": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_040": {"keras_dataset": cifar10}, - "cifar-10-100p-b1_045": {"keras_dataset": cifar10}, - "fashion-mnist-100p-b1_000": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_005": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_010": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_015": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_020": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_025": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_030": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_035": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_040": {"keras_dataset": fashion_mnist}, - "fashion-mnist-100p-b1_045": {"keras_dataset": fashion_mnist}, -} - - -def load_splits( - dataset_name: str, get_local_datasets_dir=storage.default_get_local_datasets_dir -) -> FederatedDataset: - """Will load and return federated dataset - - Args: - dataset_name (str): Name of dataset to be loaded. Valid names can be found - in xain_fl.datasets.dataset.config dict - get_local_datasets_dir (Callable): Function which returns the local_datasets_dir - - Returns: - FederatedDataset - """ - return storage.load_splits( - dataset_name=dataset_name, get_local_datasets_dir=get_local_datasets_dir - ) diff --git a/xain_fl/datasets/dataset_test.py b/xain_fl/datasets/dataset_test.py deleted file mode 100644 index 5535b5f48..000000000 --- a/xain_fl/datasets/dataset_test.py +++ /dev/null @@ -1,47 +0,0 @@ -import random - -import numpy as np -import pytest - -from .dataset import config, load_splits - - -@pytest.mark.slow -@pytest.mark.integration -def test_load_splits(tmp_path): - # Prepare - def get_local_datasets_dir(): - return tmp_path - - dataset_name = random.choice(list(config)) - - # Execute - xy_splits_actual, xy_val_actual, xy_test_actual = load_splits( - dataset_name=dataset_name, get_local_datasets_dir=get_local_datasets_dir - ) - - # Assert - assert isinstance(xy_splits_actual, list) - assert isinstance(xy_val_actual, tuple) - assert isinstance(xy_test_actual, tuple) - - for xy in xy_splits_actual: - x, y = xy - - assert isinstance(x, np.ndarray) - assert isinstance(y, np.ndarray) - - -@pytest.mark.integration -def test_load_splits_without_fetch(tmp_path, disable_fetch): # pylint: disable=W0613 - # Prepare - dataset_name = list(config)[0] - - def get_local_datasets_dir(): - return tmp_path - - # Execute - with pytest.raises(Exception): - load_splits( - dataset_name=dataset_name, get_local_datasets_dir=get_local_datasets_dir - ) diff --git a/xain_fl/datasets/hashes/README.md b/xain_fl/datasets/hashes/README.md deleted file mode 100644 index 2dec44320..000000000 --- a/xain_fl/datasets/hashes/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Dataset Hashes - -This directory contains lists of hashes for all online datasets for validation diff --git a/xain_fl/datasets/hashes/__init__.py b/xain_fl/datasets/hashes/__init__.py deleted file mode 100644 index 9a77c3f65..000000000 --- a/xain_fl/datasets/hashes/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from . import load - -datasets = load.load_hashes() diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_000.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_000.json deleted file mode 100644 index 690b86896..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_000.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "3c8bd2aaba35e4b30181c7262de4e0581b9596f3", - "4bf9373934382dca2d410cf6691a984114b3621c" - ], - "01": [ - "4e67e76b101243f25cf29ae81f8846886d2cb130", - "21177918a4bc57bc19f3ac88b9021805b252a6ef" - ], - "02": [ - "fe2959a5f965b9fcfc5e7bfd2743fdae8f7e0e81", - "0668ee2c20efc824ddcd4418db496a8556f51634" - ], - "03": [ - "c57aaedef43a9ef7afba28cfc4db65708fc02439", - "a574769abe833b49065ab7f6637162b07f866ff7" - ], - "04": [ - "41a2ca080e339c7b8f33275b53bb36509a10a38b", - "8bcc8e85cb0b6d56112e2de7f169760ae9b165de" - ], - "05": [ - "d5974afde2857f5810677da884eaf229f6db63a2", - "fdbf4fc01ccdac07825c2cac95ff7cb826091178" - ], - "06": [ - "68a6fe55d8053b604d6f7e94823ef191739d9efb", - "fc1393c5bf6c3edddec4bb3fcb63d05627e57f65" - ], - "07": [ - "0e92b2d37e149248de874868783e2d3450483dbc", - "5b650f4d9903c1944a0431545018a560c1ec78b0" - ], - "08": [ - "0d53788e3f2a1fb8b3c98fa4cd6bdb6bc5fca407", - "fb0526f73f8f32dc20b64e330316cee397241983" - ], - "09": [ - "044ea8345d672545676ec51c7330540b4f799cdd", - "4683dec3d62cf48b60bc6d517b9527db5a62bb59" - ], - "10": [ - "e6ccf12f31c268d48f539a72e11869d5d21f3278", - "818f7f32c8e5b4efc25b54efed4e915de6b9ef63" - ], - "11": [ - "3a99741b70e7a6ddc18f4130ab7e322380fbd2c7", - "3ad9c62eb1712a1f9705e51b5d300e43b4711d9a" - ], - "12": [ - "7be2552495a2a876cdf42a7163dcef6c32990f08", - "83696cddedcd299787993c06c8529e7148b38591" - ], - "13": [ - "abc90426d3aad549d8d4e35d6f97cb543e92ea22", - "97ece3358637a8b36a059b4f77fa59e6115ef667" - ], - "14": [ - "e133ad928c2d83a3fb4d1184bfa8e56dcb3bf810", - "577ea390dd6afe3639d69766094984054495795f" - ], - "15": [ - "ec01da9e49dd7b9f91590d32abaa85977d0d1739", - "0315860da1900cd37a0a139761bb27765bb9aaf0" - ], - "16": [ - "d514fb51aa51d1b1e8e938e0592452299cefe85e", - "b37a8473615629b4dde8065b489202476ea9b41a" - ], - "17": [ - "062006d87fecd7ae9602b4a7cb20317f493c6c99", - "1d62ce2acef1890f2b36f21e3c52ea96a0db4979" - ], - "18": [ - "9f4491a293d8e135bb606d49480e100b32fa3988", - "b13c4aee5eee467e91ee2f29beecabc176eabf1a" - ], - "19": [ - "1a4a6763ad803b0f9bf2da1530a99057c3a08242", - "1e10643298810efa25cf0cf0dde33a2dbfeddf90" - ], - "20": [ - "9d90e7748b15f02a007aeb351a1b390a0510a1c7", - "84b17debc7a3b7b3789b24d7c2640445e092b149" - ], - "21": [ - "78c3a7be6a688f4c683a1fc71997d852dee10842", - "875c247b9bd909a524f1e325fb9de7a1f28fb62a" - ], - "22": [ - "1cc4561340a7d1da286028d20ddb59d3845d7f4a", - "504df3f040a457ab12697d961bb7db83687e0bcf" - ], - "23": [ - "f2d490ee85ef84f25f74c07ef99526811bb44621", - "28a6fa2d4d53262f6ebd3e9f919722753e55f488" - ], - "24": [ - "ae5857b324df51fa89b2a1c6c1c37726eb85731c", - "ded5ba31b3f3d055b199558a13f5e6e5f63da21d" - ], - "25": [ - "6847a13c9e2fee5b680c81486c4250cb99c00b1e", - "7b9b3582ac28e5e6b2eb10b13f3274996473ac80" - ], - "26": [ - "10dc2b01616259551d0c092f9b18793dbcdab9af", - "2fd677d14b9c4c812cd012700863070d0af1cdb0" - ], - "27": [ - "d80d5f81e8c261ebc82dc8744d37d3a4509b7bf4", - "aa8d08026833a8b32d70fb911ac58486a22c9669" - ], - "28": [ - "3a50fb56695e105cea825d2768e08646f8292ced", - "f3fff710ed42b4e0c7247a24c4650f51d34979f5" - ], - "29": [ - "606fc61f470559a55195e9cf0031c590e2962c08", - "9d04c69833e8fd26891af4cea80571bcc85e5a25" - ], - "30": [ - "4306f66f090dcb2f5558dcccafdea2de8354f856", - "873bce8b16b6f5b37dcd393a780447f1b62a3933" - ], - "31": [ - "c8e0033644f8a9c9c202d161925ace17fc3b2342", - "810cdd515c431964e6aeecf4fd3ca972b56f7a86" - ], - "32": [ - "615494bf6a282a1780d62353245895d61f227d1c", - "da372d561b960ca8d36ca2913ff9e5f318e6af23" - ], - "33": [ - "bab3ec840d3f36c4d2cd6ea6549cdf466a5eaee8", - "b979e09ba367fea0612a40ffd6ee1e694ee02f0a" - ], - "34": [ - "b6772bd755b9c42ca5b62de50c60e2861453ee0e", - "4e03d1cb7c95a56e480ffe6ce8ecb126199db456" - ], - "35": [ - "3378185323bde5dca2c5374f63f6f6c9e692ef0e", - "4abf10dda5727795885b76ca16c3a2758c53d68b" - ], - "36": [ - "3b13fd2526bf05f32d05ef7c18c2efafebc2af7b", - "6a53f7e6a88f5bc5eec85e4af51393e9ddae1b5e" - ], - "37": [ - "69da91d5499f46f7da12b97e3ead8e375dfbfa2d", - "ed4c37451db72352e26b0d3682cd8ffdb0bfb3f9" - ], - "38": [ - "cf90889e29116c70879afe3f2aa7079e4ffb6365", - "d2f8309d842e324434b4f4872a8b964e463e5729" - ], - "39": [ - "65a70a9f84be3c4a54e835a71cc7c94ec2edadd1", - "cba2ae63ae425dedbb74cfef313a77e0ae2416f6" - ], - "40": [ - "4901ce70f9882d2a5857d57dd56bf3630c8ae9c4", - "e8930526c50f5d1fb6974717df3950b2ec01d6db" - ], - "41": [ - "76bd124b1f9db967add366f680291e9313b2cdc8", - "0b8b5c1965f1c346d10a7bd228e62c18b0edbd3a" - ], - "42": [ - "b9dd2b199a1210ba19fea8ba5233d4c7186a26d3", - "e03e6834cc9aa81870b9fba577212121019fb66a" - ], - "43": [ - "baafc00b6ea11d09d360f63404bb5c2249f2daf6", - "b940d777dd87404208184ed1dc5642f0bc301107" - ], - "44": [ - "c3a02d4605ebd9f93d41ce785a10f5354d81d0ba", - "6406e1fcf575cc446719dd9fc0f2a62782fff080" - ], - "45": [ - "9e3bf812832e00caeba28fc5c5ea422fdf968efb", - "d0466c678e18de136e5a7c89c7653b9d6f31dd2b" - ], - "46": [ - "edaf93481f8bc25afe032680b2a537e310ad523c", - "8526591d4c099a2ba2d066025787bb3af8494298" - ], - "47": [ - "6cc94dc8ae4545ca8c73dbc352fbbe2252267571", - "62ac6cda1de1d90d932b7bf536d913b80919a93e" - ], - "48": [ - "cc8e9447be2ae095932cba21663abb278bbb305e", - "04a188002150a79bc615365c1a9490d0b8764cb4" - ], - "49": [ - "1d37fc818fb3d61436c20d7d3ecbdf496e2752f4", - "c39a635bb4b4b457756b12788c99505bac2ea9f5" - ], - "50": [ - "a7c8c79db35cf505549f2f0a101812a9f3d00d52", - "55d530ae490cae9d9bbdb9f1109c526af453fe4a" - ], - "51": [ - "b77f37b084795f87b4fb66d79fe2f798aeaa86de", - "b8a7c87f479591b0e865a48b7b58452ff990bf30" - ], - "52": [ - "7fb8572878857c3ab55e2c30c3319a4bcd5b21f4", - "7046a4a372ab7c7936cc784ac0613edacd226e83" - ], - "53": [ - "1c080c368bab9bbf6d18911ac5c1a19c92a94ce8", - "62445c498d33eb258ecceeebbba59ba649d513aa" - ], - "54": [ - "643c3825ed25df9fbd942cff0d26c5782fc5bf19", - "7385755cf6ccf0e5fe76b3dd9afcae869242d229" - ], - "55": [ - "92ff44ab9873ca0a9d187524756abb2de31c8b2c", - "cc66aa4a5858816f6970c3bca4626f7a1ef35062" - ], - "56": [ - "d8eb320b67156a9b055dfe92d51b89cc2b3ba11b", - "c9c82e86f2200c227fe1811d85025377f31b2043" - ], - "57": [ - "520cc40ebf073759ddd133ab59ecf82619b8c367", - "5fcc5a789d99eec72510ef308ae1b53cad4c04ca" - ], - "58": [ - "26d73f43eecfafd1bf68a330fffd49a13d28e81e", - "e2a67d7fb1626388afbd90dede874e7b52d7b31f" - ], - "59": [ - "fb1222590b6938c3c60aca2bf26e0a6125a89847", - "8e6d5591f1b3de7b532c5a4eb1087460c0da8059" - ], - "60": [ - "0b25e3e357a977ae25f8ad4c34d1034d862f6dfd", - "12f988660a2d3afa4076dd69c5955d577a710d1e" - ], - "61": [ - "b5095dba75e886c25acaed7e67dae51badf95547", - "1eb4c7b828fa2233f37be085b65761fe18ec4cc6" - ], - "62": [ - "38bce2c298eb82afaf1028f29c9d5d92b88b2da7", - "02a8c07e301ec241319c92b49701b24d2bca5159" - ], - "63": [ - "f3d1d20fc6b7de759b7eb5c3c5a45da9e7ba9b3c", - "c291c29688eeaaaff7b3d5992b611fa86557a385" - ], - "64": [ - "ab74109d8ee6ae564c24a20c00a0f562eea9984a", - "bad6be595d8ccf107bc670cef4bb664711bd7bec" - ], - "65": [ - "30f69b428079538990855795a5c22d00d6367837", - "57855c2e255a00b98c0df6c84394504237854393" - ], - "66": [ - "08b60c0528e7bd584e83a0cebe95b4b026049731", - "99c43992400bc7982c3a4950b4653c33282c6f3a" - ], - "67": [ - "0b3c6556adfd904893c0588d7283982eaa6abba1", - "c22d8635fa98062b2e9522462af42483bf44bd44" - ], - "68": [ - "c6a7de8236840dc8bccfc92968dac061636a36cd", - "4f1157d7e259e1434f701e647a899dbdee1a60f2" - ], - "69": [ - "121fb8ab1de5ec786f219982b8a364af39c427f7", - "bad82e99299c9f662260b09a5478ee3b025c16b6" - ], - "70": [ - "9168496bf39fb930a99775ff956f82bd65eb23c8", - "98f8be537347cf0f218e8d0826f2bc6292366ecf" - ], - "71": [ - "279e105fb4527797308bb00cd0c1bd8c4ee92882", - "2a37fd09d534f2eb012aad7c6f4ebf8436e22051" - ], - "72": [ - "0a235428aa39cfcebd36ed5c1139bccb0d6582c1", - "d7c223d01b505e7c9e6cad6b194a7b7e27470456" - ], - "73": [ - "0ada43d89a9557bddddfece41024f7bb79e2788f", - "d1c8f7dfdef455030c49441c1759b3bcb5a1fabe" - ], - "74": [ - "87c91a1f13d52e4d4fd38e84da4a3637f1a7ae57", - "8e2faba48db48433aae433e5b34148d6c528e7ba" - ], - "75": [ - "089a0da89a5bc1863442ae5c831faad9b330f80e", - "3c3a3097820c06becf9a6e380a38fc878347d2ff" - ], - "76": [ - "2fd21637dc2141f3765b6660fd4009bfb350cac1", - "0a6e5bc96f032489df71e1f2dd16751107048817" - ], - "77": [ - "393c2645e4f189c3d56ad17d0bd317b15c29131e", - "5fe481aa882d4acdc14e067c12e4e34356902b77" - ], - "78": [ - "81a2cbf123fc608e0a5c1599060c7b2c5a7630c1", - "398918bc12a21ac75c395496a83a21c813cc31dc" - ], - "79": [ - "de0168130e7feb7f1641eb2f0d013aa583465d8d", - "336f83bbfa861c0e9565f7b4ed31254d7c3e679c" - ], - "80": [ - "eb7479f8ff5654305783fc7fcedbac8ed4e86fd1", - "bb3299b431896475a0825b3053d384b2a419f76e" - ], - "81": [ - "09c75d7dfe87f2a23038cf9a086a449eb0c2119c", - "413389b16d92b082d0d5ad4e166d6ce0d95ac214" - ], - "82": [ - "0c1a4199d52a4a3465e36939a54a7677e7a98159", - "373a7043f6b31405e53259ccabe5d40c8036fd73" - ], - "83": [ - "8aa0f1aee77d14ab088aa2348e59439da6d8e5f3", - "5311ad35ee323d43dd707e9ef66d9da3fa7354aa" - ], - "84": [ - "7c4e6aa9d9366ce5014678a32d2a2687e5fd1646", - "23b458001a8bc557807ade4909327baa1ed8b390" - ], - "85": [ - "64dae766efab863223b3011f792c04539d57ab2f", - "6fd9349d159d65b3399c8ac30011bc2cd77a1dc9" - ], - "86": [ - "51e0aff8957030c65884fba9d203f9d10e3542b5", - "f922e3644e8aaf46c63ac446017f4d256e971dce" - ], - "87": [ - "c6f7a4e8664cc57e49101ff9b38c4fb814bdd8e5", - "c6632b016b02f8f37806ddf5fb5357fba4db005f" - ], - "88": [ - "06fb6490011d9a754ca9c8318e3712413ae97119", - "52b201ffa7b90ab44ac05b2e8ddf0a8f52fcaddb" - ], - "89": [ - "ba45eb9ed1ec3e0ec2b22abf203f2870a2f7ef88", - "5e4cd91769222d593c232e703ad24bb79fae8bc3" - ], - "90": [ - "1d7073a1129beddb3e5be419bde7e783cafadece", - "2c806b59910cd0244ebbd68396a75cbbdc4c65f0" - ], - "91": [ - "05d2f2bab1ce2f50f349b3e0c88bad6bd3e7f035", - "753fccf41b4975f8cc83ef126022629bf8cfb58b" - ], - "92": [ - "998c6b8975cf74c1a923c6110ed7198c664004f8", - "9b23fdaa10370964010bdf7a79d16ef88650096e" - ], - "93": [ - "b976c0c4bce56b4381cb0ffeafb00349d7ca9b20", - "5edc0a1e1844fc36fca64c48680c20013818f331" - ], - "94": [ - "ffa8b4899970db751c1506a1735643862ece5728", - "f476f773ffbee985ed5f8d35f5dcceaf2b267404" - ], - "95": [ - "d16c4bc0e9620a08bb083702d3818ef722a5306b", - "dd64ad6c08ddfb3a46b35377a4044fca04edc335" - ], - "96": [ - "126321229ceefcbdfa2d690087643a8b80402576", - "197ff2a6198d608473bb22e4510b3cd1786e45fe" - ], - "97": [ - "07fcc4521317be5ab5487139ce1b80418572da3f", - "807a5ee3615a4db316764f5b4c1d26aa84e99dcd" - ], - "98": [ - "4981dbdb7876dda2951801a8a414bc427116c6c5", - "666402f160fb6a445383fd6d97810438b59f6d46" - ], - "99": [ - "04ea3f57cc7b72c5bb1bbd07e4accd1d99c76783", - "eae59363331c0511fa453978743d25a689df433b" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_005.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_005.json deleted file mode 100644 index 124e357cf..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_005.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "681634cafa88b55cdd1d3320d7985f87cb4d3a66", - "c762c0d1536a0f60a0573597eeb7f23e0048bb21" - ], - "01": [ - "c860122b7d6a3e8186a78b555d76ba6210f76c90", - "5d7965c227906e2283eed3ae017927d35bb71c48" - ], - "02": [ - "a6f2a03516fd721dfde711cc4b305a0987d7025b", - "fac5f96aa886357fc127b4eda108b1f2be63bbd8" - ], - "03": [ - "80f7e9ce92730d6e0888d64b466d7d0ee3db03b0", - "768536e486efa4c8e8da6b1ca3a708cefbf99f8d" - ], - "04": [ - "11d81de26a67270379cc474e3d8772794ba41281", - "2173bf00437635cb3be9fa6b7e09be399c19e24f" - ], - "05": [ - "f18fb5d3dfb693cac3543054ec439d54f096f451", - "22bd8c5866dd2bce99e2105463ef7c0643fdce27" - ], - "06": [ - "db1906626452baeb6c26a6c09e41c155e2219803", - "958fccfb5df0715c99bb2b878af3489fc8b257fa" - ], - "07": [ - "56253b650dc51a7a748152ec297b108dc42889e8", - "ac778fbab8c9cdda959bdebb0fa7e5a70ec11775" - ], - "08": [ - "6718ae6a8f8b4cfba8bc8e9f2038f30149fb6637", - "bdbbbd8c54858746a3908fc26bd4ca1195d5cf03" - ], - "09": [ - "a403745f4bfc8388e9c82f181c459700e74dff40", - "2028a85540abc0259cea8ad352d498db0b3fc56c" - ], - "10": [ - "8ba225ef7cd9489e84f5ef7a61285b50f4812f8f", - "5e382c29f9fbbdfde6ce10a699087164e46b3875" - ], - "11": [ - "95d3723f357e4a52b32c2d09cba9b7ddeaad687a", - "611fb1e6a87ce3e70e6cff264072ce964745814f" - ], - "12": [ - "8878c34695b03009f6b4e15b92f2621a86f39f0a", - "cdddf05ca3e6ea1ab57166fc3bc529c158a3ba65" - ], - "13": [ - "1cc15af7f8f39fd2ac6f0fe50668aff32b22169f", - "2d3bbc4c3bc199dd669c24e9b3407ec20001a150" - ], - "14": [ - "c6ac9a445fb62edf27a3e90e1a75bed135968b0a", - "96715976b2eb27a6317c9c9326d63e99e5224504" - ], - "15": [ - "6793295e42e5f2fb2f277ccb42635c19f9acdddf", - "20d1d52e8c4d6334ec5964f1dabed3e782588c5c" - ], - "16": [ - "f95e7394e999df107cf66e0217f892601e1c565c", - "b894b71c67831e9b2f54e91b62fba2be72d8ffb5" - ], - "17": [ - "2727529cbc17dd732f70403a53af45429e3d0798", - "7a3981fbcfe4f1824e7508bb07a66a73a592019c" - ], - "18": [ - "bea054eb3cc8cb93f68f10e089a63e40087dda48", - "a123d603e88cbe0192282c19f8b1efe3c03afb57" - ], - "19": [ - "a03ce6e1403a5de370391e91b377b8d2b228a1ed", - "4552087dc0fa97f89af4521f90be9e7604b664f5" - ], - "20": [ - "5aa45087ad60a78ab776374e0f44c2232578c72c", - "c96487c03ed216afc3b46dc96462bdb79a68564f" - ], - "21": [ - "9ae0bb742984f807faa381ff7576ab01b8601734", - "9a42a3b769b099b56bc3c9ff0ff6c33aa4025619" - ], - "22": [ - "00e61a3aa020f15f081aed93e70bbe8a04e16c00", - "e386a8512ca098cb44120172363e59618cd39970" - ], - "23": [ - "422d5ec15b88648b888380aacc5a27d874d20397", - "c58876844afae6159e07d1dfff74b59de47316e7" - ], - "24": [ - "57f8fadc3ae201e78273224bff7f9131a6975125", - "e160f4f394cbd5627d568fb9a164d2e8a1d7fb74" - ], - "25": [ - "eb278f54dd8a870680fead4bc7cff393668ba38f", - "174df696a5c337407cca66c1b0051bf3b6062240" - ], - "26": [ - "4b565cab7b186df6e5943d906cd8494718142f23", - "4a532f96c19a546ae83a5e762b835f4a2a51e256" - ], - "27": [ - "23f49f9e4bcf7f413696d9ce84879264f46612ed", - "f4f638bda3cf5ff888d3c2cf92c404e9f998262f" - ], - "28": [ - "4e30c2bd6d2bb8d65c7b42cb9c4ca080de55b20d", - "34bb8f5d5fda06ab4a917a7330373a06aae60f4c" - ], - "29": [ - "8003f490371963267c20f6ac79d194991f21fba3", - "1923c47233e39f555bb1b1a783af0c390f8d0050" - ], - "30": [ - "3fef5a1149fa5815233e9fa6ca9483703aac029a", - "e020ef2943a7ce8a6d81981a256c75e52eee40ce" - ], - "31": [ - "8ee56e09cc4f83eb623cd8e26c97cad9be16cab9", - "feede58adab1aab234397554b049daac6093e81e" - ], - "32": [ - "3af84601b6cc16edfdfc7ac160a46020e846cc19", - "4fa5d38bc94f9bab435c6350763f1c654b5e152f" - ], - "33": [ - "ba6fd5f9742ad9982d01fe7f3ecb5a36ae394635", - "6379860fb0ea4c5c4892259f44305e2a3914da3c" - ], - "34": [ - "4275734db63b97f6de61f0a5d21c1dc036b812a2", - "ea3f59097ed2af1ac33d889082ba17ad8bcc87bb" - ], - "35": [ - "797d7c180f9a01974a9ad3f4b0a920787f7738aa", - "6037fee0230ba7e9d52fe646573a2f5dae2276a0" - ], - "36": [ - "d880308460c97702eb8261806f22b4f831d24536", - "bd13f24f63976035b96e213f6aeee216c594002a" - ], - "37": [ - "698a0f1d94ce509ec42c9f3b2c0045bbcfa60517", - "467bf91df9adc034e0b6b269a3d65c63a62d62f4" - ], - "38": [ - "9b5996ab9cc18690a94397f7474a19144cb9c608", - "e7d1f90f0e0eae01b1a8d9f9eabca5a5bd2bf4e8" - ], - "39": [ - "5f32c6fe4eb52ce426f963321a7e54afd5169416", - "9f0e124e8c3f134e6d0518558071677cf4c33298" - ], - "40": [ - "240ce3d5cf06aabb803eec5b3f350cf68a59a004", - "b3d8361e5db4960a6b36bab172d1c89aea208973" - ], - "41": [ - "64abe09aea8dc7dbcdcd9ac9ecb18cd272b67764", - "7f1f83fc2eef28faeba792070d17496d6a026c72" - ], - "42": [ - "8e4c07e2bb02882442ebe452beb5e666be8327d9", - "f2927f11e19c982fe5ccc7bd916b2da55506b7bd" - ], - "43": [ - "8921a58b8ffc306d99870b15d424c65c80c6fcb4", - "9960ecfa10b8f5f5e421dcb064a7741af541d4d0" - ], - "44": [ - "6f1f06ccb4fa0b6eee9b90f1df02d3b3f0b1b3c0", - "ee3af4adade80adfb56d151458f2fdb70d78cfae" - ], - "45": [ - "71348058941ab06c4485dbe79f025dacaefaec5b", - "9aa44ae6852b43f74244f08e1930c1fb62d2df8e" - ], - "46": [ - "9a35d89594c736753e98b684d87ffab6e989667b", - "4b2fb872a82b5f325b23d1f310b417ca004ac99b" - ], - "47": [ - "637bf9f9ea7165790e654586f661506d20b9b053", - "eb2ad13e9c4a04a77a98de5352f961f4de5da4c3" - ], - "48": [ - "12cf73ab1f12ecb491060a6b1abe2c6c6d2e606f", - "a2fe990436104f372ca23f44acf5dbf991ada7ac" - ], - "49": [ - "d873b6ed489d603479cc519486847a8805d6cf4f", - "d8bcb35b3398e23b8f4ac7ce2c69ab96cccddc55" - ], - "50": [ - "2ecc0dc9468f1c30618cfd480102ab8e23895e1b", - "653bfc3145431e198368e451932eff007601d6df" - ], - "51": [ - "d41e6a75e0a576b5f39feb78a52531722e38890d", - "6de23ae87b5014a1faeae28db00a2ac9c0b9e801" - ], - "52": [ - "8a08c23aea219871ba1c27998ddd78e1b14e552e", - "041fcef656d7522143ebf634bb74b565e218e805" - ], - "53": [ - "8e51b1dd460621abd348713eb98aa83b7ed8facf", - "512d5ce2dda83f38994e2c2efb2e35efe433d52a" - ], - "54": [ - "4521c99fb3847e46ff52bde45b1c790cc7121661", - "ef21463bff0346192bfaa5dc7e2d893923f4db8b" - ], - "55": [ - "03a686b2684595002c12df83f26b5d11de8678e8", - "e9dae91000d8fb2320bd52bdfaed53daa8e1f8bb" - ], - "56": [ - "36c677bb0fe4e9e87dadd545b0421a4ce50f3a50", - "5c4a7e307d86c0ac5ab2fb2c7b8ff79926cdddce" - ], - "57": [ - "1f4c15056e4d0933c0f6962b1afd530edceff2a7", - "2785bd4634822935f7e6377c94dadd07a496884e" - ], - "58": [ - "ab8bfdebc56a40e39bf365673ed6e6c5056c6456", - "51444582d562111dfeb14718864578adf69e620d" - ], - "59": [ - "943ea477da5105ce4223c74b4e6ac3c888cd8b17", - "0ddbc99c6e658e7b71fea5049811e2a8b123848a" - ], - "60": [ - "916f6da8dca7872555e4e0959f00a739f89b5dc6", - "014dd9dd694e89854ac4a931645889bbf835141d" - ], - "61": [ - "a05ee949da4e4501743e0e23a4a87a2c654e9b8d", - "8dc3f3b822029da9f6f1bb0b72c4d15e7801ba2d" - ], - "62": [ - "78775117b1293a4dc98a06546587952fa35f5add", - "34e425fc9e0dcb4fc6f18aae03a9e7e8701f6be8" - ], - "63": [ - "1a15648ab478c157f44892ae78fe087c64226b03", - "eeadfc4675832b0803ec923d1f80eb30f9396906" - ], - "64": [ - "e78be10f800bc3c175d7f622ce85b1177e18ad75", - "484b9fe99e1766fd6a31e7027a723fc9fedfba05" - ], - "65": [ - "b88db0df402f37f5fc79ee474b9682c4fc9d1030", - "860363da7dcf4ae4213baee89c9448cb46509fb3" - ], - "66": [ - "c9f3baf75eae2f6991a726a4ba677c73e3aa36e6", - "82762d2e9bd405c36ae838328b87c5fa92d0daf0" - ], - "67": [ - "741133e96ee539bee3a33172c2bffd5b8f56830a", - "b0b6f3e83936bcd40e54c389026e489b33d5276b" - ], - "68": [ - "5cd71b17886d56fa858c8728cb6a7f96bdbfe8be", - "c992c8b29f990706640fa64ed8ab968dc5e5119e" - ], - "69": [ - "743ec800938d33a290c7e3431f9623b1966b716c", - "74b6dbb9a8aca2d823f2afbb515eb602ff2096eb" - ], - "70": [ - "105254246652ceafcbdaf0c3691da5a9b22ac4ac", - "6aca208b3dd1b0f387cb318603cf4bf16b9e9c06" - ], - "71": [ - "b9df9c69a201ebcfc5ea561ebd7255cdbebbee56", - "4cc7950e79f62ad6e831960f218617aaf36614e9" - ], - "72": [ - "535b68cec395ffdcc3d656a13423f002438a3c00", - "40472c6b8cfd45819ad1db53319462f89e2febbf" - ], - "73": [ - "98e91c180e8a3536a82660145b685f91d15b7a24", - "13307d67a1d99f9589b549c4a9b1f0e6bb9c6da4" - ], - "74": [ - "b6456a5194d588441c29aefd684038e62ebe3d92", - "0637680b55a852e5bc9e6fb6cda0b35a58c5ceee" - ], - "75": [ - "c104b5a828fbdaf52f457a2b6c7d2ae07254e4c6", - "929e5a0d731efee61e9aef228aa93ee8cf765e48" - ], - "76": [ - "b239ac89473133f6dd2a353c76dd59804754003f", - "5b00adb10f6bc1bb0dfc9611c5e18e913fe7e5e5" - ], - "77": [ - "804dabf8fa671fe95efc1b0db122d475d001bab0", - "aa0c8186ce7df59b368e2e2c133bf35287ee3e51" - ], - "78": [ - "ffb8d6ac14a727d8d2f1f4e59a7690fae3af6199", - "eca198aa7574ae1cf2a9acac67b0908a65e7943f" - ], - "79": [ - "d9a287a16b97b8005f30220ada3992f94c09143e", - "2666d0c54b6924f732b52fc062934a651887d44b" - ], - "80": [ - "e2d8d3731e34e45fd84c0e25ae8acdd475a7dbb9", - "23ae04d130bd1a77441b86ebd90cc326cffc591c" - ], - "81": [ - "737819a3a9e1f99fa026698fc25ebea1f76f28f6", - "374f725e0749d8c62f92ec29c13f9987be96c716" - ], - "82": [ - "29fc5146d02af9494558c99140084be1239d0f9d", - "38d233771454e26cfcb27da13aaac866619b28c4" - ], - "83": [ - "0221202c342533005c8c786c5fa538151a0915d6", - "9fe2b0f60c76b478434338948a4b2c8f691505e2" - ], - "84": [ - "33d9481055d3060b1fa17dec0a5deed5a99c6e3f", - "68c53775382a74cf0e44895eea5e8cf992d20490" - ], - "85": [ - "9512834952353f9bed89c0ad24163ef8c0a556cf", - "74a8242105068caf20bf999313cb80b310e2ad96" - ], - "86": [ - "dd1eb8622d8a4e63cea118aed672a757b33feee2", - "934ef67d13d3f63e915309f90a3d1ca44e6a3635" - ], - "87": [ - "fc9567f794fe36a3c7c67152f1f6e29f10304dc9", - "48166566eb65b089db1696b855b94d66ee474303" - ], - "88": [ - "8b4a1cc4e75ce28ced000d95df979bcf8c09fe24", - "f9b0193af8857b2dbc540a24a6214dccd37e9ac2" - ], - "89": [ - "a84c8cfa6e481135723bdb4c8bdeeb29155650ea", - "fd8cbb5b24ca78624d4419c60bbf2836665c0d37" - ], - "90": [ - "0419eda72a82deda3cb71a9225aa51b0ab05ff12", - "e451ae7dc669dbb2cf403b198b95584fdd468ad5" - ], - "91": [ - "1d5b40273753f584cce422365b8440123ea12d4d", - "dc0f6fdd457718fdfd443978f3e27c9b43ca4ec7" - ], - "92": [ - "6df116d5195a5275baadea7cc55b7295ddc32526", - "00b75c8ee323c93bd5430fb6c25df6bace8842df" - ], - "93": [ - "65cb070982792ed920b14bc7b3c769d21c4bc0e3", - "fb8d33ecd92acfa42f5029552a8f7ce11ec1ca81" - ], - "94": [ - "c537d431d7ab41f44b4295e45b2e78dca5224f78", - "2dad686e1dedc912bec4735bb5868d5a887a3b90" - ], - "95": [ - "7aca934118b50771ac9f9dff9ab51b40d912f683", - "2fbc84f2b380254609aaa57b62c4ace038ccadce" - ], - "96": [ - "3b7099dd40463ac8dffe0caf6adaa7dfa27e88bf", - "f521aa2c50aef8d725f65d7876f35d880606738c" - ], - "97": [ - "c65ca51ac7f3951e429271fd1c55e66b5298c60f", - "f96f755b58eca0d87f27988b02e850737d46d27b" - ], - "98": [ - "9c74e7979f32d8806f94a2912785c293c699b62d", - "95ef9c421d803a74f56b3d46b300ca3d7dd97e0a" - ], - "99": [ - "52de22383e1e81ce15a5990f889a4a9803807e46", - "07ae56b93cb6e9ebc89285954bf33920ec9dc4c6" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_010.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_010.json deleted file mode 100644 index 8dfd1f0df..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_010.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "314eac823858d83c3d56c6f86d8d752263735087", - "ad7aa831578101d470e1d0112c19f9e895807bf5" - ], - "01": [ - "8ac02ea18559c18eeac0e2eb81daf7df3f641441", - "ab46a7c0e1072d4ff99a496760f0a2e58ea92e93" - ], - "02": [ - "b5887435cb81bc3c26fe37f31d6583d115df555c", - "490085315e1e485ca3c2777398aff7380100a5a8" - ], - "03": [ - "68e20301c259bff884ce2a305f49cd7877c90a6a", - "004beed4c6a23684d3dc41391c94251f8068d4a7" - ], - "04": [ - "6de1fb8fa23afd7e55fcb6eb9a705f0f36ae234f", - "6fb0ba794695ef89dfaaf9a42c29fe9dde6a793f" - ], - "05": [ - "938b2f839ea032e2a543c9f6db2bf0bc012b8117", - "efca670c63e51e7e2417fc21ad7d35b1fe557f6d" - ], - "06": [ - "d46138e0eb677ee8798ed6ac92fa0f3eaafe3702", - "73cc43b03bc907b5036366660bd98eb1f0eddb21" - ], - "07": [ - "e3efe4073e24c6f64043d6d33deafe215cbffa54", - "fc24e75dead8eec1187b786f15b1acdbe5904f6e" - ], - "08": [ - "65786006ac874dc0a1999944a469c67658b0ff44", - "d3ce178a0135dc25876ce64b222da4cf9f9be96e" - ], - "09": [ - "01b17308c27ae160971cb127d9bc45e398abaa97", - "2d78aae5addb4ee82d14ee5488a44c480efc80ce" - ], - "10": [ - "fc6ce6e9c2f24038c2cb19d63fc0ccc07e2a06be", - "a5d91a1401c997268f4bed120f3c5677547d159e" - ], - "11": [ - "8d33cd072184fb6090ea103798882f99f0922ef2", - "0851d75a90c579f600e2192a29c47a6f6a584408" - ], - "12": [ - "82133306c1e72ca6dbf81f257f3eca7de0e9ab1b", - "7d5cc552ef3fa93075ca78c524f1a46a44da6ee5" - ], - "13": [ - "69410c895884c139796706bfcfac598f53ea7e4c", - "bdd3e0c39532839e34f5661dd1a2f98d5e372000" - ], - "14": [ - "3eed1a1a86f66c855232da93b34d81e17a2b44dc", - "cfb8d83f0d2abe7d75e1cca35f6d28e06927c0a4" - ], - "15": [ - "419b01790e409d97c5e321a8d849d696f05fb0e0", - "456a1cf97b7eeccd10e5e15198845842d92b242d" - ], - "16": [ - "651af59c0e48c92f3e18437103b4e02c805ea006", - "6ea67b07e1c0e3ce7a4ad2b79783734e40684f79" - ], - "17": [ - "16e9dd40ca6b7fac8b033dd83f2cc6effe82640b", - "04e3e51eed6270a521d121739833cf393819fc4f" - ], - "18": [ - "2f043245cf9662af9cf2d1293a58d5ff3e442cbe", - "4c3203fc000098bf3a49370f22268a6c51c86497" - ], - "19": [ - "f122ea4e9e719f2b549b578cf7c11a286717a139", - "d7f0a3405d7c1d31592693620df2f024c9da439e" - ], - "20": [ - "a036d2e11bbea33d13f1c3e8106dfe2e2e5d1ac1", - "af095f7bb8afe356534090e90f9e869c956af204" - ], - "21": [ - "0ef8d7da8a8eafc13d18c2ff091d62e254407e9b", - "e258b5050054f13cd43636c32586cde8b9e56a47" - ], - "22": [ - "c3569c8ee78948b2b118a64cb0887862fdd82e80", - "058db087e9f4927f9e075c52cd3495eaf6901507" - ], - "23": [ - "07a245811beafb6eff85929e31ff0266034a71de", - "6e46fa7f8f8d80a0e22386e64ce36b774e494eff" - ], - "24": [ - "dd8cb61f46eec7bbae27e8dfb9a8dda1eba4024e", - "126213dbc8ae08d76c06b06659779a415e57bb91" - ], - "25": [ - "ba82a2d189bf0007e1713e47696665a37596027a", - "e005925cb9a6bb4b1cbeae41b6842e8287a113c8" - ], - "26": [ - "222ed7a23148e50b9fccd81649632850e677ef33", - "1dd0f4fcb5d4caf2cfaa652ca6613fc713775bcb" - ], - "27": [ - "12ab7043c530b58bf36d3e6566e7c68c9a8a69d2", - "6bfd996b698cb2d5058ea725eac94e08780fda5e" - ], - "28": [ - "b66233b3b0bfb665634e0e2fd322f31dce679472", - "516fd809b031b8d5d408c86c8371e05d79e33ae5" - ], - "29": [ - "c11bb6c6b3f7e18b14b834abb41378ed71a5f410", - "89654f7b508f24aa465327c93c40677859d62083" - ], - "30": [ - "85a35d6128aa72adc28e0883b8c98f1360770d5c", - "ebc1f10cca87f4a915b42e3f072bd927c2f97ad9" - ], - "31": [ - "a1bb914ba56f05d0d586fd001a8548a6647b0061", - "7f642bfdcf8914738079719d97713b4878d5551c" - ], - "32": [ - "2dc9c9eb6d4312999dd47534c1b2f7889f04601c", - "a55913e3f74593800f23eb9ea06c487248f24d49" - ], - "33": [ - "faee5da1814741a572bb49e8f2d696eb051c48a6", - "25934d13545488721902d8cef7e539396aecdea6" - ], - "34": [ - "22a3535eb59fb2fb3a2757ca7a8fc71c342c8a2b", - "cfbdcd572d0b88b6c6780427c7da62be716f5e62" - ], - "35": [ - "cc22fe84027922a242180e321ac68acfa467e2c2", - "16c2f5ea608ebc6c59a4ee8b9f1835f6b81eea9b" - ], - "36": [ - "3c4791c938ed20d77a07258912c930f031fa6db1", - "6cdfbfa58aff793cc3c9d470fd58382a34dc4175" - ], - "37": [ - "0e7a2a8bde82e9e2f44df4fbd702c82c2b5b5d1c", - "946f8f16dba170322fa91676b5969a2c9250d671" - ], - "38": [ - "6e33feb985b18b88b462796a117ab6ef3a00ce7d", - "723567c05d9e73053038816970c67b5dcb81c453" - ], - "39": [ - "5bc6436e7dd0dabc55d03df38a7c05434d57a1cc", - "3dbd9d480327fe5cc504bfb97a26b8432fca1175" - ], - "40": [ - "3e29aaa0cce4f717fad60ec65336cb0c85d2cfc5", - "c30a92c0188f46ef217fccbe1a36853f33a5082d" - ], - "41": [ - "b9d8d00ae27e8e76ffcec15311e96e9cb3859932", - "edfeda1dd05ae6c454f37974768d54587e86fa46" - ], - "42": [ - "874406691dd9ed11e7653419cfcdfa9bf5027de0", - "b8f18fb23fa7cda86a9d057c5993716deb4510a6" - ], - "43": [ - "40d13d15e48a9e7735f4c8b0ad5531ebaa218e73", - "63d322a98685357084dd67292c82a020488782f2" - ], - "44": [ - "fe0a2384974b02d36664405cc3f2ace831e2fb33", - "c5a028de1ea3cb14ddd3ce3871862c4e59b2c6d0" - ], - "45": [ - "8397df102df9338ab0872e78f503b41cda90bd2f", - "dff9f6a77813837b3567d193de0c4b4d2f6d7ff3" - ], - "46": [ - "ff6a01e3cf0f948a624f8e62e958b37681479a5a", - "9e1d872ee1986c40fbb038b99a8ba6d02cfa4244" - ], - "47": [ - "413ab5604ea58bd8b58fd8770eba81bd9de40ba8", - "69899c4562a1c9a47055a0311a6a9affe52f44ce" - ], - "48": [ - "0f0db3a692307f5ccfff03059611631cf51b8215", - "e05a15bae699824d4a44c3a7a91ea8c96f3ec704" - ], - "49": [ - "9f4d8c32a9bcc61bdae26917ded81b5be1cbd3cb", - "94049648ca41185df165ac8bd2b68f206d03a9e2" - ], - "50": [ - "6497eff654ed3600df4fce9e9a46b7a7ddfda865", - "372dbf382ba89272d9c084e9835236375d60945a" - ], - "51": [ - "4676db6859d553e3a97ff64d111d916c76f3eb18", - "fab2f5ae1d273f6c95837a3e4696f9f8d7cdeb69" - ], - "52": [ - "bb6030ae9a7196200a6c7bdf5cc362bc18da8af1", - "9e03aa0fffbbc9a67f9f6baee8392a7873733ad4" - ], - "53": [ - "e11df8a5c5aff228a6354ceacbd67eb014df3498", - "b2457ecfd35ce7a46cffc354f6df028a59f01d50" - ], - "54": [ - "47aff335bb8a577d81392c8ed83a71ad3cd8103f", - "539c36dd17b2725b7b21571bc813e3e24742b33d" - ], - "55": [ - "e3ca625009894af9957935b45ba8a109898a2f5a", - "bbd592c73fde0bb05e3f492bb71142aff0df118c" - ], - "56": [ - "aba858dbeb2804044570afc4844ff5ffbd9bd7de", - "caa1b145a47d3112bd6b5d25405f69f802c63514" - ], - "57": [ - "98eea6991f4f7dfc8b0aabf0e894107db7f5a40e", - "3ca2d484606797bc607c1a0a2fc42311fd8060b5" - ], - "58": [ - "d900e2d7f5a0c88a8b3c7cae7d2bbaf78e1accbe", - "313815c01102299e60eb15ec6ba8a3b9cbd2eff7" - ], - "59": [ - "24e29b26894c121e020df856c84659aafedb97b1", - "0f096eb9dcd5fed8567e1d5d922ea6ca3a068966" - ], - "60": [ - "170b97e5c58d77dcb4ad441c3133eababc019a7a", - "33aea2173a2959a06e863e71d3068b9e1e1ec218" - ], - "61": [ - "3b4aa9580cb6a3121b35444acd1f0aa496b7b0c8", - "dd6ab19f18c5b2140096280955e17bc11e7316dd" - ], - "62": [ - "732318dfc1e9df993161a33e3001aee29dfd384d", - "6cc0481897ba7d8afdcc9fdb495db7740d066aee" - ], - "63": [ - "8dfc0bf5f69ffd8d882abd3aeb669f1c58766120", - "4bba25f031fd6e9202a4a2a4aedc43e828b902fd" - ], - "64": [ - "9e7a0399de1355a2206e7f43d0fa2d97340d28ea", - "681fb8235117ba16be0cd5dc42ab9d6bb8900352" - ], - "65": [ - "1a3ca17c7efa7e835ca9b2970bbd06b54307bbcb", - "b83411364f4588b1ee56f8f17067d15b14870cea" - ], - "66": [ - "8f5db4d9ff6604a6f09414495f8f81a38838f2cc", - "21e651b03d4c666203dd220d0bbec75f84d8fb0a" - ], - "67": [ - "a32f662dd7c943723d1651abede570dabdc145c5", - "4c005055cd4d226dfc7fe8a9113a527d2e995a75" - ], - "68": [ - "f5d40deeb55b3b01a9d1204d3bcd2169826ea3a1", - "0b64720f6b4d3b1c8cd982520ac6cab06b45f894" - ], - "69": [ - "38977c9814965303dc4deb9ec2675d2555ac0796", - "4fe27fe633e1ca35a1b10f537a5f9c58cb6bf096" - ], - "70": [ - "adc3afc982d33ab4a290b7925e35a7aa03f229f5", - "12c6aaf6a00b3f5c30a9558b21eb8e3d92a3989c" - ], - "71": [ - "544a3abf3953569e86b27cdc26be34f4614a0732", - "479ead82e3f6e26639dc2a2f00ff86216b2d023c" - ], - "72": [ - "1e7aa3dc0fc37032289a221b44c56b9ee4df8db9", - "305ffc1b00538274a786b5e36e21eaca146c009b" - ], - "73": [ - "78c676ec8edf54a269d05ed1eb853bb5be4613a5", - "05c9dc9f2ce09a6e4e366a7737a60d08421e750d" - ], - "74": [ - "b2fd0e7962eca36ab016e4ee0d7d054d38ed011a", - "7aed412c66c2e89a87ec91f476771007f5a905f1" - ], - "75": [ - "37249937cfd09e4efb0f32eb4e7b14a060c4717c", - "35653c5f10e8b2c4ac5a295533a7364507530ba7" - ], - "76": [ - "9076d537733595f1bb489c48560004bbf02a13b2", - "42f2a96f0da857d8672669b23c50d2947afb8834" - ], - "77": [ - "54b9fbf80469cb1dc4524c2f51f7681a9a17b30a", - "6a30d6910f15f0910ba223e1975ea48cb00e12c2" - ], - "78": [ - "c1e3097cd0d33a6ebaf4bafe852a3b2e64fa3f6a", - "9441aecaccc37300bd5def3bc805bc175c68a653" - ], - "79": [ - "b121d00ed326c079b82c556279d2933536df17dd", - "fef1fef109bcb57315bf2387e818ce3947b6279d" - ], - "80": [ - "d5dd64cfab6c8a1c9740b7fd69832c0c13499c3a", - "44bbcd7daef775b8f23f3cb523844d129a5052a2" - ], - "81": [ - "797588185065e441b351c1223963ba4a139dbd5e", - "07f3b0fd8acd9b268305839d6ac422b0088afbca" - ], - "82": [ - "eb0869dafe2a012c96d2c38dfcb80563fad9b554", - "622fa6821266cde627d579c52e49f4166ef053cc" - ], - "83": [ - "fd980564de1ade144c1719f0e09339f36a50d60f", - "a8a7969c9cfa58315929525314be635e03b1d294" - ], - "84": [ - "1d9658f560db82f2c17867fee811c83c3bcda52b", - "89a63fc309033343e27409e43a5c6bc61e92337f" - ], - "85": [ - "73311b3c7c192eeedc01493fdcce8243c6f5be2c", - "e46e06ebcb7207b5e6e066f2909805351e7669be" - ], - "86": [ - "983ce788ae89dd32672b8074be3d9a1b8524b692", - "1831be46f4e0bb37e01517a3008a1227ec4f6fb7" - ], - "87": [ - "ecd6f005dd75f217ea31ae62d20b78f9beaa53f6", - "d4371c94404aed66f6590203073f21dc7b6ec8c9" - ], - "88": [ - "d39006ebe7529da0012fa3c849163637063a70b7", - "ebdc0a540037ce3b701f96dfa66bb5cf3f65ae22" - ], - "89": [ - "99a9da75e68b426cf54e084615f80e43cf698a6a", - "290b17287aff5d55690322d2465c4cde723d0831" - ], - "90": [ - "ccf228df4c52ac5be5036f84075646326b544648", - "9cb171df6848fffee7181a26029ec64fe5e34bb3" - ], - "91": [ - "f68cbdbaea9ec32a03c35b87d5c08c45904a3aac", - "207f7d6d60305be5eb3841fa2d3dfbc5893f9023" - ], - "92": [ - "6765f83463afe3ed47d0bd28dac720ee598e831a", - "aa193b162284ab1b758bc40a0fbebecb8fcfb862" - ], - "93": [ - "cd3038a6533837ed3e3e5d0f7982b45e0b4dc811", - "47fcfd5e0535b1282f4b918c25912103a7d7c5d2" - ], - "94": [ - "9715b576a9becc4b3c60812ce3bfb3afbae38ee7", - "e5aeeb79ec6b3a062830de15fb0293c63f0d47c1" - ], - "95": [ - "49090838ddd5ec28eeac72e0f4d14861e7dc73c0", - "8b5982c4facea10026b8b0899da319812c7a1719" - ], - "96": [ - "d7f2cab1a5634e53803be3ac2b58fba0ab6bc065", - "cdfc28e28fa67e48376daa7b448e0d0d25a1ed23" - ], - "97": [ - "e955a1fb808e4bdfebfd45be949652f329429512", - "b8342e0765d5b8e50db72c4786865fe99b26f185" - ], - "98": [ - "f5f2a27c6ef450b93ca23290a85af33028e9d128", - "bfe0890bb94e60848e6525ebcf92d068ade50aeb" - ], - "99": [ - "158c6f475551ff004d22e69a227be2313703325b", - "44660d28ea30512dd26e1d481b418e9ef71b1505" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_015.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_015.json deleted file mode 100644 index 407ade6c9..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_015.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "7eb55ff25b4b981662fa3929ec86441b92702e09", - "6a78af9fbd2b220fd04cb6e441483ae39533b883" - ], - "01": [ - "50c9857851871a4ee302aeb95b8c9141a48d72d6", - "2a66875c956f304fd159fb43b1995e7dd1e67ad5" - ], - "02": [ - "a53d36ba03e48e8853cf6f172d29fa7b59dfd878", - "9186d0fa32068af44c0b324699244c7eab8aa1ab" - ], - "03": [ - "97d375fd14166e818778b1702fd009a4278377e2", - "9c142bbe68c6aeb283111d2fa8866e9b2a11e97b" - ], - "04": [ - "f34aa12b81fc3037113064c6d8978a36021d7e0f", - "de06ed6917c8f4e3ada19797386b99681f0ae39f" - ], - "05": [ - "43465a19197cb898457eb7251410f0cd77448034", - "d156949719fbd3a1b04ac25dff27974d23d0ad9a" - ], - "06": [ - "73ef820ac9129682bfe9d9e0e89bf0ba7ecdb4de", - "b96830fdba74294b6a8b799e8fb9f7a0002f6db3" - ], - "07": [ - "ef3e34b8b6e7485076bd5da97a3a70c5c042ca20", - "a69aa961c8299ce0cf9984141cc731a70c77a1bb" - ], - "08": [ - "18120dce2522fb9a746cb446931bbaf70273eae5", - "9dd5b0ff095160a07c38a0471b342d95c4e1c2b1" - ], - "09": [ - "0b084ca34f70c73774a0cec716573167b282f41e", - "93c9c8222a4a391aaa29809239a342756cdb150f" - ], - "10": [ - "3a8fd95ba808c67c7d6d4ff985e6ae9c2eaa9999", - "e1767fd2e60c02ee7d3331a380453c54a2122dba" - ], - "11": [ - "a819f2626a908d66d767ce70b05f7d8ca95221ee", - "46beed46f281b122da052b1cc19de767a2b2a65c" - ], - "12": [ - "11f6bed3c51a9ca4ea2257774c3bed1aa38c4666", - "030d84993e56176239ccd0e5b967703308f640d6" - ], - "13": [ - "1b5a3423e776c64eb8b245f03c8d86672ff00db7", - "e2468e046262677444b5da8d6b30edeec0f2e353" - ], - "14": [ - "e43941be4208fccc39299ef8b7140b5d36b396f3", - "f95fbe3424d2dd2a75b4d6cfbac8093f2e2647e7" - ], - "15": [ - "39f23f4558a515a9393b1654b99aa09368b5e016", - "4433e1fc6ea36088d805f1392b9ad37c2c5d7553" - ], - "16": [ - "f0725f1d40ea255f55c5df73313fb3271e281ef5", - "d6161b53a45c774bf97bf2d386bfbcddeca40d78" - ], - "17": [ - "87f3f95d24bbd250b180f8b747209e440fbbe7d6", - "77eab674220825c0bb444ba6fb2d5111101c3801" - ], - "18": [ - "839fa486f1b7ba32a052cd97065ab3ca9acad3ab", - "12358c288f1eba49a2410c22a675c16f5fb22439" - ], - "19": [ - "102da5650a4249270600d232c3910587c49fc556", - "f917023ec75321fbbdce84fb006f8ddd3a97d39b" - ], - "20": [ - "510ee0f30f793b7edab24448fb7055a43a9123b5", - "bf8ffd4cf0982868d64286866b2c1f636f571ddc" - ], - "21": [ - "bb8ed1fc1510a5329225eec4baa56ee125c600a8", - "b7cc6b3b4fcce35be5c77446ab3dda09823d2624" - ], - "22": [ - "920cdea6cc4b6d33524ea536058cc2fdde0588a5", - "850bb0c181bb594e07b14be4e458572e5c8eb095" - ], - "23": [ - "8cc5d9e1cb2724ef532e96790fcce433f7862c53", - "02fb71dce1c0926ae32f67a9b08fa9ddf062b55d" - ], - "24": [ - "cf8d4de022a4532e3c99c3485ca84a779343b66f", - "f191c400902ad9d8832ba668caa3b65436a9ac17" - ], - "25": [ - "a1417e719f79763ffe22706822baf22f84a1f2e0", - "f3cbc90b6d4d9e48e1b0ca1ddb4a744528959262" - ], - "26": [ - "50b3906296c578308f06a2854bfe3a31ea9300eb", - "135ba8fb641f4e2e10162dc2f68ecd43bab6bd11" - ], - "27": [ - "f683ba86b3f37d6a5b71ae03c202f3d5e40da2c1", - "10833254247dc156367b7af284e6ae67199f2928" - ], - "28": [ - "f267cd25b2cde43ae444750f295709ac303435de", - "3303291e0fb06b98373d7bc52498df9b63117c12" - ], - "29": [ - "06f656c8acf6e1738f1d7610914fe3bf00140603", - "cf0c6cffb610d8bc8085ad6f4018ee6355520acb" - ], - "30": [ - "385a6a65ca6ccd2357b008382c1a008cfeeeb2ed", - "67f3163b22bc3d45b92aed1468f181e186d40926" - ], - "31": [ - "8e3ae75cc39003e9bea22a9771d24ea66284f7bf", - "4c741f2c3adcd4dc60fdd311b68d2f78672f3133" - ], - "32": [ - "42fd4f398030cfd3c61a4df89be0057988a6d58e", - "b29ff33875b9ae7a402f295ab933cc2f1e34a080" - ], - "33": [ - "bb2bccb49b3eab5944515de6bc927562fa8198dd", - "637ee2270b4b103c4f663fafdc30c653f874d9cd" - ], - "34": [ - "adc1e78401f715cf29a7820d15f400b861a3dbd8", - "2c05f191276c8cac2c888396afdb20575f9a785a" - ], - "35": [ - "3c95dd72f2558cb8f17f7dd8bad9fa1561ec5c88", - "d9cdd99dbe1f74abc96a1c5f900b5c5a42c19472" - ], - "36": [ - "19f181755c719f0d9d79afaed64d923587027a27", - "12abfc9602f5836996811f29eb9cf30200a7534f" - ], - "37": [ - "bbc9e3e35d79e88e2e5394d1f050390dd588f2a0", - "b5426f1d2294cf815ed2f26870568fb35eade9ae" - ], - "38": [ - "9caadff300ea0b25955e01d35258d84da82cf7b2", - "8668229d2880a1db9ab2a4339603fcfa64465ed9" - ], - "39": [ - "03c5b573018a02c4678e83624570d5bca9610cad", - "c240935c6ccb36c571f1eedccc132c4bfbc17106" - ], - "40": [ - "0cd58690a83a64c8a199154895defbdd65a7ce3b", - "7d24164e150b636171fbdc00a5d99a709c89ed11" - ], - "41": [ - "267bbdc57758a24537db26b519709e5a791e1841", - "1a08c8b5d57b0e1cb6e949cc30c03714d6129818" - ], - "42": [ - "fbbd36a5420ec565a7342bd2c0650f23b6b678b3", - "304454aacf96a928acf0d52470ba925690cb5350" - ], - "43": [ - "c25cade22dd17fcefad19e35a405cc79816e72dc", - "0138f946d773a8c9992922a33ba3d681762e58ec" - ], - "44": [ - "b41d440c5b4516af33ab5c1c889da380737cc9f8", - "bc74648e135f7340b2e39250f7d8125171f6e1bd" - ], - "45": [ - "6090470e8c5b4e8de36f94e6c07b994afc68d361", - "26ad52eb9844c464bc2e40577f5fdc9314e46c44" - ], - "46": [ - "05c49f6355dffac2548364a8482a40a5efd0f3b4", - "b2024f7889c7533b43b82ecf6c4357f09184e8d7" - ], - "47": [ - "01058d40633368776ad520677b3aa2c637f0c22f", - "41f68553b9d73776a50d97b33abf1876deea781a" - ], - "48": [ - "921beedfc92785b6aa94082aa1aedd337338c522", - "da9752865376f7e5c8b31d205cbe1663d4a51da2" - ], - "49": [ - "f2870f2c6b21239de5ba17417e74c4e66e14eafc", - "c808b8fa7df2d90771f5517333d2c59895a28089" - ], - "50": [ - "db8163ed5825e18f4ccc9533cf0a30e34ce80e1d", - "4a1ebb2b6d99969f61e1e9d61f973198b46eb406" - ], - "51": [ - "fb848c090de6a164f020eb11819dbd6a0abe323d", - "37f69eff9711e610331aaff47b3f19f61b5e561d" - ], - "52": [ - "b4cd2b51207bf58234bd0a212bcc8c95edc11ba7", - "ad70ddd7ff3d0a7a023bf0499a7a3e11fe45d495" - ], - "53": [ - "c417c40e566038469b32adf4f48973913e1e2514", - "e463a56f6b69d9d5b64a3bb1a9369ef6ced1f8ce" - ], - "54": [ - "8fc298fd92745622d42861b147185d74a49f3131", - "f31e79de454bd7d68abd8cd1ade9757ef1baf612" - ], - "55": [ - "76bbda9aba87bc5cd330b4ac727a6c3b3971100e", - "48ec2c35871e7b4e455f6de0ae5ef648a7199464" - ], - "56": [ - "2ad5a41133390950e3c7d3eeaf2c0d19e4964806", - "c5fea05a9fc807b93e1f0e7050fe6d66077b7a87" - ], - "57": [ - "934c866015b0f1606fbcae7d0f2f8c6d1f941f57", - "4ee3a3ea1e02df494f0cdda670f72513167a98aa" - ], - "58": [ - "57e35f8f01073422715772beb53f6dc2e320ec0f", - "063e498d45344185a5ec525834a3cce2e43c21bb" - ], - "59": [ - "00b8547ee02eb94c037f03dddaab8e827a1c76a6", - "2a4f8fc8e003a7d7e6bcda6368eba93bc39d2362" - ], - "60": [ - "cc5f7bdb9b8bbeceeb63d80915c69d52d4d97876", - "dd19c9950b38ea7877ef12413ee80268d1c97c2e" - ], - "61": [ - "8c9a98b0c3b75e57e1235c66551c5021de823a09", - "52f90e25c98d40c3f886e2fd3b53fb3fbd5f52c6" - ], - "62": [ - "4ec38a46e30a689a0c883c5c3eb6a34a3945304c", - "ecb6342959b5cab9cca551f2d7a2746d29d4becc" - ], - "63": [ - "c39d8e27070d97ff6948b40871d0722c16b1fdd3", - "ff37bc0fa5ee1047c62fdbcf51d37232f1632055" - ], - "64": [ - "65b5b0cd7fb3725825bc7e5a420b3cc2bfe22b33", - "7ba5b41b64ac05c5ecc6cd7b63def2ebde452e2a" - ], - "65": [ - "a053aec5fb072799c3b6b927fa816ffb16c624e1", - "92f083d038106cf978888226185d004da4249b2b" - ], - "66": [ - "dd9a3d63c6881d1557f672f8a9cc098c51cb0634", - "68d686248f0103e9be64eac6d22a407e1c11fb00" - ], - "67": [ - "7b45effefb96f9a038fcc2b9f015ef85cfc9ae12", - "882a95b647331fdbdd3049a1bdad9b2845d05c9f" - ], - "68": [ - "312f3a1d004416be918290d6c5aea536086bca20", - "fb8335cee5f7e0dd6aa0656db12f0d08d2bdbe93" - ], - "69": [ - "dadadb4a1f5183907ac9c1fba07d04baa020ff6c", - "61b89f33e39f069049c706d265b1273236540376" - ], - "70": [ - "e9ec45025be6ee233f924b19c839d859d7276081", - "3f76a4622b8ca24125bc337df2e86f7b21eed4a1" - ], - "71": [ - "02f6fbc6548bfd0380df8524adc8f53b894140df", - "dd88d8443914cedc2837e842ce078f8b0df86b59" - ], - "72": [ - "29250a308f4a13206b7c3c199816a8de65aeab60", - "d8543759464fb3fd15b9d7ec1c68d518493c908e" - ], - "73": [ - "4be0bd19a1382ff96ce63c6f187835d8ed971b5c", - "40711b3c0d8e9f8f6e903ba0fa6ab6c85df0b3d3" - ], - "74": [ - "59c59c55679e32f16a56fd4a7fac661de24c0970", - "5584cd82392411b48f3c4a363393ac3d2e324bef" - ], - "75": [ - "53b5dfb8bc593784167ea03ae0bc1db47eaef9d7", - "fbdd86347a7155aac48a8f8c798e947cdacfa037" - ], - "76": [ - "17fbeda35760bbd368be2240d6063410a8b08fe3", - "dea52c615cf97cd6e16b34b425cb396939ba0f07" - ], - "77": [ - "5856591f1bddbab257653792b87b24c7f40d1a52", - "70781d9c9375ab249de492614cbb4d4170b800b0" - ], - "78": [ - "97fd4471931e747dbe4b5e30fe73ed855ba57e32", - "0311a2ff757b00c878cf82630a98e2b988205d6d" - ], - "79": [ - "2d87680585aa05ef06101ebcd6b3309d84caf130", - "4c132fcc98d13f2238740358bfda37dc69dfa167" - ], - "80": [ - "024bf517e26d3bab0e6d6c8225425c701ea82684", - "b1f3b4ca6f56069b214d552ca4488f353bf74016" - ], - "81": [ - "8940fd1c0f100d8b5456bbd65cd2e5f980ec9240", - "96a9fd832c98831f2679b2b1b807597908569b63" - ], - "82": [ - "3efd9431c3eaaa58e3199326f5ace3a112773e7a", - "1a709e2744a5567c5e2bba04fe36401d8fee1bf3" - ], - "83": [ - "82985750f0d505782033bb3f180bc8ed83251f50", - "e7a2838ed62245e8fd985e5a70db30e3ce0e8e90" - ], - "84": [ - "4699a2729509f3226341b60cf8280c83f7f218a4", - "c30a4f388ad972d86368309e5106224e0893caff" - ], - "85": [ - "643e5a606c50e55fb766d5180f8caa49733c0cde", - "22f0191d63f1626dcc170b43bae1dede50a0a6dc" - ], - "86": [ - "6fef1e68256d616cd5fa184ad03c0aacc72f5e7a", - "2241e4c9743cd9d70808519ddc86797fd848e0ef" - ], - "87": [ - "072dd3321a58a039bb0121d8cd5efd5642a4da43", - "ce920afce39f07ddfc4775cd61300a8d64f87021" - ], - "88": [ - "ca4dde4b62c5b8242eb79cb5beaaae33c9999292", - "769ffaea73ef7327b31b00fc8b93b15782e803eb" - ], - "89": [ - "3489ff0cf12f7c732efd875910a8bd01b29fca90", - "fea57a8f435f05913cd2f617c69b318185c9f032" - ], - "90": [ - "d2e181e07dec7f298c71a8c5b652e943b65c5555", - "2b9ee1b25bdcb4d9108c8743f632186e75ca3a01" - ], - "91": [ - "c411597084ae5fca31e695c8391b2e5b593f7b3b", - "327d55dcdebb41bf87bf475b9dd2585ad46f8534" - ], - "92": [ - "f0b9244789d025aee7e81c124cda1f4f77a605a6", - "199c35d15f7d1e6f0d0183f98c9c2bdcbf825c76" - ], - "93": [ - "6519e1c9b1d0a026767db5598dc38d702ffde16e", - "85e5e1a0dab1643cc0675d838237a0e958a0388e" - ], - "94": [ - "23088da6ec6c79f75673d5dd7cd1023f25e1e173", - "28fb3c89a15a930f3587b7b8b5c86313036efa90" - ], - "95": [ - "545d0d351f72b5748699fd0cde895a9a1e312b23", - "a41b5e5da615c1fdcfaa80da516bbe3bc632cbc3" - ], - "96": [ - "9b0c86b8e1dad919bae9ffa0d52cb3acf2bac484", - "fcab73002c8bbb20e6f32a9292983947f789587b" - ], - "97": [ - "72d6b5ce7191aaed6db4b393bc76611c142672f3", - "2e25a7d4a436c3c1e16bb3c1ae23b3e55793e646" - ], - "98": [ - "487019fd05b8d8359a9eaf1a05b95b1cc059125d", - "c9fea0f2ca7c0c12bb47c4fe0910f2a08c25cc74" - ], - "99": [ - "c80b9c56edcf3e6dca2da7fd0585ff7beec5b0b8", - "7cd6902bc6aeef368118ffdd2059de8066339775" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_020.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_020.json deleted file mode 100644 index ba825ed14..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_020.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "b6ea65a82cd42086f58a18a14a8ae1aa16904951", - "5909d3dbbd3091ab86c4c9fd96da889617401ea1" - ], - "01": [ - "7a4cf2db43dbccfc3c936071a7a8089aa50a690c", - "03393ad7cbc1c72cc326e69f263ba8c1ae77139a" - ], - "02": [ - "6908e90460b7621ba3550b6e1c6a6dbf0e28936f", - "24d7bf0fbf7d37e4e80515d8840049c99375689c" - ], - "03": [ - "b4978b36fa7930739ceb4dd9dbdd3869920ecc78", - "11698ea3bca414d5cd3448d2922886e342b34a66" - ], - "04": [ - "32f45e396f8cc4c0b654d1cc4ee14963814237b9", - "893472d778e5774273533a4c297b14909a79e602" - ], - "05": [ - "cbb79da6ddcf357003347b7d678f11abc9e1bd8f", - "7b69f8e4066578d4a7146cef1b2e0d01ed22e550" - ], - "06": [ - "2934bf24e1ace78661e33fcc97d060dd40263cd5", - "8a1270bd4002ea520fc53504faf853d65578b31c" - ], - "07": [ - "0450cc693fcd55c7e05f8cf0caf2ec950ef072a4", - "5792f9db02f7a1d7b027966f6be53a0633c30c44" - ], - "08": [ - "a7327ad10873bbfc59bbc3f19282bbe5a89afc89", - "95b5717724a33069c4d973aa966f9023554c01dd" - ], - "09": [ - "4c04297fa7e97884f0bddd6ca66ab81a2283147e", - "233614ed519ba11caae9f6559e2e475202c14e63" - ], - "10": [ - "bfcbf77aae88238b5541dbe83f003f476ccf12f4", - "fd93d14fd844cecb2a5b1d60ea26ee0fcc65e1ea" - ], - "11": [ - "6c7e343063036c6019d33394331587d211e0813a", - "7a550bf3b13b81099936230a812cb511d0a095d9" - ], - "12": [ - "f116f75dea5096fcbfb29e09f8080c222869a6ec", - "68cdb4fef1b6ba254987a12b6e7d06c1f00ec1a8" - ], - "13": [ - "784f519f6a0f0ba6ab19a9739cd72feecddb4cb5", - "868ab493ebe6e3b78f7388846ef5df865105b966" - ], - "14": [ - "08e260e6acd6bdb3efd6693606ed1aa68fb4c3ac", - "68857050d43377757487855b3f2a11e492efd685" - ], - "15": [ - "16e9683c61be5e69782aaef89d2bcea025307af2", - "0559ff06bd0386f40bcbdf6c778dfb447661fe81" - ], - "16": [ - "852708dfe92c38a3f60f4c1eaa259528f65e305c", - "6d3f8aa18c855f998a7a5f4e8a2ae2685ada13c2" - ], - "17": [ - "7931562eeb5588b690694444297db3774afd1b94", - "e85ce10a075fcb3614899fb2d6419b90bf1511df" - ], - "18": [ - "f49585d4aae89ea35f54aeb03ed193685c99f8cd", - "fadf69f2331a663dfd3e735b0fcdc5c1ccb1744f" - ], - "19": [ - "7d17d90b6d1e6b24dafc6223bf9dd8d1295664f1", - "a227cce0b373265e936b21b36a9fd26d56a6c84b" - ], - "20": [ - "addbe96a73a773e095ddc221b2c16596b6cf47dc", - "217c57261353b7de376c4307cd84ea1f48b78e01" - ], - "21": [ - "4802879f2165791ffb73b54dd14c41ff35e4d56a", - "8c37087968ed09af6b080c57588c20ea9a30ace1" - ], - "22": [ - "a5c1ac8c441f63891c5b0a4af26f611f95427147", - "af7f699cccfc5b3f368af74b78de2765162bab85" - ], - "23": [ - "62a20f2e1e49d642f5bd2f875ea498886a7e4359", - "37442a32fb4e8c39f89b161db11b23409dbf44ea" - ], - "24": [ - "0fab50eadf11901bf59ee3d0a94c69b460e1eff5", - "31beb4f0a349c481d8f0abda29d96c7e5e36f229" - ], - "25": [ - "1a1dc88562ee4b14023028c71a03b7ad71ebc88a", - "0d8a3c45584c808b6a49b06e6c6af1495ade93b4" - ], - "26": [ - "2cd29cd5052a61645ef914f8c988ba14781ba7f0", - "f507a34caa62db007779d51790fdf9fdc2317900" - ], - "27": [ - "bf4f29cbae3d7b2cbb1bec0f19c0deb6d3aea36f", - "760df1017e3b2420ece12571454a01478d591041" - ], - "28": [ - "5b575193a9d62964fce8ed90f51f06d4c33be931", - "9b254b6e6107e8d641ac6420ff95e76363f9f72d" - ], - "29": [ - "6d3b62d6a498846ee3a7f61d80054be5e6cdcdb9", - "6ba64204349303eb15996a517727a3a5fc292878" - ], - "30": [ - "c8c3b0ee9024e1107da05ad698114381a4fe795a", - "73dc1510913213b95413cfe9c1f0e261d887a7f2" - ], - "31": [ - "84a637fa4b8cd3463feb4e6eacad5dc8aa167882", - "5ed66cdea309be1d7d71303dad4961989541b02a" - ], - "32": [ - "9a03f5cc23419f54a3c7cc5822cfe2da8a54b808", - "864c689c6db08232a49627096353e8d514db70f7" - ], - "33": [ - "b1a40225f1f5281e7b4fdd3caa6f3a6cbc45113a", - "e9528c64d5df29e5823baeda56a9fab08fa11cf1" - ], - "34": [ - "3b61ae0c53e55d3325cec4835251e985361743ea", - "6babddaaf8f9469015742886f634592e3333493c" - ], - "35": [ - "3bd30d83bdfbe02fadce9bcfa38d9999f8f1eb7b", - "bc84ae9dc04cfc75e8c260e84d7fe94eede43735" - ], - "36": [ - "a18f356ba3543b0c3c0ded70d999ed931d8f9af1", - "bc2d8f238ca01d6e7a301eafe287ade8695d1a32" - ], - "37": [ - "323d3dfe67e0c2ce07d313e85df12d7046ffdf86", - "ef8927b7d4056327ea121bf1c055e8d6657a55a0" - ], - "38": [ - "3af027cb92420c30aad8e33560f7a5f1e226d124", - "1e0946014b6ae8873cf87032cb2d31c04043efde" - ], - "39": [ - "c6d858b21d238d437c4d8edfefa9ec1b2b0c558c", - "0749510f09a999ef8f8ea2b622812b0037859447" - ], - "40": [ - "32ead3c5c6da1f348f98c3d9d5878ef1650e0b51", - "18cba9952167493ce77abed34fa710866a363da7" - ], - "41": [ - "c84cc2c856f7e6b5dfdf450c7ad4bc08f76d66fc", - "cdd1d9a4714c91219d0caa51e5a02d925e594320" - ], - "42": [ - "d2fc6e1b4fd02d66eea05c822dea2003b093eafe", - "4611df4f7e7b75e0d032d5ccd033e70f570fa2a1" - ], - "43": [ - "2064e32e07cfe3b2c770425ef109c30375b7492a", - "cfc83c319e9a7522d1c5c94e804c0fcd32e68c24" - ], - "44": [ - "39d5d6233363e765091b2b7c1f455eb0ddb9c04a", - "c7aeb5249f0f4a2fef19b57907f73562fe736dc7" - ], - "45": [ - "84c114d5833efd46732675acc8e85490274dd005", - "cb57fd3d437106acc012f0846f75bbb6557b06d3" - ], - "46": [ - "6e2b8461f69d8b87da24fa9141c807822eb3a1e4", - "56c74c18f51951c06acfc4ba75af505f1c240214" - ], - "47": [ - "1968f1907482db3f0259a4c8d10a439fcdfd2add", - "4b6dba22a217a08b88044c0d3a34c505feed50b4" - ], - "48": [ - "32e1d6154a1bb32aba872e79ec4544158e9ed484", - "c80fc0bbf25342c7ff0d8a16a0180b334ba9426d" - ], - "49": [ - "d78561f261fbf93ae711f0486b80a5325ee5c143", - "3ead3ec2a401d10bf379006ace10582235ba5a16" - ], - "50": [ - "7aec6fc25f7da5c43012cf7c03c651afef041666", - "8b7fdae38e82944ff9332b53956535d8c6e1f7d2" - ], - "51": [ - "2a9dc44017251678cfb9fb5cbec0bf325b484bd7", - "bb07763b81e7195f1dcd23a53383719692e3fde1" - ], - "52": [ - "2fd3e5b0a736ee68c242149271bd421cba840c1f", - "61cdaa2f9607fa9a349979a06a87f4398bb0bd76" - ], - "53": [ - "ac741766d2a4f622406512390442098cc64d3ac8", - "8173680bbf22f53631e7714cd7a1784e23b25d16" - ], - "54": [ - "05915a10475d275455835f657ff9a77210a851c7", - "010ea8028f366c0c3991802acaa156b72180c39c" - ], - "55": [ - "7136a55f4a78133deb5b6e83f754c3a075dcd7ff", - "2368bbd4a897f242d84ff73d2359dc13d8160049" - ], - "56": [ - "19aeb06e9b5bef72c39d1daa087b04c871e8a0a6", - "c1a5301ef95d5eda9e783dcf4621b05142b5f006" - ], - "57": [ - "0ac522a1a6de90e9b17eeea568f1fddc6c783ca6", - "1732895a49c5c1c3653ae8ee606169fadd707140" - ], - "58": [ - "e614705468587f1d8d57eb0175a58b7258d7550e", - "b71c9f1de8833a6daeee570daf5066220498e940" - ], - "59": [ - "224d0a471d0aac785f780e61cea0dc67f2f30723", - "9b2fac12f73f0a06d9e4189cd38631f9b7cbd25f" - ], - "60": [ - "4aad39775275e95eadf1b00bce399d9cee158d52", - "b620c6a69b2616653f734ebf1cbe4f4f2b7db806" - ], - "61": [ - "f5f3e18b6068110a41a70e1eae1db08ad33d66d0", - "ae3722f44751ee6630503dae3a18c288566e9630" - ], - "62": [ - "ac61a68d4e85d2dab2f7e3b4007ef69ef5e0092a", - "a2f533a9e25294034849cf4e7f2d63f51a68965f" - ], - "63": [ - "6af31ae093de9ee50ea9f01ee4934bb85c314992", - "f976d63901e5f895da450bd96bd80aca31596630" - ], - "64": [ - "0fdedf9502b39b5cb9d3f4435129b6384fc75170", - "6d8a58558d605df15780d0dd43af751da7275080" - ], - "65": [ - "4960858a4d54308a650d3580404e1fe7da06ef19", - "269152808ec36ce5a0366b2d303b116b91342af3" - ], - "66": [ - "7c4dcb0ed56310f415c93dd1cf16c18783a4a78a", - "02aa8f085b48423df702989b7e15f2b8488d6a6f" - ], - "67": [ - "5b3ee416d89c576625afc23dddf97ae15f087515", - "4d5430d02ac851fb3039e332151371866bd7c4b3" - ], - "68": [ - "9b7ed8896a1b4a00d3cc63d364f8d4541bb49123", - "98e74cb824e525591839d81e778a96aa6a75a368" - ], - "69": [ - "61996a868dcaa9d321477e903d587028ba469485", - "cfc9fb26ce975d743a2d2d885454cc1f82cbc7b3" - ], - "70": [ - "b10557ecfd6cc65067b2f0745cb4bcec384294a3", - "c8a0fe11654c04b852451ef64bf4eb2ea27f1ef3" - ], - "71": [ - "abe03fa7818ebd45b71639db55fd7cc00b0ebd0f", - "c849d92b699eee46c816a420964559e6e07cb13b" - ], - "72": [ - "349606b58753bcdb43059f09d0b0e7ccb503f7de", - "b9a5dfe10538127e7b50ad592ef78e0dec258a87" - ], - "73": [ - "09b9d3aaa48e5b333962b471f7b8887c33d0eb23", - "15ce8fa100d56e6e09727c88020d644a3fcf8be1" - ], - "74": [ - "39d1bd367360d13319dd0d6719e847f6d64cdc10", - "3d2a4897e60997631ddbfdc345eead364e8face3" - ], - "75": [ - "df0eda0e869f337c71c8d2ea3b9573e74c42d7e5", - "7252452dacb85bc391b6ef94194a01eac8c2161e" - ], - "76": [ - "ebf5ddf6bb5e18723d162dfb4102b49bfb3400e4", - "6de8184b2a40e2a03d819fa1fb67cadddc1f9f26" - ], - "77": [ - "4190780a77348ea656adb6afe5e214eca7e8ffdc", - "5ce49102b59cf99a583a441f86deb131c383c8c8" - ], - "78": [ - "e4c6688a9fa637022db9cd6af4fb8ee3ea3f5851", - "b66227ed25e77ec38fb60da699b351b5416daa06" - ], - "79": [ - "c304ff32779ad6f24b5c76c70213acd73261d4c7", - "a6241a2043c8fa8100d2ba4918221b112997abe3" - ], - "80": [ - "4a05db698e23b1370b7c1ae43baea201d692ba2c", - "08d0ade7493c7e748bd4578e698e39183acd4c5d" - ], - "81": [ - "e2b201442d4fe5cd2074c2e9e4dd9f2af4531a62", - "e4aecc9b9b2dd27af02e34b0d43d5307870b8d6e" - ], - "82": [ - "5db9c2edec4b004b10d21fb95eab10992ec9c9b3", - "6bfc7156f2be8440a7996119ce5aeee1d22fe55e" - ], - "83": [ - "b6aceacaa8249d6b2d7beac1c8710a029b79b12a", - "0b8a8ba53326c19ea64b48f65286345454d99245" - ], - "84": [ - "11748ffb56437413992b993a051b6f01909c8b57", - "1d760603fbed844ce4f55a277b17a3c7fd5c1a2b" - ], - "85": [ - "0113d12acb05a1785ceaf7f72262c29220f74ef9", - "c1e7c94c2269e393311be25de1bfa6ae94af204b" - ], - "86": [ - "ffa8af0610a0fad03641928d1f8883e3fe9a0d34", - "0811be0dc6086c1e7fc7b99b7c889cf5a9581873" - ], - "87": [ - "66e027f968a39ca9dd4384ce340bcc37a8da74ee", - "b598e3b20edf37ea36695c952e8187052614c9f4" - ], - "88": [ - "bc72401285d5b9f914c3aad499ec38e066d49c35", - "a5d86b6dd6667cc157fb2c3c9559d2609f1611bc" - ], - "89": [ - "37d708d6edfbd987122101ecc27cd9c9439e6860", - "2c09b479ef73f77982d0b72afb1f5c83d1f031eb" - ], - "90": [ - "9f199874e9d00250e3e0de1d31532b9453572eee", - "57d3cf8ff6e44a38ef96d1a83c908f216cd9a702" - ], - "91": [ - "9ad7fd2140e7d207b2b19cb72fc7824ba962994e", - "546def64ca2cf20c8e6c9f80932e2cd96dd62200" - ], - "92": [ - "9c6562fa5d981bd140d34ba3525991e0b990b573", - "f1e42b2ce66b64e9c4ebb61fe0e1150b0d28d841" - ], - "93": [ - "0a201ad10135d88972266a7f79614c67a06c53bc", - "e12349c741d80cf0ddd8033dcb7fafdd089562f4" - ], - "94": [ - "e75b6a75b11d4c89e8662d4663557e67119285c4", - "4c3c90df2574854b696e74b1fd5483d68deab0c1" - ], - "95": [ - "1e0dabfd2f1f6f71e02053b436de015b6649eb5d", - "f175dddfff33a7264357692d2e6718c16da5dbc1" - ], - "96": [ - "08e3a9272bf1af8eae7e4228d192edc4ec31bcdc", - "aa79784f9095759017dc2e46623e75ae1aded4d3" - ], - "97": [ - "0c39094c0a80a28bbbfb3f5e1cff610136c46e93", - "a8da4c65ee4ba821847125a3971065f3a36e2caf" - ], - "98": [ - "80d66522ed1b1e8417639dccb3401f213f612523", - "e45b5d0e1a15a2892f5cfbc129dfabdae4e47faa" - ], - "99": [ - "8f13d928b8e9134e40065f23fca0f7377ff5db8c", - "0082fb7d372d4e987dcb075f6278840b04a0fdee" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_025.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_025.json deleted file mode 100644 index d618af346..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_025.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "05a5b71b92eb487d3a3081118210096a0f4a68a6", - "b10265bab45aaf2b5afdbcdafef7298ee09c367d" - ], - "01": [ - "b9226aa18ad3231b1994ab49ea178b3b1952869f", - "372816580ddaa94261fe135c37b5cf5f53a74e52" - ], - "02": [ - "f0d352e4e4709a4702e8488e8a92463abc5830fc", - "6df06443bdd6aa76346e505fd7b97d8c0121ddb8" - ], - "03": [ - "3db948efff2243768d3de209a85b2c221113da48", - "4ca7b1c0f00a1932eb437088c42be5b174431d66" - ], - "04": [ - "b91cbc3af4e133c2cfbe617becaa7809d1ddf698", - "01144cd234fee1a00b34703db388ee629ee9db49" - ], - "05": [ - "a47f271b6d51fa9f27edcb00e52f182037c9804a", - "ff3fe588d24810ba26b764fd21bcab8f102bf7c7" - ], - "06": [ - "a7839f580a0af2cfc52f88e86de524cc4db14601", - "a2870904f9c86dfa295f1670b1bbf6a6e939a776" - ], - "07": [ - "bba599d6f71ca6c374f920c2945b96b0d1406d2c", - "fd316229b8580defcf80171ab17a1e6f9006f61e" - ], - "08": [ - "3e74183f24f21e7a11ba611d46d90b66e3d8ded0", - "eeb8f18745e19956665bea6b1f0b44c1562983f3" - ], - "09": [ - "d74ec26b37b322579750fa22d51c6b2fa6f8bcab", - "1828f7dfff5e92c878017e70fd3f149baba578cf" - ], - "10": [ - "58742c767c4c8efc714ddc27cd12c3e7c24c1657", - "c7c39a5f1a9ff27d349bae775773c7b99ed4175c" - ], - "11": [ - "92a4016aac126e52a7487be459d1e5945d7ba7ab", - "4b3c5cd60af4213a97df60ec91fcb28a5ece8e14" - ], - "12": [ - "26bb4fe6c834a53d6fb1c854259b1c5cee77af55", - "c02ab63d821dd886cb8c00ba037f7c3ea36ce9d1" - ], - "13": [ - "483c8bb9deba37d6495853f3818b951aee1dd902", - "6f8fc5a75a823c0128b23350bb3317f33feb844c" - ], - "14": [ - "86aa10dc3bdb60b08cc4879524057bf9c3cd4ec6", - "9926c00a676d9879884d7f0023dc25f621e000ab" - ], - "15": [ - "8d1061998c30bada535a801bd5a80718f0e8a95d", - "0eb86bfbc4a691fc716cf9dffd8513181d4df8ea" - ], - "16": [ - "1faabc414bc8e1395db7e8a3c7d78992235f630e", - "b0589c1c08a12d4928d1500e7927bdb97d43c782" - ], - "17": [ - "044fb78b69425223def7e6677e19e7d797822674", - "e26214c2dd347eb213fc85e5c73cde18d85fc444" - ], - "18": [ - "ab5ce2a2ec38b4baddef780d20af0433a4f9150c", - "10c9fb49e9e0093f763c39146cc8f8bd109bb86d" - ], - "19": [ - "c6d0782d2fcbc3676a86b5a78544d041c58f37ef", - "f35e61dacc39cf1cda4245fcb5dfb42d5079e147" - ], - "20": [ - "2c825804dbc570f49717ff31e0479eccfd215dec", - "1a0e1b910595f53f48bd7eeb90f5bed967a32b24" - ], - "21": [ - "17daa7027406dad8a3fd1756ef5460d7f6fc4c00", - "13dcbf8c83682d3670f835e0b9bfc80f6a037c4f" - ], - "22": [ - "eb62d03b79ad514f292ad27ab8299e212ddd0732", - "2330c0cbfa1179a21668812d16e86cbcccfd92ca" - ], - "23": [ - "825f00a10ceab670c8bef7635b6e9c3937e001cf", - "a192883fe50bbc2195ee7761e3d221d3c4eb01bd" - ], - "24": [ - "096089e483016ab39a382ab96b8bd85b3169e3ae", - "4fff9af5a30dee6dea9d2b1cab8243dfc9cb1887" - ], - "25": [ - "0edb9797ed76cdab9d9f42f2dd9cad79177d4bf4", - "33df7163c942f237e2e0121f2164255dd8d6746d" - ], - "26": [ - "2d6a5fa5435708ff00d5962ff2589f20e4bd5930", - "0baa99e4a6d3995d8ebd5e131806da99364f223f" - ], - "27": [ - "8fbe44beebc59974e59509cc01c89040162fcaeb", - "ca67404c4e4c4549e6088da61e0d31c8acb5b526" - ], - "28": [ - "e3ce08b34d103a79a9481e763bfa592eac37f614", - "b67212d02628a0ba630068bf903d07415dc1242f" - ], - "29": [ - "4bc446f4cb1dc8fc96e85f62111ec6250d0047ba", - "89cec842e16744b3590de0f1e12c73969f8846ae" - ], - "30": [ - "62d1102d05076d01a5e8825aeb5c9977de4d79f2", - "7a76bcc6b3720a5421d366a5dd534f1b4d28eb03" - ], - "31": [ - "06c2105552480e55aa9f008cf3f0676c432c119c", - "ef65fea10a85f94f84585ee97132ed3d6899302a" - ], - "32": [ - "65a4e1afee7abae4d8827cd307aa0122f478a1a2", - "222c064e0080d7e3e00e0f920738cbc2bc65c071" - ], - "33": [ - "b20372dae3e1a89e7f0d2bd1f687b92760a4e5ba", - "2a46bb62837ba834eafd7521b496bac2cc9b2806" - ], - "34": [ - "fdc34b32d275d887ae61a98b3e16630e659ebb9c", - "8701cb6a2c3be4e76f88141ad04b43401851ce8c" - ], - "35": [ - "97454127113776f3b9b52b1acd168b26af385349", - "d50669f12b4d9ff6806287a10b41e28359a757a7" - ], - "36": [ - "f5ff5462584b5c9ebd0e60e1107e102abd693566", - "bdd29136f91434d3aecb1981d8e8d6dc4bf00a23" - ], - "37": [ - "5c84409d645591581cb396d95282ce43e87178ef", - "d9f3164fc5078e8594f40f739d3c53e2448f1736" - ], - "38": [ - "3e7a6eb1e72d91e5bc533ffa2084c38fe6042f5b", - "9270b576017d9c8cc982d20e0723a19512b837e4" - ], - "39": [ - "3befc96734b257f5f4a9b7751a9fb33db554a0fd", - "320c7886e420fb73521e68b23dff7268023df44e" - ], - "40": [ - "81a551bce8417a172c53b0d5f8b94d762c96a5dc", - "8c77796eec959439c07c2634a625859fe56fcbe3" - ], - "41": [ - "40ea5920e6a9ce92287736123f8589b875f7fffa", - "2479fbc322bc39dfba814a09131a457b0dda1b2b" - ], - "42": [ - "74ba6920c84cc48a9839cb3a6e1c1ce3e1df4e03", - "b8d6a5ffa5ee54bafa9f3253aa95135d9cd24163" - ], - "43": [ - "4f412b52750a01977a85d6ab6bd989f6e19b000f", - "857c447a01843297b157f6f3b361b1590d4fcf8b" - ], - "44": [ - "8fdedd4e7ecbcd27859c6ff17f874a9b1abbb2c5", - "c0faf83f25d3faf9620d86abc5680e0e7c682d0b" - ], - "45": [ - "1d8a64282f80e69e2c0166f035bfcbb523ef5d61", - "2decd65c2e405813a788dcf1c84ea787cc07d130" - ], - "46": [ - "8b81a27a239a8aff33d4a2670cba28676e510712", - "c76bc1f231f833951d31cabd6e8023219abc5f3a" - ], - "47": [ - "de35551503b69b0c40ce5a01d8919804e677d051", - "5f203a3252d8db1ac36fbe886ab25064ef5b7866" - ], - "48": [ - "af9fbdba406bb593402775fb58aaf409a2e93a9a", - "052d508ca7b5037bf05bfe80bb47cf657d86b189" - ], - "49": [ - "ef345db44c0bf85ed85963eed75012597f1888cc", - "d085c6b4846e370026794f24d472b5d8c2ff93ea" - ], - "50": [ - "28b4a9fbfcc329b95668c2b6a2a050ea4a836b85", - "f1a8d818f785fc9fe6e18df129762854461a1660" - ], - "51": [ - "63f3ec20026e6d00e349997653fa8d8dade12e16", - "9601cdc989eaec64617698edff2cfad97155214b" - ], - "52": [ - "779d113e46a5ca5f71ec8ccb5eaef81185b9d831", - "912c915cd8eb32e612eacc3b32858b2562c2ae14" - ], - "53": [ - "e9203e799687fe496beb13caf5522785cc355169", - "46bba7abb0ed6f38af3c01fb2356c8a128ae1129" - ], - "54": [ - "1ac3c97de1c7693a552e5ce74f982f97bf358d7f", - "a218f01fc032d2a4cb385e7bbd318002d82b4e25" - ], - "55": [ - "4a139039852a6a47737189d5b72b8fc31c0269d7", - "7c04c6daef8e743e84a1535715f62ec488971f5f" - ], - "56": [ - "083a29e0dbc1cc585e52befa37115c1736fb4154", - "3c181774116cbeb403b5df2dec03c5c43d809836" - ], - "57": [ - "e85a64e3919ae0ee2c23fb4687589d9b33e4a789", - "535a387d35c5234856cd41da8a86f708f32aa528" - ], - "58": [ - "2ba5f6f01f7906b9a5e441a58d8f0c5b5b56f812", - "0ce70ede2d6b8d482bab3701f3a5827ce28cc850" - ], - "59": [ - "92a66d2430c65cb3fa517b8184312ab6e35b7c58", - "8d962a1ac95030a4a408c2205f0d75688336b2f2" - ], - "60": [ - "dca520a909e7f1135b9be7ab96e50d4936f2e809", - "94578d8e433c07f23e054fb77397891738634f1a" - ], - "61": [ - "ad41bc1226fbe294fce27a36bda93eb99535bf98", - "660d9346d0614e349e00f18683b00ac500681c72" - ], - "62": [ - "d926b3c76f400a7a7bce004729867307bad1fa98", - "6e81ecc0a37cd34daaca739e66eb7f9392752995" - ], - "63": [ - "47c6cad5a32bbd787bc559b082285c505145f1ff", - "3d5067ee74e5d3264d6ffda757db5fa7fd3d146d" - ], - "64": [ - "88349fff53cf4e4f848a59d65b1108659b59993d", - "7a8bfd2f99fe39d242f2820dc0c26b54861e4ed9" - ], - "65": [ - "d2e07d2c8918a8fd4ff8bf8de1c4a0543166cba9", - "2b60ee1020169a968219cc46327655a58c77c7ab" - ], - "66": [ - "66fabbcaa6e0b45a13707c832aa1cf99d397904f", - "287961433fb953f1b7e300b71c0aa5ef8e6a2f40" - ], - "67": [ - "0f47e9e4ae9112e611c0d58c852cb2f5dfaf6198", - "a2dd7d6af8ee4ddb73bc99a32eb448f16b0515c6" - ], - "68": [ - "50bf5c4cf7a9ab8999dbb0cfc9d27d7bcb9cc776", - "c5ef5b1bdb74f8bc0d692b97d95d7c24a5c4fcec" - ], - "69": [ - "86feb59b77471409e42ff265fc1454b1ef320757", - "a156286944cc1d1b0e93ada26774e7589f6bf7c3" - ], - "70": [ - "35aae0ba53881851e400077d1d69b72aea49049c", - "62bc0bb9c97ede2b8e39c50ef1165d440519d1cb" - ], - "71": [ - "c6bb8fbb94b0e76d2feb85fc05a28eb6bc0cead2", - "76e11a02fd500679d07afb44355fb6c462fa2084" - ], - "72": [ - "c6184fd43dfdbe79ec3b854d72e7b3a782ffb47a", - "d70c5c6449386d40fc047e33d1282cd2d96f9320" - ], - "73": [ - "11aac80d387a26816c82a5d29a729ef1dda346ad", - "04144bbbbf6ee5e9c65d508f1d1abb456169323d" - ], - "74": [ - "9e98a9f64aab957f3a6a2f9039d915f16603b423", - "bc0d53d481b489c144ce4486d7203a95d7b4dcc5" - ], - "75": [ - "ea27e3b4bd2d54e5c4acf5a8992beaaa29516c9d", - "aa6622fdf7c88a872d016a1117718667812992af" - ], - "76": [ - "c552863a5d8d74305982c38d2f6ca2cbf2586438", - "a7819646b274581c72a6664ecc888935dd953d92" - ], - "77": [ - "eb0acdc4c71fd2bbf2375bb42299ff5e14e73ff8", - "8cda2744c1ba93608ae37753170de9b791c86eb9" - ], - "78": [ - "87df955325f997b4a1e6f667d81e471feebeded8", - "7f69d6eb66e93530fe1b2f3fe2c7278f66e63641" - ], - "79": [ - "54afa9968ba019fc98dd5b132c677941d2e3b575", - "84bb07ebaa0a3318f445ebd65952998b9c681ce7" - ], - "80": [ - "997e708da62316fdd04bd00992b3b8fcb9391f44", - "730bdc26b130f74d9c773db300ead524e8847979" - ], - "81": [ - "b26b5be353d24d0348de2621cec4650d25b5b3c9", - "586f0c96dae1bbef2bc1d7c71858df8fbbeddf52" - ], - "82": [ - "0b66c67db98ca86b0d1cdacff2f83ff1bb1d3db3", - "9ca8b45151062f8586b6327014e927095009cf1f" - ], - "83": [ - "f67264a40886d66d43517cc0f591e3d9f5cc9f96", - "bd80f2b1f2b1b9b8e93c2e36da7d171d6682d162" - ], - "84": [ - "41dc487bfab6159c5d9ce1eb27db1215c4bacb6a", - "7cf513e631d9c061c334d56aa5dda54dd53e5529" - ], - "85": [ - "31d74f5e465a09668417b6564c5e91ec42db6cae", - "d6e6585041c4c0764f317d030adb72c8f9c3753a" - ], - "86": [ - "b08cf6e989d51fae580ffc4881512a465e964fd2", - "874ed5e4062b80ad809e3dc893e4f11a6e32c025" - ], - "87": [ - "e1b7a13f7b06b315266813ccf5d37eed4e985251", - "e6055ee039737174f4ab19b531ffc7a2659689c0" - ], - "88": [ - "ce72f19c9cb07e85fc95edf61a085f12c7d447b3", - "56198cd00db9b8e8650f7afd1c394bb50a83957d" - ], - "89": [ - "6f424e3d4c6c3e8611c91f5fe64e98442943a0c1", - "99ca2ab02b5f505fb16d943aff540906603bcd4e" - ], - "90": [ - "698112ddb3afb8ca28ec1849acb148f4cf509a5a", - "d8866cc3cd02ebbc85464f2d6976f40b2d3eef07" - ], - "91": [ - "26064b27db013874cb44bfdc1bd6ae8e683b8d73", - "dbd122cce9b1e4a473538f73920e47c6bddb58a0" - ], - "92": [ - "4f10c4cf009db9a3b90d665423f9c3077c08e61b", - "76ec054c305499792283b9bee0572bee1be27601" - ], - "93": [ - "4ec3d377a5a3c8bb00351603596f18f0c5d3149f", - "efbd43e00b7c9e57edb481ae97582c6ed8e1b195" - ], - "94": [ - "efb2e5022184488f4497cf8977950c2c06b3c475", - "40bd2d7e38e36b4d13f54fddaeec71fc576e52b6" - ], - "95": [ - "9d6424dd792226cfb3f7ebdcbb98a23b17a95259", - "2634c5937a7567b60e1c3456b81205932fb240c0" - ], - "96": [ - "06ecb59ab49336fb86599790744868359c5b67d6", - "aa9cbc855d7ab79ef247f71bb8a82e8e2ad0da9c" - ], - "97": [ - "aa1522324f8434c031bfe8245f91adf82095fe3a", - "61207a03506bb045a4bb56c3100874ff355f45c9" - ], - "98": [ - "e21de6a1332d40c3560b07e1b22babe7adc1bac6", - "aecef85bf82536c4b396743ef56d4d0ed7d8f96a" - ], - "99": [ - "99467bf04fcab67f59d9e4b3ca5cfee8a662ec12", - "ac465b7fe2292d9074e77a67785a1a9310c9566d" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_030.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_030.json deleted file mode 100644 index bd510ad4c..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_030.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "058d3e5f972deaabac08606e33409a88d9d412bb", - "d55e62f8f27d3e973d4edbb56d1fb4c7b856b86d" - ], - "01": [ - "50372f62d60e3f595c26458e793163a94447284a", - "aa18eba3e8888c3f454a387c9af3d51e576b7030" - ], - "02": [ - "7b11f9a53f66e22515d7f6121335bbc5476d999e", - "dfae1fcf4663f41739c03226d137ae44617ee800" - ], - "03": [ - "81e048f673b65f61f81f2988c9a1b5639b71b0e7", - "675a0d61889148afce75ca801176c583bc02e545" - ], - "04": [ - "395ac6c510a4c1841ebf863ee307a705de6efa14", - "dbd344625e02365a07c9075006c8d85c1d91afc2" - ], - "05": [ - "a3cb20aa4e143ee7b528c7a91e6edc4e370f9942", - "f55de041c6325aead07372726ade80d9483a87e7" - ], - "06": [ - "019532d2d1d371558bddedf9e62dbf27e4e7bcf6", - "538b6c70c89bf2614ad1ceb731409cd41fd94a45" - ], - "07": [ - "f72baf6b10ada30207c3ee684a5274ee28ee8f2f", - "29538f535f4e00e0dda2c036e820bab90f503678" - ], - "08": [ - "e84afdeeed731e7938a1d9fdde03c9b6bb37b330", - "65d70cf43a52cc4537797e3acf37ba23b265e007" - ], - "09": [ - "6f81729f598f931d460af96179931e4778a70cb0", - "0bb7ebc0f9dabd49a767c5f65448d3f20a97bbe0" - ], - "10": [ - "6ecfe7a404aad1a46a38348e5b932559244313fa", - "e5688289a8ac4432b4d1d5824bbd56d2bdded87f" - ], - "11": [ - "248c9032039b2505f73e354aac8fb06b18ffada5", - "bacec3f02daf3dc1436939fd28b6d7a16d5f5c33" - ], - "12": [ - "c465348fd26ae8ed4d5d19866a0ba1d7eea8f72e", - "294a7b5bf36738a67da54ca324e8b619f5b2b071" - ], - "13": [ - "ea438569b24924265771a0a014711a2be16b59ed", - "89a9b906e7952385a80cc94f332ebdfd5215c665" - ], - "14": [ - "dc96debd691c998c79af5a6b885a436fcdcde240", - "802918320cbb9b3b2a6f0d9d85340715cf169be7" - ], - "15": [ - "e52796102fe88d4a262d42bfddc0c913e3147439", - "57778129208b7094a11ac1b5465d0a0244a5b2f9" - ], - "16": [ - "9d9319ab37637b0e56820c900cef3ddeece7cba2", - "675e10c8b21634b360d83948d0a54c2d68a247e5" - ], - "17": [ - "65eeced54c9772111953234fcf2b6d2945cd5008", - "3abb7caee252ec63dc5edcc2ad137c72a725a220" - ], - "18": [ - "60d56c4ed2f8499a4e21af919626bb56c53a53ac", - "87a99a0b75013dda7804710c677f6080ac998a69" - ], - "19": [ - "e54a355cc2d6665cab916692b28a44de2ac94ec9", - "4472d0b011368b87d4c54c8b52c88b4c77e54c70" - ], - "20": [ - "3cc7f13e7fe910efd41fc1eb4e73a924de917d01", - "f0f86db5f89ce79e6d47d11ec8b07134e78354da" - ], - "21": [ - "c799f56ad9f2b06ce185c48bb76f444f2a696f97", - "9ad9a6330c60ebaba5014e158c19e63169c5ccb8" - ], - "22": [ - "424e5ba5c6f348b87f03b2c4f3e316194027c2bd", - "7272ea882d75623b8d8a17e3b4f2dfc1ccb0e5a8" - ], - "23": [ - "3b356b7e1c73591ca0038d2bf33cbf1ae5c597f1", - "ec570d2cf166e4a9584432447b1918df96004c89" - ], - "24": [ - "70c8bddff1144b5997ad804eb3380d9cbddf5bc7", - "520457dea0ea576614488bb417154b4a3df93981" - ], - "25": [ - "7863f1f6047d95e400a451c9bf191269e4d8d2ea", - "7dc556d33c780db9aa019128a8dc8d7bc4b6fa0e" - ], - "26": [ - "113970069748838597fa08e6d534e6715f490b1e", - "add922d689ca7441500483663d78796ecabc696a" - ], - "27": [ - "a98f184de057cdb797e3fc97f1dfa46e92e5feb8", - "4505bc4f2976395b8319fb91c63d1fd7a23ffa7c" - ], - "28": [ - "121035ca024864176c834fe6d6d6d9e86ed1614c", - "63325f322910dddead5ee50f920bf027ab5f6a66" - ], - "29": [ - "29ddef61cea7c501efbd1ae83acffc87e13040a7", - "9c72dcf7b3d34ef4d32d24cd21c64fb2be252f86" - ], - "30": [ - "5b11b5b3163b9b14d508ebed5795667ec8ab3a68", - "07d0dfd454ad46f13116d7c41c9173d1ee7498c5" - ], - "31": [ - "c13324fb05c1d08326368a6adb39f83bff3090ad", - "60bbe9fb795eabf28388f151c3898f8845a8d9c3" - ], - "32": [ - "49871db3cbbb590c3f7d9945b67b771eed0347d7", - "56bced1135c60e51f837dde7722add31fdb601db" - ], - "33": [ - "a01a71fd01321c3fff8f92d2ce98cd1057215b06", - "a3a0f452582de8665242c7f44ec75fa4c11054dc" - ], - "34": [ - "aed8587668a8f1fc65eadff259066dc986494b8b", - "dcf9a2dd1fade743eccd85e0a1b1ab12e64504a4" - ], - "35": [ - "8ad13ac5f77f92b767a3764341798cc942cbdba1", - "6eb0594738d72700b9a6369e9451d60c5a2e2cd4" - ], - "36": [ - "734db2e5a3c8ab2da246c5bcec3ce4b5fcb0cf22", - "7fc530ec3b54239b5a734d591308e9db2c434568" - ], - "37": [ - "0af0200605dc5f5dd6c5a7455e5fcfaac72577fe", - "e771a3923cb72a32fadd8b6e342c4c31dc3a5327" - ], - "38": [ - "ce1ddfa691a64a2ef918100bf30d186a9e25ae7c", - "ce7bdafe5168758940a141aeff5320f86e0555ee" - ], - "39": [ - "bc8a0af9330178d17318182fb6ee1256e37653b0", - "17a602e1ecc790c4983b25284cfe81f9e5378713" - ], - "40": [ - "f020f0b28b5f6bf4f8ce3b8f701d33ed8e4bb2c2", - "3b7b5f11309bb6bf5c834296421b13b8f8565af7" - ], - "41": [ - "6b6b893779f3896712d32d65d9cdd57da0dabc75", - "b4879115c441dc761778dd7628c68af75aa43bd6" - ], - "42": [ - "0231a2f43d3ab71c427cba864a120ad1cef14805", - "09863330a5e5d8b2bf7f92e5b9b6bc7bc582e523" - ], - "43": [ - "afa6d60321e6bdbdb35e812b13412ba99631a2b7", - "68369499fc8a98bf23242f3c1b8894c44f693440" - ], - "44": [ - "f61394c95be3d9df9a14fe5d64b8fe4a47dfbb8c", - "4fb316e574aed872984cd1760341348fcecc5d97" - ], - "45": [ - "75683d9ca38ba2c51353054a944b3ce763f1e678", - "f69929f3024060be05b42f9831c3c57b0a693ec8" - ], - "46": [ - "065f7b449ee6d018040370ac7666c1b05c3637f6", - "8450034ca8db9914a1a02dfd21be3f572bd5c05f" - ], - "47": [ - "36c53acd7976de31b6ea32cf7b25e69409c7785b", - "8c967ba7366581de2dd23256a9f278e7c7da81e1" - ], - "48": [ - "92159f2d2f35583a2bc3bbeddef75e75191025b4", - "ff0747c85fe2b4a2cf9952ee14efb1d2c2f78e60" - ], - "49": [ - "db26d203861f945b5ec9b93ed0ee5dcb0f67b425", - "cabc9c869bf7e60a5d1e651540dc7a6d6d60a9dd" - ], - "50": [ - "3a26e006130d4c62ddee9c0f2c0908ea5c64d19f", - "688e79477fc78d87cb628f9d1baf188ffe2c693c" - ], - "51": [ - "add9c0ce0c3f5ee1f46d26fb8bdd63403d12b4c2", - "3c2fd10ab4b146614d383a104f8a0a40b42e1f16" - ], - "52": [ - "9a461f77858f6f1b7d2fd77b2f8a15b59d713c69", - "70ae9ff9c4e0b3d5cf87493300cf78c72c622190" - ], - "53": [ - "d4ced5d9a4c964f00f0d3e9bf173f685d1395d05", - "a78b08f1879109b0dbf38b3582bc193ae01ecce6" - ], - "54": [ - "4ec3c0293c72fe8ca2cb8726f92c04bfc046dab0", - "fc5ba29d3b5248b2a590ac8a1d8dd27a735ce4ec" - ], - "55": [ - "194b94bad880d05fb3b95de70bbe2c78e0261c49", - "61d8aa529b0197f847513f1057e0c87e46b40300" - ], - "56": [ - "ec4239b94cb0e0bccd7de80f355fc4b84b1f67bd", - "9bf3d7d16028fa8b6dd2ee9f0412764c8f4ff4e2" - ], - "57": [ - "49cbc7377b4b5be2dd3bf305a508f6fb3ca3bded", - "9e636b8dfdeec6d29d078ae80845908da24769cf" - ], - "58": [ - "24b564f62a0e76ba8e9572911aa9097a156e0e52", - "90de0ddcabe0d36c26e2454e113d7f6872f9b1e8" - ], - "59": [ - "adff96d6a23e407c94ad4c11b18017f790b26a87", - "abdd549353765cede53c3857724970b9617ab0f1" - ], - "60": [ - "d5a6915de81100665aea818bc45725b135728aa9", - "be41ec8d98011de84a70831c8a8d010ab448085e" - ], - "61": [ - "290cf45505b08be8756c552b9b64e1587401152d", - "6139cc2287f8f40a57f1d4b942b646e0dd5b4357" - ], - "62": [ - "1844086e8584f89307f4af3daf682d74dec6768b", - "3fe90712f5518ee18ff7eb340e53e5f296fcc8f2" - ], - "63": [ - "e3a8eb6576805bf06c1779009b938d35272cc034", - "826b8ffff1fca7b615b27842be5ca20dcbce3c28" - ], - "64": [ - "0741af4e8a5ca5e78f7a1e4d02eb54c3391a5a15", - "f922d5d8c3dc53104d140b4e71e723d97686f8cc" - ], - "65": [ - "99a8153d86f738481366a0a767e3947e479fe297", - "279873de051aca4b55122c70984428dcc076b27e" - ], - "66": [ - "d14c9f1e06cf9aa7d5d9ed8e17adaac28db12a65", - "5066462944540fb789ab3966f8e806ba36594a3f" - ], - "67": [ - "60f66a000c40ea698dda4a2f6e1c2865072d10f3", - "53455aea7590a4ebeb6f4c5d3d687646a69f23a2" - ], - "68": [ - "4cd617913f3e1a6e608122cebbe3ecb73cb44b3e", - "7e52ffa6aa354b7acd0e80d748f4b6c30214c42d" - ], - "69": [ - "d86fa92e66aaa498c6b02c890e6e134d6d03d95d", - "0234cc3332c736b787ed510ea6299fa8e66068f1" - ], - "70": [ - "39ded9045d5512395607d5ff596dc30927ea33d7", - "ae9992971803f04829ea80c2b727d19482aee052" - ], - "71": [ - "05dbf97be5ce34128722ea270b903a26fd7fc848", - "2eef4751eb584d2d5be33cfb48a713d64ceb977e" - ], - "72": [ - "7aec4b35dca075c92d4fb972e1454422b9583de2", - "57bdecffa05d85e7e17162bf8317fbc372da0f23" - ], - "73": [ - "e68de65a6ad87536a01834a567fbddd251845daf", - "f64dd6ce5d57e2d4a4cea9bfae0a956c66fa1b0a" - ], - "74": [ - "424ba1cbf363b4eb5a5c6e0eb16d8ddebd05b9c4", - "c2b738ce559c55da9a8471db2d85af33b922f19d" - ], - "75": [ - "e83a418f81c51108817707d4bf52827a439832d7", - "128c559205e018c4599bfe78b9da2eb6f6b8dd42" - ], - "76": [ - "2a8f45ac8ba857e649def890f9a500a6bde3adfb", - "fcab52316185b1902e65adae34205caec5517803" - ], - "77": [ - "1494a437443ba8eb90cd4ee7c91e80bbf9845046", - "35f58047ac180dec53bfe28a578a26479e85e7a4" - ], - "78": [ - "ca26062da4db4e3a276c4276ebc84f879ee2d890", - "8133b3fcec3bcc3499b5aa0ef624e03260afe527" - ], - "79": [ - "1bef434e33de8d93fa9d70c43457305a15188694", - "18c8572c1c3599f48782dbc6b6dde89afd58bd73" - ], - "80": [ - "039e34f414f9054e20c6218c2a35c8c66fc857b4", - "1264a394538a823e0efc3b99197dfddfd6c07b07" - ], - "81": [ - "05c085244f3f1adebb262574da72eee62d6defc2", - "9f0ac5caea6e8cbffcdc6c5caea3c4038f79d101" - ], - "82": [ - "69faacf197b8c5867ff3786c115512ac23e5334e", - "0188e7486fea0240dd705ab88718896e865f11b3" - ], - "83": [ - "4ed9c06123ce4e6af7057e167f87dbc8a4c241b0", - "03889daaee0c42828da33c1a5e4eb56c883b4eb8" - ], - "84": [ - "733d527eaf1e0b0e411eaaf50e3f5f5519657d7a", - "4d26c8032c6ba4e58f1247655a77766422bb1d0f" - ], - "85": [ - "9699d9f0ba1dd794e6e8453b49a5e4c873236045", - "b4d6f933fe2e18c3e65cc78dac65cc7282c24fbe" - ], - "86": [ - "31508ee66177645d206bac020a827bd36955883a", - "c486dafbeba619379a47ea75f133890ef59afd37" - ], - "87": [ - "d8afdac0614a62d011fd8ebb5b1db96c801c1795", - "818cb8492c0861e01a62cd6b7be7de25e081984b" - ], - "88": [ - "8e88f3ff7b75ab794e14d5bd78ab9440dc6fe4f2", - "90446c4bf7607ce7e248879d440e22f3f20bca84" - ], - "89": [ - "bd2b680092e6a0227b429d66e8fba281b885fb94", - "f4d12fc48859795b6872fa2cdca7547772b596ec" - ], - "90": [ - "27932eefd985534bc746636844faebc8e8526f18", - "544b38ce78eb84ecd7463897652b7d35ac1669d2" - ], - "91": [ - "e3e65065b2adeb5cefe7ddce21150634a0f54868", - "9c78e4493e8a3485fbdd7cd438ee47e3a2104268" - ], - "92": [ - "7fb5ef289ed417713a2906d545f85e7f65afaedd", - "6fb7dc455cc290326122eb98b555bdb007340bb5" - ], - "93": [ - "69d999e88193cc86182884f01e1dfae49beff894", - "02967948f8b5622a30117c134757fca734001d47" - ], - "94": [ - "57de657ee9867a1e58b2d984181a64d16afac4d9", - "4dca7f52205cc7b8798aad33b22f639b35d11911" - ], - "95": [ - "82d271638f8cf5fb1ab99e617566b6f7f20925f0", - "3d8fefb9b533933283119e0c0b9d698096f8a298" - ], - "96": [ - "2798d0b101756c4c4c34e9e644c06327dbb6ac43", - "7a24648c658b48906c2396fb0481def3bfd0d3f4" - ], - "97": [ - "804892f4fe71ac13098e6f6fe97d16681046007b", - "4c1858fd426fd6414067224f8585481432b8e723" - ], - "98": [ - "2b27e185bb8ab7e94ef8de6b9c580077e8def0d9", - "a6450dba8e70f05e84af2a6f47c643f8acf87371" - ], - "99": [ - "394afe474c1a12259cdd1fbfdaaad50bdd77b358", - "0dd2426158d79429533991ea1c148e3ca586c164" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_035.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_035.json deleted file mode 100644 index bce974d14..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_035.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "4a0d0648d5e762b4f8c1d638331de3d4f51ed4f6", - "9a52e0b3d5363da74e83c3e63e746cfa32e08b4a" - ], - "01": [ - "ac41e65d0b9c5ec94dad02c31364077af48b5437", - "014783ac0e13df3b45b5e0c4beda98e66c3043c9" - ], - "02": [ - "ace9d2e116ab00fb441759f60e503731fcfc3f4e", - "2d288f6d1807a06641bbfecbdcb4a683da1c45ed" - ], - "03": [ - "c3c08fd8d6bb442f89f9adfcef083dd906b08245", - "f05623ba5fa7901628bafb9b13c7091da3ecd62c" - ], - "04": [ - "e0cbdd5cc327eed78dd163ad81dc5749ea11138e", - "23f3cd7b2bdd40336ddd2f7be8d8075f00a4a6c8" - ], - "05": [ - "5b2e4343083417a1e417ac818035af959be89f9a", - "036b0b4b6244390416bb4e57ad9d0ba8d3945d16" - ], - "06": [ - "4bec47164a60379a467cdafdff93aa6d4c3e209f", - "5f0f70e6e8d70844a0906b8f32d99176b723f280" - ], - "07": [ - "d67434a5b9813af6e2beded8578415f21c2b1fe5", - "6549a82161358bb63326197c85e477f5bb2bdb1c" - ], - "08": [ - "92a7003e3f5727450fd42e097c17a35fa309fd66", - "36da7860ce226f29b08ce2a4f1cfc57088c48430" - ], - "09": [ - "24d378d054f261273bd351b2d0a434025788eb06", - "b4cb1c5d282d0721ac9f72338d443555936d3df5" - ], - "10": [ - "d1bdcbe36f9384f0204047d09e89d0d7a9b267cf", - "29209fd70ffe6226571fcea62afce43f5032a6bc" - ], - "11": [ - "0ab580ae9050c8d0dfde86443501e7feae37f859", - "539781882637bb9fe49dd4303bff5302692cd60b" - ], - "12": [ - "4f827c1b14517b86421508d777b36a900a7e11d1", - "539b3507178ed112faee8ec46fa5b6d757559975" - ], - "13": [ - "2157cc61eb82eb43471e2c0c47542cf67ae169fe", - "cfe99561fa1177c21a095814341ed3cae9928386" - ], - "14": [ - "07431b900d25b68d38c946f48efeaddb87150b9a", - "cef0843e3c0bd71d5309ae1e7b51e4c57a26907f" - ], - "15": [ - "70f8cec507abee642bef31bb7a14d447d61b711b", - "9b915da074e86cda12da51467a74f5cae46b1cb4" - ], - "16": [ - "93010c1498f1fd982a7f729a7f025f6e1f9fa9bc", - "0d1e8e4843b63f2104938d19de95410c66028c9b" - ], - "17": [ - "fd934ac112f747ee10c37328e6ce7303f99d58ab", - "c1969f5de1a9e5bc047cf06c38adb48538173ea8" - ], - "18": [ - "c76e845db3350a2a5efcb66e0d137431a308e561", - "4ac78450d7efac39b52423645b5f4e4a3eebd06a" - ], - "19": [ - "3716a24da9c01abc10668e09c08427f34875b323", - "90df5e6a8554d2a38a3f1c8fd7cbb53e33b03043" - ], - "20": [ - "9a077c1584a13c7384b218ad1f8b3e34f7c70da1", - "61d9a223c044d06c1c8dbb45b60cb632a85ae3ee" - ], - "21": [ - "332c3d4ec412d95a77eda4c4756cebb45e71a08a", - "f33de915be2b9638a9289e032faae3775c7161c0" - ], - "22": [ - "4d940bdcdc38e3db574a8aae6247788f148a2d90", - "8a4bff1af8dede66d82bd115b022de03a7af0db2" - ], - "23": [ - "81377ac3fb7267069c8a0467802da87acc1f81fb", - "f67d8ecb7a7b10014f4bf765e9219a1acff81777" - ], - "24": [ - "2a1218991f193140f1e96e61c77b49b85c46f7ba", - "57e93ef356ebff41d0d902b6c8e801417e8abc1d" - ], - "25": [ - "7f12d54837845d13cf19b8408a45101baf8b6e7e", - "edd372abcfba30641829bca748e280a540a635c0" - ], - "26": [ - "96cc0a0098737df944226182f429d73867c2e306", - "3e98cf30fb9bab357b90c2f427e425745574ffec" - ], - "27": [ - "dfb6ec82e68bb95a07f91b275cfd591c1d5f2f8c", - "c9e6ac12b00c87ff635fd082752330f9e91f311e" - ], - "28": [ - "a96153acf33c0e2a17f4d6208d5993c3812b611c", - "b48a409a92d801914db6d5494e3abf50c53a51f3" - ], - "29": [ - "82eaebaefadb478aa1d05b47de15e249bfbbe53e", - "0a6f63dd53f68cf58c4edb6fac629135b3626e2b" - ], - "30": [ - "75a1bf8aa5059a63e12be3d5f1252659bc1760f5", - "13ed1e65d9ac577ed57234c8ba83ed5ae1b9b34d" - ], - "31": [ - "805ec8e552ed7ce604498019b1a7eac822a4854e", - "5b58982fdb9950a5c1e0004c7a3ec4cb8b737a2b" - ], - "32": [ - "8dcb6390c5793726efb10d46b8b3f1ee1e9a936f", - "5e1523637068576e4666033734d51f11c9a8acb8" - ], - "33": [ - "3a3377cf548d38a1c841a31d03939247aab55357", - "a7c4ca9797ed9b6be35f10765f2dce81b241b460" - ], - "34": [ - "f14869a63e25beb83ba9af56382caae5781eb2a8", - "fced6e90ecc5a7d8c7b4c049ea87d3521d4a4614" - ], - "35": [ - "972e9cfabddf8f91a3c259d116b88da440360f44", - "032de53ddfc5acea4f43a80feab2df4fb8d7f7c0" - ], - "36": [ - "5658fd60357877fa9070eadacc34107d98ae0692", - "d95e660010122ec693cf49e93a7b56e04b80bb74" - ], - "37": [ - "b74b6850f0dc3807f3263cef92b0b46ece14947a", - "bcd3035844ecc8c1d2529f6173d770bdb0f0e93d" - ], - "38": [ - "84ffaa3a8175ace606d73bc16a3b9ef96bcb1237", - "d3bc728df86aa7a3c0ecd6318e3b89c24d0cfe8f" - ], - "39": [ - "937b7a8e57d45e4fe0fcd3c082da87414c35db68", - "a5c147e1f07563199c848ff4222270722f7c1be8" - ], - "40": [ - "e8f5eb4f6dddacf2ad2687ef742940878f6c3ca1", - "5819fbf29255def03a90f2cccd4916fcd5b04c56" - ], - "41": [ - "fa7fe18304189280fcf9791a3d545d989541a950", - "5eade4187e6df34a2b93ce92966c8ffd9d38c84c" - ], - "42": [ - "901a031ebcb8b413dc34e16133a15a38f43cb4b4", - "98ce3c905d63e51f921f92a1d188ea47429104e6" - ], - "43": [ - "2655065734f89c5e47a0495505947977639cbf52", - "e95e8a97937e56c50af2a3e95a6acd616dcf62ca" - ], - "44": [ - "ae22349f8b7bc0c2ef068525ec2ad5d95f485349", - "cb15d8b9d4dc1e85d425290b8de0bd0ad6b64beb" - ], - "45": [ - "919d95d8fc98474bae3a539427e1d0bf410f9619", - "40688121cb2b03f8b2963ddbe3a3509f6016c62a" - ], - "46": [ - "2d1597057eef60688603102e6fdc1f71d694e4e8", - "61dfc49f191fa75b7118a6d4487f9c6c2b8ec07e" - ], - "47": [ - "fea285820fa0fe19826cb8fc6118097a469eb08d", - "c91f8c5ffac245779545458d4fd9e943d65c66f8" - ], - "48": [ - "a85c2813e36469565944c07c0aa3eda4090efac4", - "3c088e5a3322a9a8a4de50e118137ade76291712" - ], - "49": [ - "5346bc56324c4bf992d5cda39666ec7b4f22898a", - "d783193b11aa3a2d442bd95ebe6aef0deb4038db" - ], - "50": [ - "77c0defd3e3853ec6d90ece6f5a339c7ddf51a57", - "82143178baa9a82874c64838396d63b8f103478f" - ], - "51": [ - "9711d41bd3333d59e8fc35456be83a48192c168d", - "e0eef714e6441a8c055bb1a81ce93c7e96ea9564" - ], - "52": [ - "841eb7263da21a26da344a8da4b23d8d69e826c3", - "4591ad3fcb63a5a2671495c7ee26c84704113541" - ], - "53": [ - "50df86fbf065f89f7051990f44b692abd2837bf7", - "102fb23115b90b772926215365cf3f7b8e047813" - ], - "54": [ - "9bb49bbaf801ae3b94ed5aad4804f4add3be1f1f", - "7aea067f7c51158b119ea0747229c960a9ab71e7" - ], - "55": [ - "1aa9f1cf7241e14370a8c189d23ef2cd93d64f54", - "cc182193d96b14af283201653ead87f28333bda6" - ], - "56": [ - "c29f95ad7fa34b96262ee8df6bf4bbabe8d033c3", - "868025e0d78124d500d7f591fceb5a53da3f3252" - ], - "57": [ - "72d5537832c047951709855049654d4e4a2268f5", - "84da538f719857d618ea134246f569ae2f9b1a45" - ], - "58": [ - "a8eceee67c74ab2a3b2d7cc54727b8d47d78c2d7", - "cfe798a43d1d944cb9191385712f0f662aea126c" - ], - "59": [ - "62c2b145fe629abff15fd40f9ec5a01acab547be", - "05329a0a9c78f0f24b68a51791972312a75af5d8" - ], - "60": [ - "e9248652cc093df523f6f9f65662487f1059c63e", - "ee06e55e9ac89241ae43e40a2509db2800a98fbd" - ], - "61": [ - "2ddcb1e3d12acd874b426e95391e3ca8f7fec027", - "1da92e960248315692bb6bae448da6c7401a5086" - ], - "62": [ - "b4d85ce488e92a26847e72cc1912948dcd655324", - "ba6b2b44810bfc814c7db214095781bf7ef6e18a" - ], - "63": [ - "7a7d60043291cebc81b3a1fa671cff4f49d8dfa3", - "12009fc595cd2ff48d6a34e1e3318e0ca4893d77" - ], - "64": [ - "9ef8eeda5aaeefe4bc4bfac519ed5bd1814a5683", - "57c5c1297c1be945df7805435d259af4247e22e4" - ], - "65": [ - "80955acd70de7177e26bab6e44c045c2d985b61f", - "067eb132cce1bcf3bda909c509744913a6bc3cb4" - ], - "66": [ - "99d50f13ad9a57e1ec110594d5c7bf8329eeea65", - "30e5684234f8a323d57cf89c03e727009234596b" - ], - "67": [ - "936efc76bb6e87bd1ce00fa0d8a043c5c59bca0c", - "00324907c27d14d064c045d38ecf9f85fe1bae13" - ], - "68": [ - "f06b3e9a4e224af5ba2306c5eef379acaf1e2907", - "a4aa3b1111f44544798864d7eb57f02c0a039991" - ], - "69": [ - "6e9f2c00255e34dc4ca7081dfd4a361dc4470984", - "9c5c5f928971118fdeb65b5ae8696d9538d3145d" - ], - "70": [ - "817f7dca54180e285671dbf9939661df65784cd0", - "cffd01126dbec5838112915d593867b9eec8689a" - ], - "71": [ - "63ac3955bdf43081dc11d886df00ed08366eefd8", - "6d69425b0418b682b313f67d8a8bfda3e96a7bd8" - ], - "72": [ - "19470ac3caf0f72cb81bf2bf9d5d3702d1566cf4", - "cd87c53e11c6a27f2f4b9d93f5922ec22e4d72ef" - ], - "73": [ - "9b0bc015d24007524c0d43dcc39cca373feb93e7", - "4d3d68e8826a5c7cb251e995a824cc12e9273132" - ], - "74": [ - "7709530ac2fbbd8f3a446694c4771c6943bf7266", - "19c71ad4d368aead027424e15cd3ac61d3f4a342" - ], - "75": [ - "d4cd7dc2b6e80af23f6799a36b6eb538da04331f", - "44300d559cabd772abe5f605b712d0f89404b2ee" - ], - "76": [ - "d7fa1cc8984325f6ad9f8046455a60dd387e2669", - "0f17d58ce80243e86fd6af1e4502e2136da8fd81" - ], - "77": [ - "b5f922812627fca80a14d002d4f1c275e51f3d75", - "7706e2d5731604898f6c855494bea9691f5f4622" - ], - "78": [ - "0b93212c32286d80d7db41dfca81d1f765d82a9b", - "7f6396aa7eae1548a0cb60edc9a34a77c4f0c862" - ], - "79": [ - "e69bcebc38881202aba0d814332bce2e8889ed8b", - "438a46b7e4704f82a8d47ebd79dbe32f1f203bb1" - ], - "80": [ - "e67e83fe66aeda50ce2c7749717f4d08a56eb41f", - "80d28017a31198fe6f14b0327d4dc20e8b56c4f3" - ], - "81": [ - "dcb84e989779e35fb9811cdd1b6d31c44868fe5a", - "c88e4457f6cda14a5193b3a4f17b95d111dd1730" - ], - "82": [ - "f04a9a6a43829fdea855cf86b07e80893766817b", - "cf405075a0e6ab05d033cbcb4be8063a761871cb" - ], - "83": [ - "4303af66da34128db5c06e51385aa1c69a8912aa", - "4908db6b63c015aae875a098ae114044444497be" - ], - "84": [ - "ae647f9a8446b5121ede5bb53e01a9467c8a8647", - "4c8c8944c7fc144875d58e3200f9e7dcdfad7405" - ], - "85": [ - "8e80304e00f62256676b4dc23bed02ebd33214d7", - "394c51ed988f32aa65dd0c290f8f5c88a6455de8" - ], - "86": [ - "aebd8f9143a1d4486bef653e0e89e316dce163b1", - "3829967e2bd8ffeb0f09fef1ddcd10db16109023" - ], - "87": [ - "ebd316c2e206246fda7118bec9de6e74fb29185a", - "38bda81e591c124a2e92f3c2fe39ba248f341235" - ], - "88": [ - "64450e8e1ce290083d18aa0bd1c172ce78e04e11", - "72fbecd2ab5fbebfdadd41f0c7adaf41c171588c" - ], - "89": [ - "e9aea945f27bc86fbebb32edb872c638761ac360", - "e6f3442d283aaae7699360366bcba048e8fedf71" - ], - "90": [ - "902aa6ac4381f3cdf0434a6a16055792f7c64575", - "eb2365f1c8b3da32b17a0be13fad449c686eb6e3" - ], - "91": [ - "78fda29ca89f8ec1a165e2ee9c5b49ac6b0cabab", - "0a406233cd76d9a8784d5f9dadd7c5093f7af747" - ], - "92": [ - "e2cd8f5004b93b2f02bd4a6d95347c0a66a26cb5", - "1cc7e490815cd79b3efb4a82cf4d8a047d7f1cf3" - ], - "93": [ - "0e722c8840f1e38402bb5cf44f248a966fc7421e", - "1308700e5bbed5c18ca412f32ed4b4089edcd0db" - ], - "94": [ - "da8054034d72aad733a34dce13cb7b49a9a07ec8", - "b7195aa5135f8c10430ac00cd674833e07e207ae" - ], - "95": [ - "6315b1c4aaa7c947320aff0243eac28aff84324c", - "54fa1edd952f5e711e8d4aaed2a564ad0da91179" - ], - "96": [ - "375fbb3cbf124e995e0405e08120cc46035f745b", - "1e392e9ba0ce870c338579158bbd9d3f36185327" - ], - "97": [ - "a1f1fc2ba2547267d8c436817b17ac0d16b746ac", - "bdb36252dc682b5a2555e42711675109cfb96a99" - ], - "98": [ - "59f4990851e8b6acf27f2fe537184acdbcabde7d", - "7923b8b40279f12bc17cc618528f9bc81b4625e4" - ], - "99": [ - "8a5fa0299bc7dba87a03da93244f6232bb1a3170", - "8243741aaa399b18c32c0bd44ecc49f55ad98e9b" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_040.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_040.json deleted file mode 100644 index 3181c3ede..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_040.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "fa5e66b8509c87f61c623bb8e93678a46e414b54", - "dcdbb2b509c69fc614b593ff248633b132d506a4" - ], - "01": [ - "e812219358b4c966b113c6870fc377a80cf38e5c", - "7db2d5747c5786aed2ab6fe54222a77ea0e8ac77" - ], - "02": [ - "c42cb018346e76c7dc4d7bafeef244afbb98391d", - "8e595df0dc24b00131cf330df8c68d3e28c4c5f4" - ], - "03": [ - "3a34feb96252a2e21061c1fab473e8fc652a3271", - "d44b9a3ac2130d78e5cd46dc8697e04a8e8d06d4" - ], - "04": [ - "9a9b9aa5267e3d60110cfea1886d0698403afd19", - "66700e969870ffa03abb90cf4de59f93ffea5c3b" - ], - "05": [ - "9c05c0a05af3d9028173ccb0cf5bad29d6cdd534", - "fb0ca9785e6d9e4cd9891cbc0aad7492d8303cd7" - ], - "06": [ - "68676b312c215326c5c3852e796b0702fb878909", - "0392e4fa72611f83dfded008db76d168983b71be" - ], - "07": [ - "b7904e71e3b880eac47ff8d9ff4b239cbde88333", - "82591125f2faaf9addcdbca1cc7931ca213e7209" - ], - "08": [ - "26ad1e96bacadd7447d3551f9886e7a7b422b6e7", - "f345ff8561e5a44ea6f0b1100bf259182a3c4bd2" - ], - "09": [ - "aa1d863632be4846aa2f8850f94e787d61d19b8d", - "00422476306d8b45490eaa875b37b49df603237c" - ], - "10": [ - "08825345a47e0cb80066e90a0778c33016f74e06", - "42af510ab0ea1d733bd23e34216b25dc3d40f09d" - ], - "11": [ - "8d2ec9942a435bf40691ba8e54741204762ca6a4", - "cfcfed95ddb9eba12f8be19581662893c3982146" - ], - "12": [ - "99577438412f1a79e35bafb22f4e0e6b468b2ce2", - "fe6e75cd40e8822fc86c59fff779ee7ad6b2e8de" - ], - "13": [ - "7c855818c8ccccaddfb126280d7472c8d2824cdc", - "91a7a5940185a4e2d3cff275cd963abe9ac45d1a" - ], - "14": [ - "a203275dcf8e08c7c534b9e8a49bb2e8fe864bde", - "57c51c6c22e653b4226ef3ad665c9825bf0c8e81" - ], - "15": [ - "a024e157f2d418c6ba366da88488a5ac12008fce", - "04923df451752b3da31080f83173d822d0622c87" - ], - "16": [ - "ebe78fd0555d5fafd479eb711589d93e530e9c61", - "268c02ea4100f5c7d30df09052263c6c96e6ce9f" - ], - "17": [ - "4cc222cb92e123d2b058b0597e2dcd595ae5459e", - "7775b7036e91a83f5fb74bdee72292f060479180" - ], - "18": [ - "ac475c2acf828cb982bd2ec1c66e362a112663f9", - "3b4e863b1dbbde833b157be8eba89b1a658ab9a8" - ], - "19": [ - "bde225f39a77f43617698c0962fbbebb59484d55", - "ef4d401e3be1e12e04c61c20d767814ec6a3600a" - ], - "20": [ - "2e062f3e047669060ccc93683dddd150c7345310", - "4a2c99853cc60b014a7390fd4d0dab255cd9b037" - ], - "21": [ - "5c8f5233ff63d90d42f5e2361891eeeb3e4b9d33", - "4c48df58b8f1bc75cd20e2d6c563cce87ee5c10b" - ], - "22": [ - "39e61f33bf08ddf7c5efa9b18de916e8377017b2", - "391e2de93f4721641350a08183b3e982daed1ebc" - ], - "23": [ - "707685f7fc09345ea76b433f094f2404c83ab11e", - "4275b47b575b48b90b1a064537aaec50dbc4a043" - ], - "24": [ - "0a3b833b8a195130f9b73f510aab037d0a9a4d2d", - "4747f25c6b1078c84a1ec09200fddf04a73d765f" - ], - "25": [ - "064c21d545d182118f1221f014e2debb5ef8a8d5", - "19b0e6abc60765f1b236a8bdff21d073419014c0" - ], - "26": [ - "d7c64b9574b1878f916010373950797c9f6f455c", - "aa649d9bac0cf27742a90ea85e93ed0d0a1f34de" - ], - "27": [ - "9b0b40373c6b6b3dce759d24f04442af184e2082", - "eb32abbf58fb9b0d7c2dbc8941276e4f7195958b" - ], - "28": [ - "78976022a6c7c50f2525f97aa93659bc9426f8ac", - "c042695886123049d09d70c2b876c4ed4818a55a" - ], - "29": [ - "dce58c98e891af09962607632f578c93470cef12", - "f4b29cd5a1ed3de285fd737063867fa3990704eb" - ], - "30": [ - "8da0cb45c46028806cfa3afbdc5c14a6c54071e0", - "0b30cd9db814996f5075cfaa1ce25ff834089172" - ], - "31": [ - "b26ee3212b4eba81b1543180fcf1b710716eefe8", - "6a8518b3f0ace9d860d93d332ccf97b0054da259" - ], - "32": [ - "0bc03481494c7bbe33529b3bd5046db1feb3007e", - "8f31927d90c5fc59a54bde9c0158b5cce8ec9117" - ], - "33": [ - "aff514c1d23062f9a40c0f0b8ef4313bf2958f6b", - "af3986359d55ee586097aa6e8f5224693ecf63fd" - ], - "34": [ - "7213e3a68195f5d9a941b2b69877ad6c2582bfeb", - "39855f390bd7d100a5cb70f67aac4724a4f1f8b9" - ], - "35": [ - "28cac6b7a7b54aec75eff4e58dbbb77ea1821c9c", - "a0e231172eaab87ca81ecf17e883155b403fb679" - ], - "36": [ - "64cda3d4f992fbf7d58d6eaad310aaaced431b55", - "d9e77c8a626fabae189189a3bf4e82f8cdeb3b0b" - ], - "37": [ - "29cffb4053124178687f75695d9dc368b6869b83", - "435658e4515160e651b5af1978b3f1a68abc78ba" - ], - "38": [ - "badaf4913a403ffba151fd318121b17398309f1b", - "aa53b3cdabc2a553005b9dba7621a6569df2dfd4" - ], - "39": [ - "668d5a2a2f71b8f2910626be3f2fc85c2b6580d9", - "a279422b58631b1efc2b3bee62ad83c33c51b94b" - ], - "40": [ - "36964f5b2a0125d23d2a0ca45c060f414f00273d", - "69ac70ce29fda2afdf5c98c9f3d11222720ca25a" - ], - "41": [ - "82bf1fb739ecefcfbcd95be9f9600a89ccf7a383", - "c9b50ee2ed331eb8952438e70ffbdef522c387d4" - ], - "42": [ - "ccaf01c00beb8eb0bc8d0f0964aa8455a9af032f", - "d589cb2f87cd8cf26a81518afc70365af43ce757" - ], - "43": [ - "6e2d307cb01c723e353b2cb5bcae00cc97adedc0", - "6c790a9c1dc1e005213ec6a56dddfae62c5f2173" - ], - "44": [ - "2a69a2b0e45d6f2187c261986fe05a8fa51816ba", - "10d00ebbc58005957c0f512f27dbc571c0e61f26" - ], - "45": [ - "688773cc86c26928503058ff7406c7f4e5a6e00b", - "4c09ef5139c741733bbe4449665ce5246b00dd78" - ], - "46": [ - "7b06d9f2d638a8ace1643e78b910be2038b411a9", - "848d0e028e494c49fb2d17a2c2f7ed6a3625d55f" - ], - "47": [ - "e76c4ed9db01ba4984f284459b98be2fedf0e49b", - "0913e931e74181e4e90c196b62b4e8df17d950f9" - ], - "48": [ - "ad9299914a7f4bc138d8631ebe74ef7b949e3f82", - "71ad35fdcee09f4b39ab86dc184b1e684f943244" - ], - "49": [ - "c86d47fad62bd1d4a5c8deba6f78e6e9a1681372", - "d7191e3123aa6898a57bc141e538ba717003bf6c" - ], - "50": [ - "c17f4e88be8bf49e0f0eafa830e7d31cf30f8643", - "cde75c30490ac440784c528a0db93aab83ee9936" - ], - "51": [ - "80e5f5f37b82ec6c57722d30e529ba600bc94e8b", - "f502cbc23ca000ecaa85523cea98ede1fa785fd4" - ], - "52": [ - "3e0f57cf0b271013c69127ff09d0807392dd5bb4", - "2a75b05a5b289127972d20af9c6c39fa51b3c40c" - ], - "53": [ - "e09fae8f8e83fb0032ce4d6d2d906a3459bf8fda", - "98efcfd129d306cd5699ef7c2b707e642515fd2b" - ], - "54": [ - "0a711ee7428c690efb84b8b77c71eb7583021f5b", - "6746099b00a365e8122c5af4a0bfdd60eda537f4" - ], - "55": [ - "df6441acebb2b707bd027e62e32e6c00a05258a3", - "87d55706fc13ac29418474d11f3582335449d7d0" - ], - "56": [ - "2ab8ee3b481cde42501e9d465c9308e93b0f26ef", - "4e3b7355cc1c89944a5cadfceb360ef9ab8bdb48" - ], - "57": [ - "0daa75207cf88a314d1c7eafa6b35d84f48bf5b2", - "e046f9587475f81be1ae66447726274843cbc149" - ], - "58": [ - "45463db20c6b3b5a88e124ae5dc82904e511229e", - "9aa04bef62915dc6ed8a3e3f7bd7236d2b43f1eb" - ], - "59": [ - "be915eba34bb4c074af4ff182fdeff9f1ecf30b6", - "e9e094e2c9d73014441994d41243a356f0eb2ca7" - ], - "60": [ - "528d90c1ec928388bada1ba4035f72607e0d08e2", - "7f779e5f0c39ac102f584790108e1f83567db9fd" - ], - "61": [ - "21867c0be18f162be4e2525f3ff6bb7ab75b10f1", - "2cf7feede64ff4d8dbaf6a693036411b78d205a5" - ], - "62": [ - "4ff169e74cd1db7daa39111596232e3e489ab916", - "3525cd308f0b5ebf4f29d14d74bceb1c27f0a90c" - ], - "63": [ - "92a9886d85bed65704179baedf17590d239f4328", - "ca0661834d1026f0e06a5c2a2d3ac2677be439fe" - ], - "64": [ - "2525e2f4c4d046734333da02ddf90baebc84ba77", - "46c04ca9015ffd30cae9c0ff567d1335efe3d424" - ], - "65": [ - "88bbc0201e22aedfe26100b39c2a0f299a13b493", - "480b7b84858f2e816c920986f1b16aa99be4d668" - ], - "66": [ - "94bc343a46f13a97bebbafae7dbe150dbfe216f1", - "4ea4d1fab862c7ad3462a072036e98def2c21f43" - ], - "67": [ - "41b4361eacd0e15be19339ca887e8c9ebf1af00d", - "6def3901e2d824a9ac561ffc3bd3666ca9712f9a" - ], - "68": [ - "88457d27d1facfb3a5673ff792f32b58b5aa389a", - "75ebe2901741193f6a15f764f445beb1db8a764f" - ], - "69": [ - "637b4ff34cf9ab69d2d96ee6c15c645b817373c0", - "e4222bacb98d9723a8e398f218e69f1e470866a0" - ], - "70": [ - "b090b240e8632f72208c224e56036c51d123abea", - "063764da2d07964bdff58170246e185369c43f16" - ], - "71": [ - "9e64f946184d8293d3415a2d42e1bc1713ab46d1", - "1ea00415199db23a5fd67e903df6ee38c384920c" - ], - "72": [ - "f64de6f5187acda67c2deffeca053830d3a8112f", - "fa1953fb651e185f19a05117fefe68c08dcfbded" - ], - "73": [ - "5978544b8c17a0eff5d8686f9839eca8f5bc48dd", - "907b01833b363c8cd048235a83ad155721b4608e" - ], - "74": [ - "ad405092ffb8608c6503aad447cf637f9a1df063", - "892c093e6ca6f2f14c082f0f8dc494810204d1e0" - ], - "75": [ - "815bd3c3d426d39c5654f764f6ddcbccfe5acac7", - "94962ddf5b031dac482f45daccb23c56168efef3" - ], - "76": [ - "ff31c335c5e73c854d626c08c695014a931860bd", - "060af51480c183510a21395a06567bd48334b25d" - ], - "77": [ - "6ba187d550ec2e27548ea9074a91cade9cc664cd", - "75cd09c787a8f59a999f24f82bc39d6938d04a67" - ], - "78": [ - "fa0f43095b04e8610c8ea3997ecac9b387f562eb", - "78271e0d02a7e89543b5e6dc774bf686f35fdf4a" - ], - "79": [ - "7c5ad8a8c56222df892f8aa2d8012da26cf5abfd", - "b3a0ddcdef9487e13218e7f7ed68205889983272" - ], - "80": [ - "dbdfed7a39e7b89588454c9a102c3ed40d9e9838", - "e3abbc1035f2e6f6211382a334480f0fc644a400" - ], - "81": [ - "6bae23ce198c01f481e8607539433b5c3617baa6", - "85314e756281185871b534bcb867823479bf16ee" - ], - "82": [ - "f9a220732c45c4d97423e9436176add5df7b7d1c", - "7fbb40091ac91eaca7a8c8ee2f669e203d7025af" - ], - "83": [ - "53c74581eceef9a00a5158d4a20df04f62d2edda", - "864cf7cd72d16ab4c142129a1e4c721774e05faa" - ], - "84": [ - "bd90fd6f55530900dc3a6afdefbbe3aa749468d5", - "6e6f4fc5884e283728d3630816030d3b8deb6940" - ], - "85": [ - "2f0b53e1d014aaaee2ca0977e9ae51d67d77de64", - "ba74dd2cf17bdf51925a9131c5c241a7c983d1b4" - ], - "86": [ - "8cdc34d1c5be2f0d8c100320b5517d6ddade5ba5", - "5ace57eb600d16b03dc445d86b997850e2793c6e" - ], - "87": [ - "056d3c107ac13b2af9f18cc66fe22621ac9714c4", - "509c24bd95a335ee5cbb589e6ac9ed3e8e81ed49" - ], - "88": [ - "81e44366a59a72ea9d135d8900acaff7b05aeecb", - "8b8c7b1bf50ca1033b12d0ab79d3140fe6b14b18" - ], - "89": [ - "80042ce0358c1995cb507f32e4ca7eb9c15101c0", - "978b1e46a55327e6e1a68920bb3bafa5166769c2" - ], - "90": [ - "df66f80b5513e22639da37ba3ae8fdec2b27e13c", - "64bff8b3dc8046b3981a826692b9d648f88a2de4" - ], - "91": [ - "2455a9fcbebaf8a335d4c591d406c1aad12939c2", - "ca990c6bf861e84dedb0e91a7e0a70c091acd03c" - ], - "92": [ - "1fbe67146a2679c1216c910f85aeb6dcdc6a4636", - "65d12e48ca3c4d0985e9db4d7267f9efec2839d8" - ], - "93": [ - "8105072d853a2e1d240795203b5e31827d12aff8", - "79bb83f170675295d51b842a99b5e98030a31384" - ], - "94": [ - "22a05328ceaf900660fea82b189683cbe2be5650", - "1db78ac0d7bc7eaf69635918a8a2b40824844d64" - ], - "95": [ - "10a34bea355d0926ea1457af7bbd3fe5e233106b", - "1fbc3448807370f0ad152ef5b9972a31c3bb426d" - ], - "96": [ - "8875fcbc1e2be165ff9f276a63bd4073e4aa51dd", - "985ab2abd272d2c34c08b661267ac99a31e487ac" - ], - "97": [ - "2936a06db2a699a4d4423098c527fb88043618de", - "a877e0550ebca01b7e706a4c7c0e5e4af9e0d1d0" - ], - "98": [ - "9f85445010314e2c1d326e202c21c0925120db69", - "480c94ee80f821733614efea0850808e73e635b5" - ], - "99": [ - "35632257bbcd685d4328e043ee81d7fbe9e23c60", - "b38511859c83d844d9d1db2f6e305a274fe0bd3a" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-b1_045.json b/xain_fl/datasets/hashes/cifar-10-100p-b1_045.json deleted file mode 100644 index 831136e43..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-b1_045.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "3a80b196bdbc7432f8f2efc0335f47ee731b6d6b", - "0351b4003465d0675debdbae67ce9587f92aead2" - ], - "01": [ - "559ce0c8196ca8de2cbc7f319032e11cb26ce68e", - "5e471feadc2b0a1fd2e234ea1d928606f07ddd86" - ], - "02": [ - "2c84826e34665251f5820a14366f3e9d0cf3f0e9", - "f8833496f3bb93145c1faf0c9c63ee8a015730b6" - ], - "03": [ - "e0bb6582518485c0893ed875ca427e57a444651b", - "1516303f9513ca0b692cab1b75c78eca185674c1" - ], - "04": [ - "013f47f1e10c603ce6d6a53dd52b04fefee4b86e", - "089c150499f5cf72762da1b4ae596165e4fbe427" - ], - "05": [ - "456a81a9b00ee65b802137c8bd812fa52b5fe971", - "79e2f6f3b21582be0986eb66518f7cc01df71262" - ], - "06": [ - "ddd74ada17eda55058df5985891f1c0bcf768975", - "cb34f472b008d0b1b0ad89ddec99f22442cb1ee0" - ], - "07": [ - "ddc68fb91bba2adc59a0a2d83de7bc25363657f2", - "9a0a83e88eefb0a4d0c868f6d05e0adbf5467ea5" - ], - "08": [ - "c76db3dfdeba1688bcfdf9ba8fffa245e15d7db3", - "51ab4a7a6c0e609db521892cc9c3bfa191059920" - ], - "09": [ - "18fdf66ead6ae0f63628a725c740c6f9c8b76f89", - "cd1deb374cd3b01e875dc230468624a28dcdc987" - ], - "10": [ - "fe3f70e2999fdf93b29778178b15370f371dbabf", - "4a5d56856c88ab04c44b033a17fecb26a51a21f7" - ], - "11": [ - "3b94f9b83d4df180d634995714a12de011202cf2", - "3b297b3593206c09d51089f03d6f2385ef299c3a" - ], - "12": [ - "4bb177015a652095547cdb7e89efe1caa4bcd1d2", - "1d3f22d12afb10d9ac50bcc07553e540e25cdd1b" - ], - "13": [ - "682927b20af1e77a5bffaa6d52971ed08593cabe", - "a5e30276411f13885f36b0fb3c37736ae588f195" - ], - "14": [ - "4dc6cd5d7e4f008011ba24d5c3242bef0c762aa9", - "2350ca8b2f3f0a32bc8bc12aaf38a2541b633f43" - ], - "15": [ - "4072dad8b2605766570088768f20156b10f7ec11", - "f8a3d4c96fa2d7a62f07e27d9f4e58524586eade" - ], - "16": [ - "5d56532f3d99d049c362f9b5381ab797a67f7ebe", - "b9d8e08e8367b109e21ae0adf7a6761bb3cad0eb" - ], - "17": [ - "311977f7d0648c35bd9fb912e12cb4422e682e91", - "ac5d52ba943f878e1c8ff3b4e89f0ec837893613" - ], - "18": [ - "eee53881b0b3bb925d16405e8411c8b1d8892f7b", - "552ed07b2e00aa5e3aa0fe6c9e98ef120e46071b" - ], - "19": [ - "c56fb4faf99f5a5c33bafa6e944d5e5b6da973e7", - "ca6baa437f82379b433fa98167d302733dc5efa8" - ], - "20": [ - "2fee856b066a89fa0c788290ca6114cc7b9e1d10", - "50569ac125ea8ce000eb1f81d9df8f5140520a41" - ], - "21": [ - "07c9f6229fa4fd54a2e750c98641adb44f26efd7", - "7ca68e7d8b144141ff69840a88d69dc9ef390f4d" - ], - "22": [ - "4fb85eed897201a433d476f589494d2b32efbb54", - "38340e06de59d83870b6594f332c32cb7f909619" - ], - "23": [ - "0c0ac5162ef5d81224451cab8d3c5a71ca38fa13", - "2f2c932719cffd6031e209110d4fa059e1808d34" - ], - "24": [ - "7d52335fa4482114e4b28b2fd7f7da5ae0873ca7", - "2bf1b99a04ad28eb8b556c8dd33497c0fcd90f61" - ], - "25": [ - "3006e4c55717b49db9e79ed3ed29c36c60458898", - "8a6f9ebcda1f90d8ca7f554b8742cea5152bcfac" - ], - "26": [ - "eb4626a8899ab93c77d35e2fc406f405ee6dbb6d", - "b64658e752d968cd8655302b6fba1d2c9b0c3aa5" - ], - "27": [ - "3468387675a8ffab4f5bdb259351300b7fba7351", - "d5e7c5419f16cad95ce9b50457b0b2fa51349e7e" - ], - "28": [ - "9cf45094668fa6381346b315cbb5cfe67ecc033c", - "a0e7c14924b25414518e78ea06260ed6d7e8a965" - ], - "29": [ - "930487c6b5b186b7d36a9c9ed3ef5630c2dad781", - "6e1009c0a41f484f08432edf3b0ff63a1eaa8be1" - ], - "30": [ - "1f00f87d9593344bb422727215ecf4fc73b0f898", - "6e77d1d206c6389329acdaf3a77bbd93643793ee" - ], - "31": [ - "e377d04edacb8966979a78f7d665133cd2fc01e0", - "e543c1013519502c8fbd9314b16a2292a8a36334" - ], - "32": [ - "1fdbe7074beaeedf303ab5fb78a8e22ceea3bd4d", - "ee25df911d7922582da3eb79c7257d8523f0064a" - ], - "33": [ - "40ef62916cf78d907ac7a229cbc56fcb29882ad0", - "60d22a4c4b87967f78f57d6cd1bb94dd4abf61bf" - ], - "34": [ - "6be8caea646094d4fad99d72d9ce829bbd93dfb8", - "3c36169a357fdd9809208c44196e2795f65e51bf" - ], - "35": [ - "bb2b9b659e120815a3ecf6390406e660bf23b715", - "1b643650812759009e80d9902ef9c93d2de78e52" - ], - "36": [ - "54a4b97e425c890d63c1293557d0df6687cb7a6a", - "0e350441a9a57f0b69dc6d9521a84916f662d1a8" - ], - "37": [ - "d7508e53091f71771578faf1a4c4c3bde7f2e216", - "28bdd34f74d899e36e19f71c45850efaed8a76b6" - ], - "38": [ - "01bca68697af77bdd6b755bd49f74a58c3dae073", - "d07749241f2d3f4268d55fd5085fba264ba57301" - ], - "39": [ - "d1348d1fbbaa8132ce9b3596a232f4bb69796d61", - "7f97234c0307863f8da8ad1b0053d55dfc02c4d5" - ], - "40": [ - "6dc037fe8abcaa8e61ac11669ffaa5c570bf1a91", - "5d027ac5e61ec2c8dc065eac143d0e3c42d31ee4" - ], - "41": [ - "16b0b0d98c5277109e6b1239e31117f5983e0216", - "78903bc9476ffe6ed09ba40a90dfe65a9432b0cb" - ], - "42": [ - "d650c0476b41d3c0bc80f564589236f2e54e91e4", - "6f92c18bc2dd55bb9e5e3a800a006997c870ce32" - ], - "43": [ - "e66b96fa473e36236b15b5d1531eacde54dcc0ea", - "4f13a3f10f422e1e1e90d6a58e6d699a3a65bcaa" - ], - "44": [ - "00bdfd0017bfe90a8ff1637b46c1283fb5513109", - "208b64c9f61c93464e09104b1678f121c44b2a2a" - ], - "45": [ - "6a307cb6d037cd7b50e3594b77fcb68b8649edee", - "5c5ae5d5193e6e70b75ef50763fed37578cb5046" - ], - "46": [ - "a5e8ee64eaa120d635aeeecbe41667bc24e31a07", - "4f4e21ae37c51e71bb9a84441c017051fa8a3356" - ], - "47": [ - "59dfa5225a98f16b04f7853f45c92c4d41dad46d", - "e4e476a93b2dac1de1946f352eba84e52cb6c1ba" - ], - "48": [ - "245ccefef77833cb49f8be0dfe7f02d85ad4e080", - "a5f93c9e9a654284f77911d572b4248b5d6554bb" - ], - "49": [ - "d922317e6199b66f1129ce721d2f9a40b0765a10", - "b6338ec0d1ccc0abe4e816d25dcd5ea3e2dc63b0" - ], - "50": [ - "b8181ce32693d0395f098165f5dc7ad0afc9435a", - "faee52b9de2ccee5a54fb2bf30ee07c59573720c" - ], - "51": [ - "b1e9b62c7b356a68a385d2d014241af81bbd3498", - "6e3c548b36f4ec48642c4679cc6c278dd626b067" - ], - "52": [ - "6f9f5671de530924a80bc6acf1ce98cbfe36388e", - "2fbfa269ab0144c2b2d024839379b941838be8b5" - ], - "53": [ - "103f4fb2519f84b0574f2220f7a862751707391a", - "cbe5cdcca26c73f7037f3f0ec09cc617c93ffca5" - ], - "54": [ - "8f6e246a4bbd53c841d5bffcf9e5e91aad940fde", - "f8ad83ac699d662f3a87265d85d595bba0edaa80" - ], - "55": [ - "891af3e035cd7d23a4b3f5d5e352a450821eba92", - "9732e6f5ae7055a50de37b1f59fd9369353b5696" - ], - "56": [ - "6336d454d4ccb3e9aa2883f9cf3f5ba117d70f5f", - "f1054299efaba02d4a1cf642c1cc16ebf66a6072" - ], - "57": [ - "73d458355f9b0b26d5741af153b19f27baee8c7d", - "fdca05a94b0f6ef02e404680ba67349427665876" - ], - "58": [ - "33158304ad1ebfaf7ffde11ae29262ccd506a402", - "66d2030d5d529561cbc98b9de3384454db13300b" - ], - "59": [ - "a4c374d126492e9568e2902394b0efc302220f10", - "624ef60519a0f27828ccd4a59b038a9a934c9f34" - ], - "60": [ - "384b4adb581a8f114e461e9abc867b705aeea632", - "80183ab5c4573181df40be17e7e93cad132b3166" - ], - "61": [ - "00b791c11619d6ec347bd9bd6f1cc93c6bae0580", - "8fd8309cc03ced5f7292aedb509eb47f27311a56" - ], - "62": [ - "ff4788ed3cd9261ad46994cda0306ec5457534c7", - "d5713039f5602e43c7fada12133bed9f194fd779" - ], - "63": [ - "6444c96d1838fe6219efb326137a75dfa05f3d10", - "96bf1f49b4f13f18aceda2478c09acda1d4627c5" - ], - "64": [ - "4faa91b713e2d2edf0f6b7171beeef195f633626", - "9d5d921616ee955e732383b9dd959d4bb299c01e" - ], - "65": [ - "8958f0c710844980db7732e1395d83616830a9fd", - "2f8c6706ea12c43c9e8a710c2f10ff827cf14c9a" - ], - "66": [ - "b4fbfa93d96e8fa6b9a716d694baf979d5240d4a", - "a5c6c67c5107c28fcfae7a9001ceb60655e0ca51" - ], - "67": [ - "2c1ceba5e2726626747af0eb53b110dbdfa8f45d", - "da655f6a68f1ec2be1cb9600403e7d7e022b0bf4" - ], - "68": [ - "3a3de339a9ad5ebf9c31a420901164fb407c6f33", - "534a6140aede9c5ab2cc5d7bffbfa6a5419d0162" - ], - "69": [ - "95bf344ba2c6d17c5e50c25b0f8cb693ef8a9077", - "d8530eee7ede9e04806889a2a77a28d8de415c69" - ], - "70": [ - "09c2e119a114ebf89616a0e6acc9c1286e4322b4", - "b462c52bdc01f5619533aea5441f03559fb0d9e6" - ], - "71": [ - "89f1f566a617bed63d461a213aeba742e3634629", - "5379ebcce1702689a8a77883fa51a0ab186aa0f7" - ], - "72": [ - "b5d272b3489bcb026c2a30f1aa0bbc98995bcb56", - "baf1de8b352adc96f1d13697fd71b940200bfb1b" - ], - "73": [ - "34ff996870a7aad899db5b6ae1e20d2a2280a3c9", - "98690cce777d953908c13db5fa8dca5674d248a6" - ], - "74": [ - "42aefa675363eb88710f2503349d91a2c4d6c1e5", - "2c717f2a4c366bcfe6f3793b01332cef8d1a1b36" - ], - "75": [ - "1f365e5e494d2a558c2a9de8b38b95dc6879a259", - "da4af1cd6d13dfdd80433c43aba7720a53c67f02" - ], - "76": [ - "6d1f328245193709243169752a2adf773a98e8d7", - "27e54a0a5de536830cbe96ad0e12e7bbc531d45a" - ], - "77": [ - "2a3eb7080560bba4225251e382f0648b9b715a5e", - "1213d9ed1b66e83a769b7f0c8cb5f2ced1834e5f" - ], - "78": [ - "54c3d5ccd429e1dfde8484d34bf13a1ba0ef857b", - "2a48bbc9dc74f22b59f0a6594e63410c3ba77dc7" - ], - "79": [ - "2daa4390f488122471b255d7e48b213bd3dd2955", - "8c084225a0311b67f2c46d4d0dbc8056b21c6610" - ], - "80": [ - "26ed9f07fe7227344577e7f077f9bdcef0d7cd92", - "04861b4d91b19f9ad58dbc370366dcdd942652f3" - ], - "81": [ - "010ccdce34f4951bd90bd56e480b9de7ae64b7ec", - "54069fac67d2947ca82fea403d1d96fb56d63a1e" - ], - "82": [ - "873eefcdc0539a3d67d6cbde57983d3ca15c4359", - "8c1e2b2fa708c018854efdabbfd862f242cc1487" - ], - "83": [ - "d44ba3682ec81c488b03e3ed524b5283fc36e626", - "f39428857ce56cfe26e8db82ac32768e3d119ea2" - ], - "84": [ - "cf7491aad610697a535a6c6a4755f11516555e14", - "11f4c97b721f9cf74a71e107e4a28e572bdcda59" - ], - "85": [ - "27ec72736e37dfe87a45dc2fa74e36902bf33229", - "b7246c05f23f7aa31cef4c41c79d00c727e2e0ba" - ], - "86": [ - "6078ce4dbe6988f7976850a3d0fa210a16e7a11c", - "bb76135f42c3f7f40496f6613f365afe56157a98" - ], - "87": [ - "7cbab268e7ce755c4c81ca7b2999b6b691a0a4c2", - "c4b36e7097a4dd883616e07d2678f520cf32feb3" - ], - "88": [ - "baedb90e0d3602138a8954182d2c16fbbb38e0be", - "2a8f71aecc315d23d50805e17d8af814c22a2ca5" - ], - "89": [ - "85efb743bcc609514d30e018bcbec21346727794", - "661ed0dd5a33d108268e8caf4068420e373b67ad" - ], - "90": [ - "bf0d61479c416a43268454666d966061958912e6", - "95cd229330b49064cade0f15d7b95ce9c903c90b" - ], - "91": [ - "b535d4996fd91dbe257f6cbd55e93f94be4b9667", - "ce41ac5a400df4d61d1016a40fd3893ebbbaa709" - ], - "92": [ - "9cea7db40f1ebc8006dc52817640a7dd31f037a3", - "cd56be5bf3bcacc94ab73fb7be786217aa2c3b77" - ], - "93": [ - "5a2739608a55dbe89e983170b6001e842cce2161", - "460d5c5b395b8149f443295f2db20a25ea569fa4" - ], - "94": [ - "b1fac807d9f10a78906bc3e89b474e307a70ac17", - "b16efe26cb3a3d2e9f436c0a68c15a7b5a8be1d6" - ], - "95": [ - "1231b3d2cdcd927afa16b3411cd9789fcae487af", - "2555551404b53d5fc00e88a923c093fa0de012b1" - ], - "96": [ - "f1b891b56a1e4caa585e72ec988d3d3eaf16c319", - "f5a1d9220811591b2b93610b9f58bf71596ab94a" - ], - "97": [ - "f7b0e17dee7df03813a2b5538dee6827888f02c0", - "335aef4d839475c802a88b6a98282166d07de43c" - ], - "98": [ - "9b70a976ff846ac12c908bd66489280318b761c9", - "49668127e19f8b29d3993ff89a078768c2aebc12" - ], - "99": [ - "e8d017e8599d6e4318d5bf2572cd13da2a1fdaac", - "e17bb8252646ebfc3fb34d96493d2eb16b07d0b2" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-iid-balanced.json b/xain_fl/datasets/hashes/cifar-10-100p-iid-balanced.json deleted file mode 100644 index b716583c6..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-iid-balanced.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "1bb93282e534dd5edc5ce5567059bc6508379a63", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "01": [ - "7f57457d3c5a070c3d9cb7f7bf41acabd57b8bde", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "02": [ - "41b3d1d5fa0b2ae5fdf0157d274c66c2470768f4", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "03": [ - "25e6fb326b374ab9a249f61c884169def295aca9", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "04": [ - "0578460d6dd23d14f81e62e63c4d370eff675b41", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "05": [ - "eee65b8d6c9659011bb100a597d24ce7b704201e", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "06": [ - "e75a38afc8321d24b0eddb9a1c6bb1aa9866c1df", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "07": [ - "e9bb632cf83936c9bf9cce6e99e2ab3176819208", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "08": [ - "89c8d6fd60c6f149edab4d8256fca86d232ed2e3", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "09": [ - "c5d02d3a53178332cf2b4ed524a74b4caa841074", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "10": [ - "876e0fc522e8e579de7c747ed7898b8706e7fa25", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "11": [ - "b492ac00dc5b922f7f95f35d4f183eca7e5b2a5c", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "12": [ - "27d9801400121b231aeceebae7de5d69bb1ad325", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "13": [ - "0928c7241ce8eaf13ab9fc959f3524ac18622cf3", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "14": [ - "2da1d9671447979a86bb27b0bd350d475dfd89a3", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "15": [ - "10f2497f14583d13f461e27e0acc2ce00d639d50", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "16": [ - "3bd60ec6fdd4ea36034825ae26649147e4502bfd", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "17": [ - "173478042f185fa848f9a123f9bc310ec29ed6c8", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "18": [ - "350961f8da51183bb5c62795f92112b004fd8b87", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "19": [ - "b82d8d6ce84ea268aa3cc58d28538bf763e0dace", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "20": [ - "3b3ea3cc341e7c48507fd21263f4c569087dbc71", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "21": [ - "f99afe8bcaf93190c4337ea49f818e909e9f21be", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "22": [ - "5829421568744131ca6862017ce757c3f35a1a83", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "23": [ - "8c400ad66e8098fe3e8ad3ed890b76e9e6f116ad", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "24": [ - "6df22fa9056ef0421876a12a95154a0c07cc964d", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "25": [ - "3769716662d1b6055e45ab67be85d4916a7fff07", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "26": [ - "6ef6145b6be7b77e2297580671ad90fb1b9c8a47", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "27": [ - "aa965e4752e499cdc83d348f6c566c3790d5e88a", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "28": [ - "cfd612a51c512dbf50a703e2b8d67c26f3133d52", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "29": [ - "39147aa46d995406094bce73b8bd8db2224f8e50", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "30": [ - "997d368f827a80296572c67f0f103d809fb50b66", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "31": [ - "e889a5f16746ca084246f1fded75e43921238138", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "32": [ - "7417e5b9eb1d6d5756438d5e78e0187afc9e5a44", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "33": [ - "fda3660f469802e6970c2426c2085d708e592fba", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "34": [ - "4ed43b804fa8e83ea183e3ab72b57a13f87ff6d8", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "35": [ - "dc81fa528f8013d2dcc5977c394645362f8e885b", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "36": [ - "4a1464c0d5a13e8d78aa1798b1fbc569956e6811", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "37": [ - "a384c78e28fdb218b40894c41712df5f4a20cb03", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "38": [ - "d6b981dc60137b442c952d0ee5522d7387bfbc4e", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "39": [ - "8495b21143273d09f3bdccab625b7d24bd3d896d", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "40": [ - "5758a87d6e43e9bcfd3f50f00af74b7309ca90b6", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "41": [ - "22be414aa37a9fcf275b50236b9b0d06c2712f48", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "42": [ - "383317515393f3e1a0775effa2ba6099c07cdc64", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "43": [ - "7730a16860bf957889fdca8ac8256fa6af097ea8", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "44": [ - "7ec781198548d38e5890b9188d63a9faa01237bd", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "45": [ - "97301cda014b4130ac51413243ef72959bd28881", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "46": [ - "c46f1a0deae997bbc37213639c74c0b0a47fe158", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "47": [ - "50b0df0425786c92b0512f988041e7c416f0c59a", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "48": [ - "4bae2f9b42409699ca6ff76593aa00efae3d597e", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "49": [ - "57c72930ee7f10baea948f3ecb53ccc962c867f5", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "50": [ - "fc1ef5ccf22dc05972de3b4606e153c3fe257311", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "51": [ - "57bbda0c185746d9f5c25875387ee9cdb6f01a73", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "52": [ - "207eccce1902cb7197f381f30562976335c2bdc2", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "53": [ - "5d2d723bf6e51b8e2185a0a4d0e4947a83784398", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "54": [ - "3fa61025dc6f9caacb25bad55197ef5419220d31", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "55": [ - "da473f03e4200c4beadd2a9a14da40549ec8b4a9", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "56": [ - "00b7022517cda1ea6ed2356a447637e128f5e406", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "57": [ - "febcc2b5f0fd2a875252f33b5aad41902fb64d91", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "58": [ - "9dbde5bb3a652a8b65cb23b0448677372bb6df4c", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "59": [ - "7283cc5cf6e89f9872f3ca908cbedcfad695e007", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "60": [ - "3026fafac45e87308fc09a8e455b2321f08f7bf0", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "61": [ - "69cc433ae54c4ee275b89961c6ef558629103a71", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "62": [ - "a813a8fd4ce0d07f405c52679a3336cb65c95a69", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "63": [ - "ee1549919f1b188616e732ac4399fe0f572bb023", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "64": [ - "d0903383644b8307bb24412b944c5cd868ae3cbe", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "65": [ - "ffeaa565338f40a5a3e0faa32d728c453b0889c2", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "66": [ - "88c142258e17ae81aece2a3b1fb5295a10349c60", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "67": [ - "1d76eada65a0e668b8925fd581fe8e4183d0b620", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "68": [ - "ab71b9e9058c16745808c8d4d8323a5c08ffde2d", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "69": [ - "67f96881fddfe5438464a482da198c83ecebf64d", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "70": [ - "77b4ebc2b59af2452a74f9582df79a7eeb5d3634", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "71": [ - "c1071a75012afd2dc1a0e04f81e1ab9910aeac03", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "72": [ - "1a90ed4a625ce7885132516bb9262fb7ba71e0a0", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "73": [ - "63454e0000da07cbc7532f8dfb0414d30e74fb9d", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "74": [ - "2deb28d2bdd83d96335feba07b9c42215569e9a2", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "75": [ - "12a2d4243ee5d1b1cde4495a2e9095e6117eecba", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "76": [ - "8f0c0e4782bcbf25a1d76e8a1d9782270a4dfca6", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "77": [ - "3a7e6937bdb216b43c67fda2404f1aab7c14ec08", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "78": [ - "3a2b85ce2604ffb2d6f96ea58fdebb3ae2875ea3", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "79": [ - "b670ab23aa4231b2dd849c86a4b23cc91453fb60", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "80": [ - "d5fc6b0742d10d074198c56794e4774e1ca364cf", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "81": [ - "d26d2a7392bc267a3809d8b5de075deb190a351e", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "82": [ - "16df5385a0331731b24aae1cb5e92e6ae6a040a4", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "83": [ - "ceb3442d285a2845ee487c85ae4c0e8705e17d75", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "84": [ - "dc3824ff6d9513445e5b408bf03b97eef8e28f3a", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "85": [ - "ffd2b9510612aafb6ede635ee208212ff5233339", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "86": [ - "11f402dd0dd5ce026066617177c7471c32bb312d", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "87": [ - "50887cd0abd6e7641613f31194d0c84403ad8b54", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "88": [ - "385bb39bff11cd4bead369f8fe06c6b666546063", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "89": [ - "d8f0ed521d90b3bf05c0edd5116e632ea6eac65b", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "90": [ - "821b6bee3cf73282d52c9999cfe068e67de27802", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "91": [ - "26dbee5353992539abb1605d49d74203611a82f1", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "92": [ - "37ae2282f79c174b21bce47bcebe8fab449b067b", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "93": [ - "0dd7ba90f6cd30d46cf86da29c1e97f89816631e", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "94": [ - "ef90fad13648e2c94ec58f78d00a0e25eaf82051", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "95": [ - "75805d12f21e0cc2a1038287f9583a6d4943bb94", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "96": [ - "44689593b2f110fe6bf6581643df3baa055c1a63", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "97": [ - "59854a535067211142a788b4221ef77056ac651d", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "98": [ - "bca54d806800038f5e644fca3091b40163d1c7fb", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "99": [ - "bd32acc4e66de2cfbadfed1906d722ecd9f0428e", - "69736b34a5e690da40c6ba92adfe12ddb3a3156b" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-01cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-01cpp.json deleted file mode 100644 index d96989784..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-01cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "aa313212c7dda1ddead7c7b012fcdfafdbf03172", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "01": [ - "c14e824ef7aec9bc9cc4f32f6b0dab2e4ee95d03", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "02": [ - "3a468db4dc8242bc5beae84feffb786da03d2a64", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "03": [ - "b6fa7c26daaa8cc7c7dd348089656d9bb83fc0d4", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "04": [ - "26acc68312b2c40c5b18afb7c9e481f4bc1435fe", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "05": [ - "55124d5136fa6a121eac7bb1b1d6512f3787a549", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "06": [ - "5e2b1231be3750471ba4dfbd59b7007db1b0155e", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "07": [ - "49069adcad4d298f49181887f23c0c592eb2d15d", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "08": [ - "828fa04e8df56e34272d34dea5d40078bcceb943", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "09": [ - "fe94f932281925948886717843703d124e29648f", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "10": [ - "8e935a2bdcbcf445ab1434c5455d3b655c6e78b0", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "11": [ - "07175aa208e0edc675eeff5c75734f9143eea8f3", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "12": [ - "ff6dcf90e50f3e5b1dc6b366578bf220da681d8f", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "13": [ - "bab419316aadcc16e80a18acecfd584b01764cba", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "14": [ - "e5892ac5e3b0cf2ca930525e39d66b0d4156086f", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "15": [ - "cc70b929f5d23e0b7ed092799b20700bce73d289", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "16": [ - "5f1c473d9815f95a5b70e64274ea2455a84f788e", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "17": [ - "ba5090401936987b52a368a09a723c75ea54cc47", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "18": [ - "2a7a4e47a8788fa5739b79746e0a3a7b3041e42c", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "19": [ - "fce9751c2f3ca8c3749d9af1a4140a821769d346", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "20": [ - "0f8566efe125be0c8458a6e18b77ec0ae0f7a9ac", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "21": [ - "5dafbb96c699d6544de97e19774361dd925a9292", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "22": [ - "7bdeb6f79dc95cf1c90fbdcdec6757d45f386457", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "23": [ - "26fd03e8bb366a1fe10851a80998349f0718813a", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "24": [ - "95c96ab194b255471765f7ec5046ea1e8f0de56d", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "25": [ - "de68aea4c35bd79d47af522ce1f1bf643dfaaaaf", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "26": [ - "adcbb2f4b2149bfdf654c79f2ecbf72ea0fd27ed", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "27": [ - "e3ebdedc9256ad00961844a6612e7c35ca2e130f", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "28": [ - "d7fa3f701958ce529f111486026f7cef7ff8f61c", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "29": [ - "fef8694377715e211ace90f773ce765bfd3f9561", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "30": [ - "d9d327f84f32adf0f35a256f024bd313783a4824", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "31": [ - "6a70be69196e844664a9734331a288952297b7ce", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "32": [ - "9f1975790b450a4d6e7d4c82e44d23064d654d7f", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "33": [ - "b5976f7f832d2be438be64129a8dc22c2b3683fd", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "34": [ - "71695d75ff2ecdd06a62a09084f3c129cca371cc", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "35": [ - "99cfb78bdf70e65af5111fe9cdfd8df8cf382617", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "36": [ - "93f8ab925acf1bb7f3e181cec269bf6c392156ea", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "37": [ - "c52fe2f8282a15345cfce5d3e957da0fa912a9f6", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "38": [ - "2d1246cc3754f4eb6fd46b880b1c4326dfd1d07d", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "39": [ - "cdea4a93b351bb6f9d935bbf768f450b48febd5e", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "40": [ - "e1139fbd675303dcdcf82b57083992818c4b0179", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "41": [ - "e3582e6eefa0376e2573c25a454a7d026a736fc6", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "42": [ - "6dbe081e6773f0ca172954c4f91402110956767f", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "43": [ - "ca2eabd7c17071ffefe3a8de4d3624f7ba56f427", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "44": [ - "e7aa4f4bee347cdd3b94aba07f08f99514b66eef", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "45": [ - "c845a2a08b79473a08acc147fef3f79d58af0cb3", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "46": [ - "607c7fe993d83cc527cf13f8c3bad2988d6529f0", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "47": [ - "72c5e173f32da5294696e1daa53d5253e23fb421", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "48": [ - "438646bd68d501b6f8a5b3c56baa0d78a05e2782", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "49": [ - "64e642eebe3cbaa345d77598f42bafc6cb0cdd37", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "50": [ - "d4a0f3dcb86efde53fb912a8faf5a5307131fad2", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "51": [ - "8a306798394c6e2d1bae0dbf94b363eb6099185d", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "52": [ - "39c8bd8f98144f67f26b3057653e24b1df5dc6f7", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "53": [ - "43ceb68977dacc24c952473aee3ca7fbcf6da998", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "54": [ - "f2f0964df91365f843870cd1c971e4ba5236d12b", - "889b7aba5d8bf6343a88ab455a5b62cd4cc75f3b" - ], - "55": [ - "a8c0fccdf646b09d99c9e282b438456f35bdeec2", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "56": [ - "e252e300d303fcca74b6d9e4145e92644220d33f", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "57": [ - "fcd01983721b789da620be9b85be504fb3007786", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "58": [ - "267703b6f4872d9892b820ddc8d75b63a74560e0", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "59": [ - "e11ad03b2336d105794ff38ab990fa5486e31fbd", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "60": [ - "66fd21c258028f1e6b01f210e81ab9212d3e7877", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "61": [ - "c20e614999dffd33750a2f0c7f17fc558efc0b67", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "62": [ - "c92ca2c53e5de1b053a4832eee9a753b9b15ca22", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "63": [ - "0ec1bbc870158884703140c9cce4b94e6e98db10", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "64": [ - "5f2037238188a0893a7e5bd37f18d6a2a2a94adb", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "65": [ - "c5f15025b10a559ca75feb3dc456f41ae0243a9d", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "66": [ - "30ec3a1b676aea004a607c0e918bab58fa21aca9", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "67": [ - "479d8a1adcf74576b2ee277dc84b94b3a7eecfbf", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "68": [ - "61c98572927f100a7d5e7d24b890dca7b8f7284d", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "69": [ - "334b2b2451b4663a62480d1b418403bdcce172f6", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "70": [ - "29c63e51a8a25622026619992e6d694e8c7e752f", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "71": [ - "8f7f15ca18d490dfd12c442c8f40849912566b94", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "72": [ - "daefaecbcef1ec94e228af478185387d37fc1bec", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "73": [ - "030e197447e4228cc39dcfa99472706a5af3f878", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "74": [ - "89e213341684db3b9371ecca05ccef05c3deaf9a", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "75": [ - "42bf77a3b72c684d5f66d3a5f01d4ab40e78727b", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "76": [ - "2ae6adde84ae501ecf4552e9ceb6f10ae301249d", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "77": [ - "a177c8c64ea47caf8690fecbf8424c192f2ecb95", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "78": [ - "977a2c4e30d7940c69fa0b054d5f6d6cff0dd692", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "79": [ - "ff42951fd87c802e8b8b8b79d95d8d137f8a3b68", - "cfed489b3cee96861bf4378602bcbb2aba9dcc2d" - ], - "80": [ - "415c7a4714a48ab52bc492a9d48fa190ad02014c", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "81": [ - "a8f1238db4c0c66166e6bcd00896bac9ce9de924", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "82": [ - "7dbb74bca664fbf22d3b0490ab9fc930b760adca", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "83": [ - "08ca10cdad6a757e5f650fbdab87fe5e19ff452a", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "84": [ - "f645df656abcdb7890e5025833e3d89d94df5307", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "85": [ - "10e992eba6634fa1bef5730a9123849a90572969", - "7e6e34f501aada3c52733a80f4c5d42498fc7e3a" - ], - "86": [ - "9dae6bc3d8cbf252602704e49be068589d4e2a37", - "4def74241ac8c8cfd33b3be349bdd0418ac0ace0" - ], - "87": [ - "2040ee7be013ec22beeb88783bbe5ec366a85d89", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "88": [ - "8344e8884509255537719fb3660bb6c918b7f8aa", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "89": [ - "0bd3a571ac2edd4a30ccacf935561d87c62e4335", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "90": [ - "c29a34ce0a0b7c608296f7f83cc6ff73bb6b8230", - "62b7e2e49b278372437e4a1bdbbb46df1d23e9c0" - ], - "91": [ - "399bfc68058cf224cf031506cc7d57f09fb727d2", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "92": [ - "ccdff83689fd002e844257394446e4f88161beef", - "ae3073e616740ce29e1134c18cfda15635254829" - ], - "93": [ - "5702cd6a2568ad4ffa21a2e61cac3154afd240cf", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "94": [ - "865201db4b697b8cbfe76ea4c8615a7adfdb01c6", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "95": [ - "b4d8d11725eb816f9305cb50074e214ab8dd37d2", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "96": [ - "2c9185ae87b1115ec2085ab174da709acce09f32", - "2e7b915cfe3dd8fda10bdb82c29e52c11a5e2d08" - ], - "97": [ - "f8d53c5cb65379034fe7340a1ebc74af94423d84", - "5fb8ae5131560b74d9888a578b80fd3d122a524f" - ], - "98": [ - "8d73e7d5170b075e36bb94f20ceb42eb01d11f0d", - "028de1efc4cfac5e8d4a3827c2ba12720dc7a18b" - ], - "99": [ - "2ed4874dc6e7bca6801254342b25864d6782530b", - "3233a75434df2a9a2f6de96ed501f9cdaa5d155a" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-02cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-02cpp.json deleted file mode 100644 index 6bee7940d..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-02cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "42cbd6d70b3ca349720e23da267e80b7f78e6846", - "db2f9f9f11da8238cd1e2f24ee985b49fcd7aa5a" - ], - "01": [ - "c80b01c4f8c5eb7af87ea5aeb4264b0a8bd17e5a", - "441ceb47ef73516c0340794a28ffc6fa3915926c" - ], - "02": [ - "78dba8615a8ef71f0700b57741cb01f9ee2086b9", - "8cb5d5b962b70460b2c109b0c1dccff4acd82a60" - ], - "03": [ - "02b6a9ee072c07e1105d25b46f821c4f9d2f7ea3", - "b5dfde1406d48ad28711bc423766d46d7993dd50" - ], - "04": [ - "b0096404b3228090dde2ac9de5bd03b516d7f186", - "f533d76d5785e01a317aecffe0e3da08410b45ad" - ], - "05": [ - "1540028f14a19e6c0be80d9d64105894b4ccaf3c", - "61928530aa1aa752946a4fd974e735294eadf4b7" - ], - "06": [ - "93e19870d990842b78a03b453adf9f2f007c0664", - "db2f9f9f11da8238cd1e2f24ee985b49fcd7aa5a" - ], - "07": [ - "af0ec9a46e30bc75c78ebf665703d849e54dd876", - "5fca491e887c400e3d93c27e2aec1e34226327dc" - ], - "08": [ - "77d7474c758ba15cb93fbdb5cdef049fa8821e29", - "f2de959e5dbb0d75bcc1552f2e95a5527baa04dd" - ], - "09": [ - "82b94049ab27a1f2281c22109afa8d7cc54e014d", - "462f204bb4c7bb69e1d88cac02c2ae5f3d60e209" - ], - "10": [ - "102f3091012653b39b2c80b528d429981b70ddff", - "5fca491e887c400e3d93c27e2aec1e34226327dc" - ], - "11": [ - "a256342e9f542efa515d4b2434ac156a2c3fa03e", - "f07072962d18d6612283e84eedbd8471ee0dfe53" - ], - "12": [ - "fb4246c0dc2f6c253b7f1d7945ecd3a5735b4880", - "2d8b911cd3330da12a04a5889fb915f32884cb2a" - ], - "13": [ - "305a121344e343c426b9ce728f17eed503ce91c1", - "8bcc94121e1c130a7023fe0d17bf8d188d3b279c" - ], - "14": [ - "3c1e2f3e46a9fd7f58c79a2e3d2249fd91ea5c82", - "de7299e0796859682e2e8a56ecaba7862e75cd64" - ], - "15": [ - "624492aa46e78e29f30eeee79890d656a0372089", - "f35c717da7838f25a8bc81e0a14bea16736f32cd" - ], - "16": [ - "af1f0e53dc099b4653b4094f5bee0c4c38404a99", - "462f204bb4c7bb69e1d88cac02c2ae5f3d60e209" - ], - "17": [ - "a8134d4d6c5819792b0aadabeee61987c9015dc7", - "dfaa6a595f740932f40b73ea736337785e1b55d2" - ], - "18": [ - "4663140d237af730579b61cf91b8d79d972df910", - "f2de959e5dbb0d75bcc1552f2e95a5527baa04dd" - ], - "19": [ - "1bbdf1713d67a891ec7b930d1a52c6e5eeeb1f3c", - "c3b2a063afd45e08408faa8097664255b1e9b4cd" - ], - "20": [ - "6a5f5f6065bdae6da6c51c560104a0b414e5682a", - "c4779719ce05dd8b94daceb83f8c41b01e45c36d" - ], - "21": [ - "6689e4a410aadd65498e84bcc0229d4a5a1aaada", - "ec3c621577b829076b7a91e2f5b6fe0711f2b313" - ], - "22": [ - "989a472812e941fd28bd02176fca838ef4f6ecd1", - "8d7c37ee56c7cbcbc6616278362f1e32c92baad0" - ], - "23": [ - "615111e3402ca3250fccae4c14a33192bd40652c", - "f6fc18148874183fe0b9533db1a26c3fae2a6ee1" - ], - "24": [ - "66aef232d1eee28dfcd74d6e27508708230402df", - "7d231373374d0c16364746d93cf51c27f79e2e13" - ], - "25": [ - "3d81477d563f2b3f9cfb3b4e63fded59be373950", - "5fca491e887c400e3d93c27e2aec1e34226327dc" - ], - "26": [ - "cc05b17e8164591f9d38909339376d056959fa60", - "61928530aa1aa752946a4fd974e735294eadf4b7" - ], - "27": [ - "97b08c426d6ba37bab1a0900279d2724614a792e", - "6aaacd7f07d398184c91b887242189f505fd75bd" - ], - "28": [ - "78d153c2d2ad73194a6ef93954d375925e81ebc0", - "5fca491e887c400e3d93c27e2aec1e34226327dc" - ], - "29": [ - "617acc4904247216b80d8eeee43139c7f4fab960", - "28792c15ea04107de56382fd9d0f51a40619923d" - ], - "30": [ - "92b0760532466457672675dceb87566071a1f4f1", - "7d231373374d0c16364746d93cf51c27f79e2e13" - ], - "31": [ - "2f18c725b5a8d7c6bfcf6574369a4f9a2ca1980e", - "fd93b044d24fc29d3ea67efd6c9987b0458d558c" - ], - "32": [ - "a8514f1cc7065e1d497462d517d4e79d1fc2e210", - "5fca491e887c400e3d93c27e2aec1e34226327dc" - ], - "33": [ - "747192f17230a216bfc2a4e8ad1d09d90693f13a", - "462f204bb4c7bb69e1d88cac02c2ae5f3d60e209" - ], - "34": [ - "b217357ca73d856dbb6515b7630c9bf744bee313", - "dff83021bb9faae6378333597dd71da5d7269a1d" - ], - "35": [ - "2bda66a4236941746a6d1a21cffd871a19624bd4", - "f6fc18148874183fe0b9533db1a26c3fae2a6ee1" - ], - "36": [ - "4f3b842a612e1379ce8c6f37fbf42191a9850254", - "e5fdc7a8751b36b2433ca939ba4a99bd97e88c28" - ], - "37": [ - "d60e83497567dde2d4d396473dafcc383a00760f", - "625ca98f8ab82cf892242b284de216e062b74b82" - ], - "38": [ - "b1cf74ac5d090046c42b42245ad3f1ccb448965a", - "42169a06349788db38c22bc5938ba2f73bffd941" - ], - "39": [ - "ae63b00f8274f24437f496323fd3f516cdac96ae", - "46c17f0a2eaed813ce4bfa3c50ed2076f999f117" - ], - "40": [ - "c32aba263ee20d0562896936128990557338aa87", - "91e9bb1ddb5fced7cb9acb31b06397514c603b75" - ], - "41": [ - "d21f337054f956c5e36dcc33e469faf28e881992", - "fc57222dc1a0401fbd144a6aa5cd28ea024da0cd" - ], - "42": [ - "a3c8e46f333274947000ec23af9fffa8267ca101", - "ac612e585a8383e7b28ed9f95233da31ead42403" - ], - "43": [ - "9be971aa08b639be61da3f1f0b8022ae1655925e", - "69427256a1d0684e2a3e2a026bde3987b25758c2" - ], - "44": [ - "3af85ae35842b7b2855ec31bd55a1180bec473df", - "69427256a1d0684e2a3e2a026bde3987b25758c2" - ], - "45": [ - "e70351cb84b3dc39358466a0f4f00a2e80f47841", - "35e7a1d1ba309005c1cc4bc0aea0431c9e040386" - ], - "46": [ - "a66398f2fea7c210be4dd4f358c0a9402774311b", - "f35c717da7838f25a8bc81e0a14bea16736f32cd" - ], - "47": [ - "beb701b796ca0a36163b310cd50d85bcbd1bbf89", - "9bfacaeb0b8c740112676b1bfab45c5254538681" - ], - "48": [ - "18e09f9eaa7a7438607d0d9c0a0dfe5e50136720", - "f35c717da7838f25a8bc81e0a14bea16736f32cd" - ], - "49": [ - "42f8f49151c7a099d5d7352f6ea20ff0c11b2aa4", - "b5dfde1406d48ad28711bc423766d46d7993dd50" - ], - "50": [ - "bcb2fd7d4c3989517a4ed92235c408d493418f3d", - "f533d76d5785e01a317aecffe0e3da08410b45ad" - ], - "51": [ - "ec2c99630702ee15a9a61588e6d3d160adb55191", - "2caa89608780825a2e112d997c097441d26a3d66" - ], - "52": [ - "a907012ab30dce83e8ddc0084197c2cce28a084f", - "bc0e01bc2f3dfc3999715e9d2fa5f4005d982a2f" - ], - "53": [ - "59409b66f6f984a667ad04bfde6a704fe5c75f4b", - "c4779719ce05dd8b94daceb83f8c41b01e45c36d" - ], - "54": [ - "b8260b35fb2fcc5c705138e7ff138e3cab70620e", - "ac612e585a8383e7b28ed9f95233da31ead42403" - ], - "55": [ - "abebb15c2dc5d2b9548403d3c338bb76fd8af7b2", - "bc0e01bc2f3dfc3999715e9d2fa5f4005d982a2f" - ], - "56": [ - "92d9237c100a536c395d347d6e89881ca48dd8b0", - "2de3f56e3c669105aaa89c5bfce913df352bca5b" - ], - "57": [ - "af704f67a85b65fe0a9d2237a4f808e3c0d2dda0", - "ac612e585a8383e7b28ed9f95233da31ead42403" - ], - "58": [ - "2a98932f209c32efe0aaaccdf9819f6e144f7c80", - "a2c8eaab096a8e5bf74983d69be4e6fb5b11e0b1" - ], - "59": [ - "d746b6865f288ed6c743b5eca2321e4f6edd210b", - "b5dfde1406d48ad28711bc423766d46d7993dd50" - ], - "60": [ - "9174daaa5e1154114145c104647a7ec62967f6bd", - "61928530aa1aa752946a4fd974e735294eadf4b7" - ], - "61": [ - "9c7b6736f1ee20fa33c95eecd9188dd291abb4f4", - "46c17f0a2eaed813ce4bfa3c50ed2076f999f117" - ], - "62": [ - "0c5535fa72787a9656701e0ceaecc64f663dae5d", - "db2f9f9f11da8238cd1e2f24ee985b49fcd7aa5a" - ], - "63": [ - "8e2510d02f85cca45f67a073b29f1a14911f60a5", - "61928530aa1aa752946a4fd974e735294eadf4b7" - ], - "64": [ - "958f3bcd115cac1377b4064719b7d1ec305c8549", - "46c17f0a2eaed813ce4bfa3c50ed2076f999f117" - ], - "65": [ - "282eb302ac7b15d0aaba65266bcf63a5e93e2ddc", - "28792c15ea04107de56382fd9d0f51a40619923d" - ], - "66": [ - "7f25910d73bd3c7c745905070555e51527061505", - "fd93b044d24fc29d3ea67efd6c9987b0458d558c" - ], - "67": [ - "ade7bcf1c3308a9b5017830e89bbb1cb3366fc17", - "625ca98f8ab82cf892242b284de216e062b74b82" - ], - "68": [ - "59a27a0b308196f54a2904698f1385b7421e873e", - "ec3c621577b829076b7a91e2f5b6fe0711f2b313" - ], - "69": [ - "82dbc25b3e644a09460b5527e9e2ced8451b7bda", - "2de3f56e3c669105aaa89c5bfce913df352bca5b" - ], - "70": [ - "9849a027a1e9742ebe1382292cc156a4f3c03eb1", - "35e7a1d1ba309005c1cc4bc0aea0431c9e040386" - ], - "71": [ - "153cd374d039ae366d25140495d12d5eb57c9a42", - "f2de959e5dbb0d75bcc1552f2e95a5527baa04dd" - ], - "72": [ - "8c9d015be07744a79ceec63cd2b2cb894a5288a4", - "489f7d019597d1e72ef68008f04a047c7b743fbf" - ], - "73": [ - "1f700d2eae216e6633a800b2851741606c76ab53", - "35e7a1d1ba309005c1cc4bc0aea0431c9e040386" - ], - "74": [ - "60e1db11ccf3e7632f36982009228a57a1a2c9a3", - "9bfacaeb0b8c740112676b1bfab45c5254538681" - ], - "75": [ - "820a2dd5a2052f8b1104f7f56a43be48a7e0a19d", - "91e9bb1ddb5fced7cb9acb31b06397514c603b75" - ], - "76": [ - "2c87bbd1c1b100e6d0f15a49c69f8ff7a893f1ea", - "c3b2a063afd45e08408faa8097664255b1e9b4cd" - ], - "77": [ - "b961926239e2288a25c3330f89f29a8707d65694", - "9bfacaeb0b8c740112676b1bfab45c5254538681" - ], - "78": [ - "c72ad5c89457e76041d9cd03a408ad3295c8e0ca", - "f35c717da7838f25a8bc81e0a14bea16736f32cd" - ], - "79": [ - "d53ea32bed8554b9f587ff661672467cd450272b", - "2caa89608780825a2e112d997c097441d26a3d66" - ], - "80": [ - "6f34b73fc958326539f97f33e243f4604bd5dae3", - "dfaa6a595f740932f40b73ea736337785e1b55d2" - ], - "81": [ - "5f308c4b6ba544e2b41436b340f52db9b66165e7", - "42169a06349788db38c22bc5938ba2f73bffd941" - ], - "82": [ - "cd777c8bf047ec4262c83c1c39a8f7153be4fa88", - "8d7c37ee56c7cbcbc6616278362f1e32c92baad0" - ], - "83": [ - "6c5af04d1b3028f0878f7fa0d79f7311050e0d84", - "c3b2a063afd45e08408faa8097664255b1e9b4cd" - ], - "84": [ - "65707ee78a4564e7bada3c208826bb450ec85769", - "efe5359673f6906e485b09adf7c7427b0ee08374" - ], - "85": [ - "bc0181dbbc0592477735e9293630189277f60050", - "f533d76d5785e01a317aecffe0e3da08410b45ad" - ], - "86": [ - "2b11efdec7c356c5efd326f227e2aea8a29cfa9b", - "efe5359673f6906e485b09adf7c7427b0ee08374" - ], - "87": [ - "a036c5970be510db1f1f788a1a72f8ad134d068a", - "a2c8eaab096a8e5bf74983d69be4e6fb5b11e0b1" - ], - "88": [ - "fa932537a5136f7c88f1227fe21ff50757cb19d7", - "8bcc94121e1c130a7023fe0d17bf8d188d3b279c" - ], - "89": [ - "1d71b6dbe57d508ca3585fa18dcb74ec25ec0986", - "a2c8eaab096a8e5bf74983d69be4e6fb5b11e0b1" - ], - "90": [ - "edfe69f7acdf57889d21e438c8fbb309cd75255d", - "2caa89608780825a2e112d997c097441d26a3d66" - ], - "91": [ - "29886d26a8e1a4b4c37f92c90df0ab3fd9ed52a1", - "8bcc94121e1c130a7023fe0d17bf8d188d3b279c" - ], - "92": [ - "1888ea437ca8cbb3d6f5ce2635d7b58375f2a196", - "8bcc94121e1c130a7023fe0d17bf8d188d3b279c" - ], - "93": [ - "9e4953d89be8d730650fa6419f3f498a6555a212", - "1959165ceb1b96f6bdd05b07ad4757b8c408013c" - ], - "94": [ - "4d9789e4a0359a6bf76eecce0a283565a29fcbb9", - "1959165ceb1b96f6bdd05b07ad4757b8c408013c" - ], - "95": [ - "9c7e75bc7a1dfe3317469fcc5766e2130a3bcc13", - "c7f5319206e31e3724f8d787b9c9bcbe6be15f1d" - ], - "96": [ - "48511cc1273989ff9e8c1c9485159b26e643e4d0", - "c7f5319206e31e3724f8d787b9c9bcbe6be15f1d" - ], - "97": [ - "55f726a6280fb70d5e641bfba912949ed01cac16", - "c7f5319206e31e3724f8d787b9c9bcbe6be15f1d" - ], - "98": [ - "be4552da5a32db37bb30c8f1fc5d471e5dfcc85c", - "c7f5319206e31e3724f8d787b9c9bcbe6be15f1d" - ], - "99": [ - "c5dab2ad08366d5720b192d528d1da48015d99f0", - "c7f5319206e31e3724f8d787b9c9bcbe6be15f1d" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-03cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-03cpp.json deleted file mode 100644 index 86f41842b..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-03cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "ab2553f85b69b8819da68cd8a2cb9fd79e871689", - "1987dd58d906a5e4a893da451edd73cbca0d8f54" - ], - "01": [ - "abf523e41e44b661d47dd3cc661a425c3e7cbc1a", - "b27793519db54eac76631a3c99cc8cc7e5128c7b" - ], - "02": [ - "2dc68e06a9dadc345b5662ce2904bd016f29e61d", - "be28bce268b536267aa00155752f8654e5f24560" - ], - "03": [ - "28454f26be821c11bf323faccc1fb180f0df502c", - "3f325498c5adf109b335980da39172fb64e679ca" - ], - "04": [ - "cc4ca5ff0ac12b35f80bfd8da61451c54e5311ad", - "8860bb3355d662e4c374e2f0b8f99487ed88ed74" - ], - "05": [ - "f7e844a934fbaaeaad9f29dee703abcc4c9a81ba", - "0fb15a675b7626ad58e1763bef17e8b8608bc0ef" - ], - "06": [ - "5f98f19919ec1eb190d236ba21a61f2bb01bb2d5", - "d8e0ec47715831be93719d14c78f0d1c3d9240a5" - ], - "07": [ - "758c58c0939df4477db0214634b73ecdd229ea31", - "d3b6ed2803a7a6eb9460b365472bbda8df87116a" - ], - "08": [ - "e0a52a96e8c1c73115e5dc708fb1d02482d28bff", - "b77cc3796558fafd3536054769dd4f4670e2c81b" - ], - "09": [ - "1c20ceafdb8d68d27c6fcd37338d3c3a5e8c40cb", - "251c7679f594bf9b67e5fefdff07f417ccfd2e35" - ], - "10": [ - "a82ba56ce25a736acda4ae2cd6f96149cdbec86c", - "6d67d6f0b07446ae31c0bcdcd766c8bc945d7005" - ], - "11": [ - "aeb3cebbb752db37650694903f86ad1019f66de5", - "151a541466b285d6e3a7ba747015a8dab34c279b" - ], - "12": [ - "03fa4867f85a8182174dd5e3884668af0b97c18f", - "6f2fc3c7bc632cdb4ed29e7d894b2edf3e9ea63e" - ], - "13": [ - "cd4d5ce889994693f6a3d7c9c45debc69f3d373b", - "9e7da3b9f4573e2030406646f7769048f4423b23" - ], - "14": [ - "8c4a4052c9f85cd147cb367e71a3c09451e77c57", - "672da2018ab641a08e86dcd9b1b946ecc8e6fdc6" - ], - "15": [ - "f873c9c3c65ad3a0126ac92e7027d8ddbe708d9c", - "a79ceb11aff180b0496b9e5bb0df8deabaf53332" - ], - "16": [ - "5ecda59dae62e04d9e218d2fbe5e2f675164167c", - "96d2e1bec44849631846ec8288c7208139396422" - ], - "17": [ - "72a019aea3fb2433cbbd48665a3ea46824b7c583", - "7e0f7f5ff3bab507fb587d01aadb5293b86922bb" - ], - "18": [ - "95addd626cbdb2d2345fe8289575405876d6ba91", - "63c88d15aae81d35066ecc0360bcbe9cd1e7bcf1" - ], - "19": [ - "986959cf79496e4aea5e1fbe710ff48b16be7d95", - "61bd9117456d089509de4d7c67b37630467936e5" - ], - "20": [ - "265223086d0aa3333b9d0ecefc88b2b5e9ceee7e", - "61bd9117456d089509de4d7c67b37630467936e5" - ], - "21": [ - "f839447822650190a08b3a70bdfacd53c1a28a2b", - "7bb7038e580e29c4295f3c8ace4f4348e07b5fdd" - ], - "22": [ - "46e9a783e47ddfe3506b88536b0d0ea4c0cd93c8", - "b27793519db54eac76631a3c99cc8cc7e5128c7b" - ], - "23": [ - "d61d9ef8be11935266f09aabc8b76c5ffdc07d61", - "531f6a78f5335613f1197c26722a7fbda53151e7" - ], - "24": [ - "c4135627f29034915b1d0ac2f9ac0c9095dbef53", - "97d7f16c8b766d7e89c90053072164d5c9b5348c" - ], - "25": [ - "d02f629f3884a60dd04ee57f71d3b8592910f202", - "ac9236975ae18efe7b227115b3ff69f90156abb3" - ], - "26": [ - "358f065781059ed471819fb587ee391b2bafa5b8", - "c31dddbe1ae131261788231af19f604ab98f84d7" - ], - "27": [ - "b29e380b339289d5c55675879ba568b9a680716a", - "9e7da3b9f4573e2030406646f7769048f4423b23" - ], - "28": [ - "89a97c1413bc6a6711544b72618265ff52af7e9b", - "3ad72d66e7d065623a382008a155b86effb9b074" - ], - "29": [ - "4a138762808202e268674a0d5f52591162a0a681", - "ac9236975ae18efe7b227115b3ff69f90156abb3" - ], - "30": [ - "141629584148585d1dd6c1b90132ab3284faa40e", - "97d7f16c8b766d7e89c90053072164d5c9b5348c" - ], - "31": [ - "ef2a1973ea7cc0aeeb8b00806049bf5313e22120", - "a6e293ba3af2f50581c3c5232d1355f978af9ad5" - ], - "32": [ - "bfa3a085aa8405d4ba3af17d1750f875bcccae74", - "6d67d6f0b07446ae31c0bcdcd766c8bc945d7005" - ], - "33": [ - "3335b94d7aad5770f2ac68e3a47d1fef44b86db1", - "b9d27178cc8586444266be39a2c129c9e4178789" - ], - "34": [ - "016860a3d9f10e039f83462d0b28eca6b69babec", - "70cff0b69140db571b33032112e0f2a7cf27bfe9" - ], - "35": [ - "daa2eb3f56cf167168ce526fac442d6aa7894231", - "f4fbb04bbf055e88133c7fcb2ac2c873dd04ead2" - ], - "36": [ - "4b633e970701abcddfdcb171bd67617f5994b6e9", - "7199e85664f84d068cdaa5c712534791b0333720" - ], - "37": [ - "fa52e4b3db681f397f6d802147ddf5a54645d179", - "b9d27178cc8586444266be39a2c129c9e4178789" - ], - "38": [ - "57d3f3810a3ca02b7744d5e18bf3a4c87c4e8258", - "f5f6627a13ecfcff8c403e007f3dd1c2fefd5557" - ], - "39": [ - "f0551af371008b827518d75204d5d4ad4b29af04", - "7199e85664f84d068cdaa5c712534791b0333720" - ], - "40": [ - "293b7a5bc83168ea57f0c39969a8d017b51cbfdf", - "62d32fd040d577ab04c60d81b7d872255a243c9d" - ], - "41": [ - "e5e3f39b7fb4a0e3d0d7b6a2de16c9d94179f7f0", - "19f1cac9ce2908349127607510a335cdb8e3d06b" - ], - "42": [ - "44427d4cb8a24a515fd335858ad6b12b7a81e387", - "f52c86cb607dbf61d18a1454164acf68b05a05bf" - ], - "43": [ - "9f83b93173f0e5b615502769d2d69c66a8d51a0c", - "40d135eb88cf0092908d5c3c02cda00397e8a634" - ], - "44": [ - "b3a680361f75a14b5cc3f59791e09220e8bd862a", - "2dbb0efcaaedfbecb5675dfa173a667f7350ac55" - ], - "45": [ - "9d293c546626817093c5b1140d5fb474b8d297a8", - "00c96a491ce62e510d966b2b4da4894dfa29fc7b" - ], - "46": [ - "848bcebadd6a6827457020471457c39103d56109", - "435dcb7e2d48c08e0c1d65811366d16f990faf82" - ], - "47": [ - "c29a7ecd33caa170bb195394f322eeffe9f1ca77", - "553a753d7243860e6199903be03b887f23b93b2b" - ], - "48": [ - "413ee717e0ad95b2987fe8ea558f47f33c988bfd", - "553a753d7243860e6199903be03b887f23b93b2b" - ], - "49": [ - "7fac52a2858bcc9739ed41406fdd4a51a679a007", - "b838d6b68218fb57e0b54a77cfc9c3aa67879207" - ], - "50": [ - "5c1eee0957431d26119fbcb136975e940233b24d", - "7bb7038e580e29c4295f3c8ace4f4348e07b5fdd" - ], - "51": [ - "2d8f9ed3852f8a29ea90a8d1b9e426f623a28ca0", - "545f31c50d5c878cbca71ab255e38c9afb371e78" - ], - "52": [ - "2eb5587306ea2adde299329e66a221a03b8b1166", - "18efb0920c1961edb4d13a365d367b570e126d34" - ], - "53": [ - "4363b3ea3fa7af1a2f35a82e5255cc216638945a", - "c6f15eba7f90b62d62b5e0c6ea00951636d68a83" - ], - "54": [ - "d63e906911b3ad39435ea97651c4a2cdbd67d8ef", - "c7313d22af8b62ac22bc0818718df558e91ad8cc" - ], - "55": [ - "a10154f0df316fbdf01e2eebb6d5a59091ca294b", - "18efb0920c1961edb4d13a365d367b570e126d34" - ], - "56": [ - "19f56696b88107a390cbd99c2527586ba6e292fb", - "651d45b257d28fa64fef4cdfeef0c4cffbad79b4" - ], - "57": [ - "4fa8e3bb15fc12465101b7b2849cb42c5aaa2fdc", - "ec89b86890829bd974903e4625268b3ff8a51769" - ], - "58": [ - "a2f131741f42880db039033465ebbeb90f1d81e0", - "42b9e9146ecbcb9f09602a268825fe4c59b6d848" - ], - "59": [ - "6a0aaf4b948f005cdf741dfa98ec1dc29eea86ee", - "1d0b87c2042bb41239d822372e3693467d7f0abd" - ], - "60": [ - "89f82a118f9ef0c8ad0940608fc3f571f0d1dde8", - "16c03e220711e0ab2391c6bb68ff781ebca239f1" - ], - "61": [ - "eb0b56936d099e23a96352c3673f0a320e99d8d8", - "7199e85664f84d068cdaa5c712534791b0333720" - ], - "62": [ - "fc89646654574facdbe76df06698a1fb49cdb1f4", - "6c709182225a35a5d6fac39cc08712cd8b23a250" - ], - "63": [ - "79d05b35a0c60a565488dfeb6bf6103f94c65b54", - "8c0e1329ed4c4a64f204234208f173af2c559e0b" - ], - "64": [ - "4c09bdf599b40dba577a2d8e210871b9f8d5e4c1", - "7199e85664f84d068cdaa5c712534791b0333720" - ], - "65": [ - "b80194bab4ed3f719b40264560e26b2ecf83c1fe", - "a07f697705f2b7f90c38ce969cdd73f7388264c5" - ], - "66": [ - "056a3dc9996b75c8b3946d626d33d4dc3c7a49b0", - "b5f3b692452c8e5ca6c5922e251e6cad235aa6c0" - ], - "67": [ - "52762463ba3d7605d7245aea6fd6930a8ee9a841", - "dda148445725d34a83f2f9e33e65e68e5a5ee6c1" - ], - "68": [ - "8eba42dc31fc4fc7ead317d1d3f4744cc4f12de3", - "0932e55e2d01779e582b5c05cec7ed967d750177" - ], - "69": [ - "ddfaa24b428b49a9107b2db97cd2bec9ac0ec562", - "cbcab97a9738b471c7bc691e9f085ad082cf5806" - ], - "70": [ - "d1fa5594724874c8c1d6c53f724cf16dcc63db45", - "545f31c50d5c878cbca71ab255e38c9afb371e78" - ], - "71": [ - "ce69d6daa7f0d0055d70660735ef09b7c24eac5d", - "435dcb7e2d48c08e0c1d65811366d16f990faf82" - ], - "72": [ - "8c41fbb264b101d324f45c1fa23c93dab28bfbb6", - "fd25358a52fae5a58eda5ee797596f7883622714" - ], - "73": [ - "ad49118252f15280488d4bee73f0e56a19e1ba12", - "669a87cc037e5d3f88c39fc1d21472e99a2af768" - ], - "74": [ - "efaab2c811038b0a665cd41dfc28c7334dc41a72", - "0fa00db39e24215958812ff0f63b2ed065a1b631" - ], - "75": [ - "6459600dfbc31c0d1bc574e47b501c4c5b293009", - "fa40fb48f3b38dd243174fd40e21bf01523cfe4d" - ], - "76": [ - "4cc41e924288d65dc62ad4418c46bfc39c27abe5", - "274be26d037e38f8adf3411214c95ea4a6775d49" - ], - "77": [ - "3a56d0f880f4e70064ee6c9e16b291738806aa4f", - "40d135eb88cf0092908d5c3c02cda00397e8a634" - ], - "78": [ - "f24fc1254167cd8a9837bd27729d3cef4f130a9a", - "553a753d7243860e6199903be03b887f23b93b2b" - ], - "79": [ - "c5bc791fbdae3ebbd591f1d4216036256390d84a", - "00c96a491ce62e510d966b2b4da4894dfa29fc7b" - ], - "80": [ - "f9c52055f355b29f3adff7638efe423a677a7d39", - "a3f86f1d3f6963564593aad276b07b5cb456a3c8" - ], - "81": [ - "460e36e80abda3c52691622953ced62e95e6a074", - "40d135eb88cf0092908d5c3c02cda00397e8a634" - ], - "82": [ - "c0016811390f2e2591f6c4e7a4f6d7dce11d7457", - "ac9236975ae18efe7b227115b3ff69f90156abb3" - ], - "83": [ - "817099b277830add72a05f5c6624e197ca732f4b", - "fd25358a52fae5a58eda5ee797596f7883622714" - ], - "84": [ - "6f334ad8d21fd9a266171b3d59b588c3aaadd3a9", - "7199e85664f84d068cdaa5c712534791b0333720" - ], - "85": [ - "5e02c69ae07ee8e208739e067828746f67162dc2", - "a6e293ba3af2f50581c3c5232d1355f978af9ad5" - ], - "86": [ - "088dc8ea4bd5c2cbd262155e21953af47a28d4f1", - "42b9e9146ecbcb9f09602a268825fe4c59b6d848" - ], - "87": [ - "a6043d97547bf0ae89528bccc594127fab9a95f7", - "70cff0b69140db571b33032112e0f2a7cf27bfe9" - ], - "88": [ - "c3af9f55227278111e323b7e4d48b62036743c11", - "aa955b015af613488641c7b847fc005ae559c68f" - ], - "89": [ - "a2b1de2406b722fc3234058f945ef6ebbce33a4a", - "d07853defc4c5c98e69b14dd9fad48cd2f5628f2" - ], - "90": [ - "47d4a9a058f5a0625cfac5a6c64a4b959e5fdc05", - "918f06c838e0f67373b7593e6a853d742b022df4" - ], - "91": [ - "6a6a8f87e7640074b4c07ff6b63f2802594d335b", - "e93fc49fc31bf605f44f33f8b8eb8408b5e86a77" - ], - "92": [ - "60d7260042d33ae1c02a487351a02f4a36d66eb6", - "1987dd58d906a5e4a893da451edd73cbca0d8f54" - ], - "93": [ - "6e9e640ec8f4d6b517c2c86b395148bea9a56115", - "d298b6b9df33e277b7aebade5c1958655a677deb" - ], - "94": [ - "4550b0a51f9369e14b9777b935ed37b91a0df4bc", - "f5f6627a13ecfcff8c403e007f3dd1c2fefd5557" - ], - "95": [ - "db66c8d6df06c0e387579cf5aeaa9768424d3b0c", - "251cbc1a32d4502af41fca78e0bccae36d122408" - ], - "96": [ - "89fe4d0af5c4f58abf47d9ea8225198a7c674087", - "b02599830513c1cee847bc82de72113f97bbea26" - ], - "97": [ - "83ab43be5c0acfa7a8c397d696476092ddf2d0de", - "251cbc1a32d4502af41fca78e0bccae36d122408" - ], - "98": [ - "18b5462ec27929371543da4ffae1a745a7326703", - "70cff0b69140db571b33032112e0f2a7cf27bfe9" - ], - "99": [ - "ac7353271e2be00c5e876ac9d44cc9c88b79a481", - "cbcab97a9738b471c7bc691e9f085ad082cf5806" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-04cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-04cpp.json deleted file mode 100644 index f71ebf567..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-04cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "64a8be3adee22c39490e92d0ab0f80985dec6a81", - "a74a080b9886d9e3d8f0141356a5a35c7a03a3ef" - ], - "01": [ - "f65be1e7f206259391a35db2432a9791ec8f50f6", - "28635783b4ea72dccf17d4520e70318d36d6b94c" - ], - "02": [ - "dbb7b004be017c38362057a5229b9bd3600d9f61", - "1d7ed82c014affc7bd106a2800fe5b818855c2bb" - ], - "03": [ - "41dfaf298563b53ba3fdf94c2f73e4c45c9da589", - "12e91ee077acbd073383c32a5612000426571468" - ], - "04": [ - "7470c7b11856b1f026f9cf3b0f6122b480b08ea6", - "c3372c010048de29ffbb1aea748b745589cee467" - ], - "05": [ - "c26fb8315ec8ae5f93fb3e1952498dc8655e9c6b", - "3b7f888b5705887b792ab36fab6e3056a321b549" - ], - "06": [ - "b633fb5043d4db39e7f0c63e3938524ebcc272da", - "b7a3c983fbcda764aecfc7dcbaacd27480645549" - ], - "07": [ - "732dc26c395822d1f3fac3b6156f3bd4668d8a79", - "cf7162531fc3a7563935459f0b58363ce78e4cce" - ], - "08": [ - "8287c422f0a87cdab9bb6a8d312e37d2ba3b5106", - "643d302c956c11c71e379a47f947134433407c6b" - ], - "09": [ - "00cf037523e27a08c695523fe4331a9fd9914e51", - "a7db8aeae8f623da70a3336a0e0bf7a90e0690e7" - ], - "10": [ - "9fd3857d653d7a690590af514f03a81674e4d24a", - "6baea6263600319323f802824feda8b20365a0db" - ], - "11": [ - "c706aa5e93bd20f6093699c474ca1adc0494339c", - "b7a3c983fbcda764aecfc7dcbaacd27480645549" - ], - "12": [ - "b147008fbd02f5c4247d05c0ea3209e50268e958", - "c8d83bfa067bd662b4f217ec3ac0036609037ec6" - ], - "13": [ - "e748f5b18f31173d063d8d99bc3f4ace06492ee1", - "59193e6c18bbd421c0206ee3cf30f39289a4c175" - ], - "14": [ - "e73b4e77697a10e208627c274e4e66bbbbe28023", - "dbc8ad6a2b5d3f0509d9f6a69233a2268b46f571" - ], - "15": [ - "581373df5b667538e121dff217497b5bc727efc1", - "6d6f283454f7509ed4db4727caba3049e641259c" - ], - "16": [ - "a8b18e5efbb6fdbf190d449e03ac6772c877c65e", - "c3ec9b92c54d4c9672e4dc1dacf31182192d04e9" - ], - "17": [ - "9f369effc4fbe565f991d04565ce726c0644f2db", - "975b0598f4576d840f3b17b82a7c0ba8145fd324" - ], - "18": [ - "8756fcc2c9f5bb4a2e8c0184478f901758391efe", - "17297fd2f485ad4dec9c44d46b8a11a3cef96252" - ], - "19": [ - "192fbc26c67a59a6564bf278bc8f54f5b45ec143", - "ed939fb50d45d4a2aff768aac88d491f89076730" - ], - "20": [ - "e0184488879bfeb8308ef1c9e2f61da181e51e5a", - "f4a764665439cbafa47dc03d2bdc476319f0168f" - ], - "21": [ - "29874f4adfa26b8403c9a87ba66ca5d7e99a680e", - "26423443af8ab085686571f16b58c7899e0b4299" - ], - "22": [ - "2cf41c7ba1c327f4fa1fa16509e1b828135d5bf5", - "a469813180ac259ab8486263bca87250ef624c0e" - ], - "23": [ - "05bc06267bf3d3e8ea66a90d818ffa264371536a", - "7381f59644f958d256bb1110af818b01159c5b09" - ], - "24": [ - "79d62b826547361a04701fb7cc7d7607e3a91707", - "643d302c956c11c71e379a47f947134433407c6b" - ], - "25": [ - "3960b7b5cd7e173ae0c8a1cc3da640027786b8a9", - "37785b2ff8b0427adcdc9f46e36f32c51466a623" - ], - "26": [ - "2f9a3913f2ba94f3bd460f1105afeefae2d302d9", - "07e0f70166bb282cc74bfebb28cc139aa736e559" - ], - "27": [ - "8a346cedcc1106498e7a321ecf2d27a990dadb46", - "1ac3ad2694fea737cb9fd0067a4cb65a845d5089" - ], - "28": [ - "d18c522d57a908aeb43b3defd05b3a97a89d6c98", - "765030e02d4b113cbca98e8d97cdcb1a5a56d49a" - ], - "29": [ - "4b132e585b3af6e74c692b016eef7f8e780e7a10", - "cbd0b12ee789d676ded9e2e514d7133803c6bef4" - ], - "30": [ - "8cf1d32259edf9f8d10bb64a59ea2dc6664caa5e", - "65a1bf78226f2be0f1001bcd188351da07f6ae9a" - ], - "31": [ - "8b99635a14844f895337b79acc97d93e7c20a9b6", - "ed939fb50d45d4a2aff768aac88d491f89076730" - ], - "32": [ - "e9c48e55eb01edebd20c9401a196798ddf6a7893", - "6fa64fac2ba3d88d09ff60e499688d1c0b9de7b2" - ], - "33": [ - "46b0af418521536efce33e7dad1fea87c35ea570", - "740fd0620ac90a6d63a85eaba61f16a91c741dc5" - ], - "34": [ - "629fd6834c40ba4d6f53bb4e8446ae0d3adeae1c", - "1bc68dbb907a46340da976ae596c6cf64ada0b2a" - ], - "35": [ - "7492557e847c55b38545a49a220e1be2391b9d24", - "a7bea7b69017ce055e9ab18bc99937861fdde985" - ], - "36": [ - "7246e42260da38457c6512d65aac123448f28240", - "98869907b6d0c020a24b3be48478c2527590372d" - ], - "37": [ - "31780546f58ba2c0d9c243cbc7dc1be3a926bbf9", - "3b6e07ff121e76735d1f5a8ce25ad40bd8b183bc" - ], - "38": [ - "4565190f05b8664be1f39293e8b9d9e2a587179d", - "221c919ab413dd18925908e578e0a7300bb5854c" - ], - "39": [ - "472d13ac2bafe8377d2a279cc5367c6f4e9cac1b", - "c87afb366217f857779b5c22cbf6dc630a1440ca" - ], - "40": [ - "c82334b8da40cb761529e664622dc1e7c00c5c7d", - "6ac580b01b925553601474720b2fd487f0001b22" - ], - "41": [ - "ede1e83b267f2c7a29e525bee6084f7313020512", - "c2627e322858b901634ca77334f12dd92a4f3f5b" - ], - "42": [ - "e2461c2e8dde163070618221d5cd89fdf7a7edb4", - "65a1bf78226f2be0f1001bcd188351da07f6ae9a" - ], - "43": [ - "92792374caa6a3f1f78d0e0d442502fb2a0507bd", - "d321234e453617155ff31c1b94878c7c5fb7f96d" - ], - "44": [ - "0cafe816cf03b8cd091ce1a8489d5b733c7c50cf", - "397380ee8c183cb88f005afc9ef1cbad2606589a" - ], - "45": [ - "da6f02927eae0fcd92fb53c5a31ba4ed50bb930c", - "643d302c956c11c71e379a47f947134433407c6b" - ], - "46": [ - "4071fd0c8cb1f1f81eb19c9b1b2db77d822bf1db", - "6baea6263600319323f802824feda8b20365a0db" - ], - "47": [ - "559a9082231b6369b82577f179b0092bd202d3bc", - "9e12a211b7d248c869e27c69671c6e800d4027d2" - ], - "48": [ - "61ba2a70872245741e5485566f5df6988198f090", - "d85a2611dc75890ff36a4b577d4d8831416a2da8" - ], - "49": [ - "b9c3de2ad265270746ce3296e5e5eb0c48fc82d5", - "975b0598f4576d840f3b17b82a7c0ba8145fd324" - ], - "50": [ - "b8ab2d47b1c886c612021c1344832c04ddb88eca", - "323a8d5cdcd303a90c0bbf1636026c3edcc21701" - ], - "51": [ - "f4be1560b29e93f9177af1e4480af7dfdb6325eb", - "fc23bb6ba1d69613b35087b8567b08605312d910" - ], - "52": [ - "9a4d2d70d49f31139b1937f9b54582b9025f3286", - "c29c58542713c35120f0c8ce966615abea3a6723" - ], - "53": [ - "d06a46d92bfabd0e6cc4fdf6726d3f2eac0389a5", - "5da6f5b6c7c52060cb2d1151bfa1e28ed4e21768" - ], - "54": [ - "2a97547e7601b4e18e99759ee529a73d61db4e25", - "a5ed8be8756986fe560455694e28e01e1559af1b" - ], - "55": [ - "24635776e87ff479924392e9bcc6a272dbe2f6aa", - "5b8def0fddba788ac61d8e42eed94fcaaa993915" - ], - "56": [ - "376b87176e7f5f7212dbc650613d56407d19c24b", - "f4f6a4136aacbc7b574cbf0314bb69ea24e111e5" - ], - "57": [ - "e3ba5e3af66622fffe29f91a431367c5e3968adb", - "10323d8d801599d10ed8ef9e3f5172928f0cc8c5" - ], - "58": [ - "b369198a99d1de70573187b2756499cd23097a43", - "37249888bf97c6f1ed5bdb099bb21a8cd3b3b809" - ], - "59": [ - "a337b07f1008942be88894b72d073a533678b103", - "07483763feaa777f5a7eb73a497363adfe3f2c3d" - ], - "60": [ - "0912c33a48ed98597466ea99d340831c3fea6b7e", - "3b7f888b5705887b792ab36fab6e3056a321b549" - ], - "61": [ - "be886e9df5b526c6dba4fe99200553de1a0f2d70", - "3d30a5fb0ce223cbcc7bfe78aa01b40805aff0bd" - ], - "62": [ - "c8f03e40e69d148c0dfef0bad519b81998d40280", - "790f784fb77bba2aeb3cd9379c844b91a243d333" - ], - "63": [ - "dfe1b5fa8bc7a4acfe1ddcf716dbdba578d9c6f9", - "2f627990d8e89bb7267b004271c01e1dc622ee70" - ], - "64": [ - "53a6cb0aa267d5ecd3682573fb2bb64f042848c8", - "98869907b6d0c020a24b3be48478c2527590372d" - ], - "65": [ - "f84ed5f71c9da160488ee1ff6a780146e5b45807", - "32d93e436b052c081f10ee434dc0cbe6bab3ff40" - ], - "66": [ - "62505d535aa25b2c6f207febeff3ffffd504e6b3", - "ed3f798b13988faa36871dccf3ea5583e4f2008b" - ], - "67": [ - "f8435b4bac7fdfbe61577febba9d27c52016f425", - "4e843393bc102017ea8418e8e9e24ffb071d8f65" - ], - "68": [ - "052dfe0f33408bf80acbadb47ec48f8bba1f36d6", - "f23c1ae950aed29d615967456e3e7306c794c7ac" - ], - "69": [ - "01b9b5e396ed1709b298e59467365455c166d629", - "043d17e9e8d6a0bb5eb5b138ae04bf2a81c87b96" - ], - "70": [ - "176d74845c7a800a9cbae37ab890d6138969b5c6", - "c7a3a208fb4c60b82deb370c588c95edf837bee3" - ], - "71": [ - "d24d763e85473fe937100fb33f5a7c541b2c53e6", - "ed3f798b13988faa36871dccf3ea5583e4f2008b" - ], - "72": [ - "3811e0d8aba0a244eadb54c44728c82ae81e7e10", - "c3372c010048de29ffbb1aea748b745589cee467" - ], - "73": [ - "06506a28189ce217a48745a783e447e20448d586", - "81df2b9532f0476efe9832f491037acf97c39eee" - ], - "74": [ - "4887931796d44a3368237fd3c1a4f63a5387fb3b", - "febb80e7e835c70dc6484f08c9e7e2cf83088892" - ], - "75": [ - "2b221ab96944d8e99fb8c1d8fbe07e080140adcb", - "053fc11c8a0dad07bc8f2d83888e93b0e003f3ca" - ], - "76": [ - "de59d01d659c6da69b7056426795cde0b895a2dd", - "baa5075854ce52862bef1d893cc6d22138e2a129" - ], - "77": [ - "24ac29d53359141a8137775dfed03b9dfd75fab3", - "c7a3a208fb4c60b82deb370c588c95edf837bee3" - ], - "78": [ - "2904f4bca9b4d40621de49301e1f068f8a9d865a", - "d85a2611dc75890ff36a4b577d4d8831416a2da8" - ], - "79": [ - "ce1347c056c37b191d1216522ca28f9686fa088c", - "7690fa3398b485ebbea4a3128c500c60c2eaeb31" - ], - "80": [ - "3a26bc613f70ae188bcfc009f9b09ca83307908f", - "b792d450e54dd3b3382753cbdcafbc150cb34c3a" - ], - "81": [ - "0b792e2019c1ac6833f3b9e34b64765a999b8d43", - "dfe6e6c95084ff8bd3943c1b04afea276db94813" - ], - "82": [ - "254c5feba81056346c85f847fe400aede2ce3b86", - "7381f59644f958d256bb1110af818b01159c5b09" - ], - "83": [ - "5e7aaa35270fb3b400cbbf3565dd66540c6798ce", - "ed939fb50d45d4a2aff768aac88d491f89076730" - ], - "84": [ - "8041e8c157894d1fccedce0be151199535ca8574", - "ed939fb50d45d4a2aff768aac88d491f89076730" - ], - "85": [ - "ef38c97e5e407b06ac549da02215bbd42bde2260", - "ddcb9ffe18efc089e6f6b445cc2193844e9bc9ec" - ], - "86": [ - "60da1753732a4430ed70f14b352850f6af201473", - "e0c270ad04b5b16434725ffb2e1f3008f3737b60" - ], - "87": [ - "928c1e48bcf829778a2ea7792fdd4cb3af675006", - "21e06b6b0ef6b8911ef7c37f48817f579a0f6663" - ], - "88": [ - "b89d53c8753921b981faa36f67a6794fe34f6384", - "1ba85e1394ec4a1d6eb1d83ed1ea69bddaf7f1fe" - ], - "89": [ - "afcd3cc954352bf823dbab9aedcc95250ed9c396", - "c8d83bfa067bd662b4f217ec3ac0036609037ec6" - ], - "90": [ - "fbb7bfe3b5d440b15a2650ed1af3f5eeae30229f", - "0e9af912880ff737caa67613d0ddc8cfe5088649" - ], - "91": [ - "95f8613c2386881402acac38b7327bebfdf726ec", - "dc51efde3bb68dcbe41e11e82f463bb3c9b6c731" - ], - "92": [ - "1a081e3bf18a08e96e120d7dc09775ac83bcec7c", - "ca5097a75b8be7731ef542a5934732738362aaa5" - ], - "93": [ - "5de4318b2a03295a50f0d570b28eee931d36583f", - "a729577797a36b20d86515e96947570a7164705a" - ], - "94": [ - "b59bc8cda4402b089fe00a9aa91be369e53a2caa", - "6ac580b01b925553601474720b2fd487f0001b22" - ], - "95": [ - "7f5eb1feaf8e45e30c1443f75a57f0d3625ed9ce", - "c3a80b2c7e6f7daf5176f99b57a0d38a6aaff4aa" - ], - "96": [ - "9207c0a6c961ce78c81b694d8161bb4449be7fa9", - "603d71c97d7d908b2102b8f6e396724d15a4a7e4" - ], - "97": [ - "021893458a8ac7fc6551f5295e95bb89ac41ec6b", - "78e835398673be79c213d06774f9f62962abf41e" - ], - "98": [ - "56d4944e84ee8a086602220366a18dbe0e16a5c3", - "5b1812fdfc3febfb37eedf74f3e478b9134b985c" - ], - "99": [ - "a86cbb1ac1b7bca56cbec3c90ba521b28f171eea", - "f4f6a4136aacbc7b574cbf0314bb69ea24e111e5" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-05cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-05cpp.json deleted file mode 100644 index 5e8279228..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-05cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "cee25216520ea6c7ccf07b9b7783445590592d3a", - "5c2d5897bf2ef463c72ec6b5ffcdf9adb5d79837" - ], - "01": [ - "036ae514152710f335ec5437bd4a12e25fc698e8", - "1884256dc0b9a8417c036bf90d423c77ddd265c8" - ], - "02": [ - "2de765532f30fbc3d3ab912f632e1651c1e6f5ea", - "e28456e2ee9af2da74c61436dbdf91e06bdd8715" - ], - "03": [ - "3ac900b38ee6c97523ca3ed29dd6f8610e86d87b", - "5f4a13b6d4fc01cf3986bb4e9bbb51868388eac4" - ], - "04": [ - "1ccb8a56a35bbff308433502cb8def287a49c7f1", - "650046cf10144465618199ba84aed924e25081ae" - ], - "05": [ - "475bab8a99bc2abc4b9a147032158ec2387c0644", - "4f1bf1ae7f07b1ecff7678e4efaa4368fcab025f" - ], - "06": [ - "32ea259e3d154aac8cd670efdecbd4014d234afc", - "9612da69517b82635ae1ddf1599427a9205559f1" - ], - "07": [ - "0ea6ab7e4615db0e219f9e29eb54fb1cd3b7bcb3", - "a7602c9d0a0e54b6634f9271d745981fbd3e53a7" - ], - "08": [ - "fb7707ea47821ade982d3a3b1916f2fbbe96fbcb", - "c09b9251f44c94e082115d3efa39448fdea29c59" - ], - "09": [ - "a4bee488c45db33c63ffa9192bed5a7fe3b159f0", - "e888c5f74d4f653ff52c1b042755dbf08486be1f" - ], - "10": [ - "6e4d914bc427cb5333275b64565c6b99ef270c76", - "62c4588cab6564d2207d6da133265eb87b2a1767" - ], - "11": [ - "faea1a9b36558bbb822ada57de9631d836f64211", - "16b740c77225fb05562feedb833be0c60dce84dd" - ], - "12": [ - "0ac02c08374bf0699b1ea543e7c86398ecb4e70b", - "18270443c5777e066c581c5bff16e4e5ff134173" - ], - "13": [ - "ce16ca245211ee1ef38b4b285a58b8cca1a2df07", - "ffa318d5548cc435c339eb625a5d8919251af0f3" - ], - "14": [ - "b522049c2f4ba213f83491f9337bdab158c21b2c", - "3005debde800b049c1884414b3dd8851451f5da0" - ], - "15": [ - "44034360c8438860d1799c906aeffcf6a950cfab", - "441bf375f78f125ca22b94e625bfe7895ef55e79" - ], - "16": [ - "665f128fcacb35b5d5fb937c1348dddbe3d542a8", - "b4310c010860ea00143f51bf31b658d56bd13e78" - ], - "17": [ - "5136c85bd4f354d281060f8d700971cc5f0d64bf", - "7be493ffaaa7e21e1a7d48d8d9b37bafacfac4cb" - ], - "18": [ - "8bcb52e48e135708442183a4033b20729db8e380", - "e888c5f74d4f653ff52c1b042755dbf08486be1f" - ], - "19": [ - "53297fb6425fe79b3622094f1cabab9335f03e8f", - "754bef41a4a494e47c19a80c46361de6d78c9920" - ], - "20": [ - "329f288181177e1a264ee71a39d26f2eb4569fe1", - "79bc836ca63118a9326c8c93975f513dc707aa13" - ], - "21": [ - "16d74ea7355564a8b607e2b5ec18c4fd3305f567", - "2ddf0db8ee05a747c3115142bfd5030ca6bdf65d" - ], - "22": [ - "88f081ad05ff8de9493ed0bb8515b1e62f6993e3", - "510190025a76bc27bf8557f1f901eadef0e68351" - ], - "23": [ - "06772aa4243417f55c5c6c6998929c4b8b7d07f6", - "077a31d8b0a91b302c8c47590ce927de27795a2d" - ], - "24": [ - "d7b9f498ae1bb4e2b641ba63fd9918f25a92c043", - "5972667f85b1bf18fce2b33928053240949894d4" - ], - "25": [ - "cb524efb05efaf6478481aa254b552905d8315bb", - "22d6e53b465cb90e4def76e89e7ff0de94779d2b" - ], - "26": [ - "2daa9880c770f3d358b12ed11c36b0ed1ea1d49b", - "0cae36a01bff847c89ee57cbf22b0b63c61f189e" - ], - "27": [ - "fca04fd8458ecbf982035a24cb4e4985482d2dde", - "bed18ac5941cce57743e9cfcc4d6c534b1698b0f" - ], - "28": [ - "21d86afed69e709024758418fb6794d038622b4a", - "7a7978ada7dd81db3b37a902662a30dfc1b8011c" - ], - "29": [ - "38d080ff330de449c4e3ca68d4c4a8f7ae6433b7", - "75665994c0d60a44d9db76666e9c9b8752a73079" - ], - "30": [ - "c22873ef68a7d2ef48089ff05cd4cd0e804d7a3c", - "3ad9d800bd1697d3ff126121e55504e668c132da" - ], - "31": [ - "570e5558af94b2036bc215851d35947ca2cf462f", - "92d79322eea1b1b7d7b624522d21aaecb5d2798a" - ], - "32": [ - "503e5f256f9faffbd2f84927e80d21cb0648d852", - "17bd71e4ec04ca574ec48337166e532171688988" - ], - "33": [ - "53e59b0bcd1bd9cf72a3c81441d1ebb86a0a4ea7", - "3005debde800b049c1884414b3dd8851451f5da0" - ], - "34": [ - "4d75b93e87ad61218e4169a8569a8a3c000b802e", - "0b805d9128d016313c953bb4297c5e6765e36d36" - ], - "35": [ - "4a96e7f4a0c8d73d5762ee391afef54a56370176", - "b6ee4e0b1b18d611c5d94c06b86ec90bcb7fb120" - ], - "36": [ - "77966d65d5a9cd5f5af5af5c3063b095d2c0614e", - "00bd145b7fb7660d1e61a58335fd5754fa2b4adb" - ], - "37": [ - "c1519000d24627a726a251e106ee867e8545be53", - "488a22e804e5436210c128a03ce3986a88cbc091" - ], - "38": [ - "0f2f79b05a050879e0bcb5b31a8c562fe4ac2b1f", - "767916bb04db59adb05eace28af0d648f57a2ae1" - ], - "39": [ - "15d6236293713f5a80f289b14931582720fbf0bf", - "8488bda270ca9e06bb9462ab2067c6e5ccdef18c" - ], - "40": [ - "5009943d7b1c340790188e216bc066d5beace371", - "6b54b90e091f9756c57da25a7f8066170f3cd620" - ], - "41": [ - "30f2cf06d49e8dd796e5ce68cf2d17d58ed3d558", - "d2f66f455a57043eb936ccbf37f36321eddbc968" - ], - "42": [ - "3d432fd7248883b1c6f5f200a1902c696c4027db", - "fd58f4490a03633e728225ff54429e5059c0fc20" - ], - "43": [ - "1c2f706c4b4e2aac620fa246d2b68f97fbe06258", - "60b72c92aaef66c8188873a843730c291c820509" - ], - "44": [ - "ec7991fd0e56c545dc92a9b6a538b556fbba6094", - "41e4479fb59dcc2bd45a7640aec9e3f859ecca84" - ], - "45": [ - "2e58139d82b919cd276e0fe346bfc3c4b9ba7303", - "de9dcd769812d78cde31fe9998b56cf65406d734" - ], - "46": [ - "8454c837a74918a69cfbd772ef2ef7784d55b219", - "7ea3cffbe1ff4464c1b743e8319ad6e979f344cd" - ], - "47": [ - "b61daf0b0c69e8b57a033042797a4723bc24d45f", - "65c66d160d61ff8f4e4734ea7e5db68ed35adf9d" - ], - "48": [ - "e6890f59fd969391a3afbb28a715f478fa0b62fe", - "8c3044f0ad53f9204308d0d50efd1acd42e23419" - ], - "49": [ - "6ca5fedb317b9c9f8e8e751e43666914aac2ac2e", - "232ce5d84b009324e4cc4adbc0bbe37c51395033" - ], - "50": [ - "6a2bcdb8b34a144c02c0088bb21f1cdd4f74e542", - "4832cfd7329c81e785a56126eb9011b02bec3613" - ], - "51": [ - "107b7f9496d559d7c88624a4bf0a303a3b515218", - "5213301761a195ba9e35e0c6294ef44e2777319b" - ], - "52": [ - "82613bd0ddd8ab589099fe1be94903d9fe9ff90c", - "38d16a72e83e87f96b2209741c27b87491b37a91" - ], - "53": [ - "5c6d0ea44668089a419bed8ae594926ad6b048d0", - "79bc836ca63118a9326c8c93975f513dc707aa13" - ], - "54": [ - "af8fdbd56bb549d7455e8fa4e7cb995b857319bb", - "1884256dc0b9a8417c036bf90d423c77ddd265c8" - ], - "55": [ - "c3e0a5ca3f1520211636fe679fd108d21e48e8ea", - "831d25de504714512d8fa29036af1234dfbff3a3" - ], - "56": [ - "dd3ebf94c38d0c5af24122e3d2b303b639cc0a5d", - "ac6f917996bd6c4e4ed90dcc156ca1279e2a8eb7" - ], - "57": [ - "461c65200344bd42b83ebeed41e6049fad966f35", - "d2f66f455a57043eb936ccbf37f36321eddbc968" - ], - "58": [ - "492d957eb767acadd88f7b73474e652b93729eae", - "1a696776f7f866d8c9c8a09e09e024e63d17bbf8" - ], - "59": [ - "957efff606c38a7685775e1e37e56c2bcef86f6b", - "4184c77ab4e474ab026b09e84708ce885f3e7f45" - ], - "60": [ - "d5f92ebc9cc63f52a20fefb3ab102cd297eb7709", - "3ad9d800bd1697d3ff126121e55504e668c132da" - ], - "61": [ - "b085defa5ed32a1af4701a79ffe03697a6ea0b30", - "7369e0161cf60dfcdc84215ec1d5b7f88e52f24a" - ], - "62": [ - "22d1b88711b07c21c6ef1f450a4c949e3f3c930b", - "886b75ab2e2918ac2a09034d2d9697a611734b6f" - ], - "63": [ - "f2a7c978a02c905c617e96e49433f070bcba5dae", - "2459fe8c7cd0a17156a8c13315071f438cdd0c0e" - ], - "64": [ - "cf91a37d64d1d0df86ccb946890b94a1ec2bf502", - "05d0b640d1ae893078a8f20e4f3a4f290040f8de" - ], - "65": [ - "64011ac9d4834b0924c92beda0d5ac2e3d17e184", - "e4967e7ab381509dcd02a4d97bd91d00bce5db54" - ], - "66": [ - "ffdcc56c99062f966e2806a3131a92257e338b78", - "b33ea3630b0d48b176492d499eb3cc1ed54d5e23" - ], - "67": [ - "6ab7a67161ae25f57c860b4166f3ac74c909b4f6", - "66faff0da9e05776cb7ad4d0ae6c4d2f657fa86d" - ], - "68": [ - "376302040376e7d91d9e8a237c671d80f7dd776d", - "5972667f85b1bf18fce2b33928053240949894d4" - ], - "69": [ - "b7b3df31fc3ba02e65ce650d42bf1645ff82fd3c", - "de29f0f4cc79227729f54bad4685b2183a7520be" - ], - "70": [ - "d3282eab73618e488bb0bea7515c15eea4ff48e6", - "5316b34b13f735dd23740f391854c762b24554e8" - ], - "71": [ - "c5db434bb211855f66f27f1a33838484e03447e5", - "b33ea3630b0d48b176492d499eb3cc1ed54d5e23" - ], - "72": [ - "cc484048ab3cb1e9faf6a00b4310587f5e6fa848", - "3dc0993baa3646a34d0e4e54636fb3fdb84e5a36" - ], - "73": [ - "78c3d8d6f97b2345da26aa6091864e2a6b76b991", - "fc0aeb769af6eccf982b5fb011eec91faddcf3be" - ], - "74": [ - "6bb87bd284616ff78f3afee0f2a4507b16db42b8", - "fc3b66fd50f90ca3f5f8f5d4b72899b52cc1726f" - ], - "75": [ - "881ed9945fdc65de34200b3be1d23c4b89313f75", - "24b108039fa1a44c39759d4dd69acf58ed26a1ad" - ], - "76": [ - "2e128baa0be3c75745c037510a741691e8ad1721", - "71edb46e15cecd76b01bb89063ac28f4bc6c1dfa" - ], - "77": [ - "9daa19171fafa07f4f462b3352c5aa0d8d2d50c4", - "36ccb91391ea1ee9a8de90e3bab486ff0a621bc0" - ], - "78": [ - "5cb58bf1f4eee7f3b6c3fcb39ba69f4b3ce8f2f0", - "8605a0662c7d766030a919847395772886adef3d" - ], - "79": [ - "3eea79a0e6cbdedd711c5b8f3b80e47e66f9e03d", - "709fda0ca24627b75b4ecbda0d5d8ee03276b6d6" - ], - "80": [ - "1f07c03e7b3a4aa9802d7ffbb6f903e30d689fc0", - "05d0b640d1ae893078a8f20e4f3a4f290040f8de" - ], - "81": [ - "999d4386b17f293752aa06d86e45399a3fffdfb9", - "8390c044fa2d0ee17ed44c8afdb8f42120306d62" - ], - "82": [ - "0ffb63747e3809afa7d80dc4c9d117ec2dc4da76", - "718d28efdab829162a93899847d44ae559727958" - ], - "83": [ - "7a91acae2d65201da34889511658bd9458ef2253", - "de29f0f4cc79227729f54bad4685b2183a7520be" - ], - "84": [ - "4680e0441baf0b9f49a589435493dc482d92b16a", - "739ee6a231f6d133b721e9698a52980f98fac106" - ], - "85": [ - "ba7e950b1793452b40a4f83ddf9213168e020ec4", - "e995f433d9259bf4f5488d061d06947bdabee543" - ], - "86": [ - "00701d502db1ed8c3c6271017951606def01a1c7", - "4775e406c990ee2b62441ff6edaa9f15064911a4" - ], - "87": [ - "72b8c74fd263688dd1b4efc79c2c7cf2d13c6b1b", - "16b740c77225fb05562feedb833be0c60dce84dd" - ], - "88": [ - "0dbc9ad23546e6c0ab685946b8deefdd62ece603", - "6c92d87589dacc863bb3ed6d1ce74c429384c493" - ], - "89": [ - "f6e9f1c8b87de6f1145ea81c22b6eef0a02f8194", - "bcf05c4d9e55d86df701aca3ff93aad50c0394a8" - ], - "90": [ - "db9974779e4a2096aebdada4a5b4dffe7472b1fb", - "e521f2761693ab7cd0fee034398c2b7d903b2d0d" - ], - "91": [ - "2cda00d058d8f6f24c838c13c7e060313ce44abb", - "8a2397044299a9fa15e7501fff24b38446400181" - ], - "92": [ - "433ca9251a76e10b82281c9704c0daef8f7a135e", - "711b8046ae3217c5556fe96dd625415ef1b0691e" - ], - "93": [ - "1ff0395a0c8347d82b3eb5fd735c09592043d24c", - "8a2397044299a9fa15e7501fff24b38446400181" - ], - "94": [ - "290edfd12e6c32a4caa9791fc1e558b1ecada351", - "a083fb1f9955b665cedb1c007d8dc8668d15b7b4" - ], - "95": [ - "15eb8f5e5a5812b882d0d2ec13d947599bcb8ba3", - "a083fb1f9955b665cedb1c007d8dc8668d15b7b4" - ], - "96": [ - "cbe0983901131d3f9359838b5462550e28a87163", - "9620c1515836100fe1745c4aaa0f5eaac5c53272" - ], - "97": [ - "a41a93741b836ac7818d1319c60eb1ade386a18f", - "caf07ed1b51654108e21a4c6d5974c4bcd653aed" - ], - "98": [ - "2f3b56355823f549f2de5e691867b6d87e23ca70", - "8c3044f0ad53f9204308d0d50efd1acd42e23419" - ], - "99": [ - "8cebd69b15335277fb48c426d8574056f59876e5", - "c7f06ee35ee27f976887606cddd3ee0388d1c23f" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-06cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-06cpp.json deleted file mode 100644 index 404e183e0..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-06cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "b9fd0e156cd109ac9cdcf6ef9c2eb84831b6524e", - "589f7b70e206c40d89702e67e7a3a053f5244adc" - ], - "01": [ - "72a54113ea32693fab35c2bd043d10216c6d5e29", - "55b500cb82f642bff9434f69affcc77d76e98108" - ], - "02": [ - "d5d091d3a5b589e170be8cefad5e7f421235cb74", - "847119c0fb664fcca376e052bc8bdb75bde0f850" - ], - "03": [ - "3e1beffb6da723e750025dee9243116a8dd3cc62", - "ddb27c122cd06fb03983a6929828c09021d5033c" - ], - "04": [ - "3185eeb683469b4fcbc695ea99a1660b62e80277", - "1fe6aec73935502d5f723a50a01e296fe888d24c" - ], - "05": [ - "345992beb55cb8f81098e0b24ec12c01f62f0d1c", - "63498539e2a506d5784897e9adda2c42ec287259" - ], - "06": [ - "a2bf6a4d19da977ea45573f42af44eaf845091db", - "c50c32a6e6b35b90e62ca03bbb75fe5c80d28f30" - ], - "07": [ - "ecac28bac6fc26ac38d5270107cbe793df695b1a", - "32e98796be8e255df51e2ecfdac4b29f527ae210" - ], - "08": [ - "4aec9629d1eb041dd10efc104cd7c2184b48cc30", - "983b485cb8d03f146d5f0cb23ef7aa8104fff753" - ], - "09": [ - "f8ded7322f2f7460be7b3c55645dd8db6a89e155", - "22fdecf9f0608875a71896f403f8408c7140d215" - ], - "10": [ - "bfd99706004732435447896fda1ed6b0131d0b9e", - "a61c1652d63c450363511b6db8178ced9cde32bf" - ], - "11": [ - "d702e42f9f98988e7c28289b63ad8a1c7dc94cb9", - "6b1bd72e6aced0880c3d302bbd0d53c87f828df7" - ], - "12": [ - "03cbee3a33d8c1d73f3a3cd10e51dd5a4a9abdd2", - "0a89a2b9fe702baba295a6491b6fd5141cf22caa" - ], - "13": [ - "517286bc7a2f994876d4778862795f9cb94a7c56", - "bcf556e2b7fd346547eb5e379d4a4d1290960a0a" - ], - "14": [ - "60ee370edae2614425d7631586eed2d6f1df8cb4", - "550b712bf2ba2dddb65f2f80c6d16e787550321a" - ], - "15": [ - "39a702221379e6d0413b30af5c493e1055a05987", - "841c4982243a3d5c46c09433821783f13003aec3" - ], - "16": [ - "03bc963585c762951cc6ae8e0ff7b190ac9c591b", - "baa2662ba5b4e01caff66820101ee120f26e9c29" - ], - "17": [ - "40ef1b2567350239848432c9beb04a0a00ffbe4f", - "b19344330d7fd9a3dab55c26d6e8659f6079a9b5" - ], - "18": [ - "e7f7d0f37ff09b371661bcb13e0f913818fdbc7d", - "e471c098107578f148e21a0bd7499d966fa98e21" - ], - "19": [ - "1b1c6f4e93a27cdafe3b035b925d1acac8518e56", - "38aef3a295c93cc1fd99cbf0ec2b3f8954b17679" - ], - "20": [ - "e95c90ca86083b663b0cbafebd9f2f1a98fb3037", - "1eba23c4d56fe5125f49a65226a89c44d5f3cf09" - ], - "21": [ - "369c470587f49a2dea7893ce4477328a230d8859", - "7ef3f7f04cb0a8df3d847405832e2cdbd817ba2e" - ], - "22": [ - "ac1bc063be888913ad84e23d32b3cb95d72f5b67", - "53f7f42867b5e850f0a773532cc38c06016f2f2d" - ], - "23": [ - "831b8d02a29fe40718cafe75f5d667867b54cc78", - "0356b2839810c3791000e4f65ff6e5143bc168c0" - ], - "24": [ - "6b0f0b24bbe081a6e02fdbab74cd0170564e45af", - "5f61f15f9e6e8fb6369a4a8df8d2ecdacb9304d7" - ], - "25": [ - "2e3b7813f205c160d79c0d527d98f31c30022021", - "62640542a171bf96feb53810c51486d2c4e4c595" - ], - "26": [ - "73bf3b8838793fc1e123c7e223cc8b437a705cda", - "22985b9c601a02bcdb1e8da9b11f271b32504f02" - ], - "27": [ - "fa04e2c64c6f472208013d71575e235291578544", - "4fcf8aa75122e0bde36bef39c6ec377a5f4e29c6" - ], - "28": [ - "4a5a7bcdf204645a39602813727ddc750d802dcb", - "d0f3fc33ac6554e23ddae1a7707ec1c6a5b9f2ba" - ], - "29": [ - "acebc3e8c6b25fcec6907bf253ba45eac2836163", - "ebae73ea24ca397a4d06a590b6790550680397ba" - ], - "30": [ - "2b74006aebd1d78caca4fc16a4ed53b7f4736db4", - "1d61f43491b33c36100544faca7ecececaa6480d" - ], - "31": [ - "aa193aa75aeb5e7c6845d8886bbd7f5783a35b6b", - "555e6daa7e4ba0ec934860e3af8c256c044aa036" - ], - "32": [ - "510de270c127040f58058e5d9dd1434afece4ea6", - "c53de87650d4dd9761d6f9b5500fcd9d6e19eb7d" - ], - "33": [ - "5a3bbc2e266a8159312665418dcbe2fc74dc56e6", - "57f882811de30aa9cc3c01b16ceab82e60c1b55e" - ], - "34": [ - "ac54fbb676b161fbeafd11bc7b4c66fc9e131082", - "4201a37b6c9d29a8374991ab74ecc4b0a42a1c09" - ], - "35": [ - "91ab1ebaf8f1d06243f274924ed93b1922581a0d", - "ebae73ea24ca397a4d06a590b6790550680397ba" - ], - "36": [ - "77a3d051ccb99cdb86651aeb66f2bbf9769989ca", - "555e6daa7e4ba0ec934860e3af8c256c044aa036" - ], - "37": [ - "ce45174f8f0e1dd70441f056a4f289e4e3eb237c", - "d0f3fc33ac6554e23ddae1a7707ec1c6a5b9f2ba" - ], - "38": [ - "15672e1d7fba76749da32c77108fc826545ed39c", - "89a40f9993091489ebe0172a34041ec85e3379a1" - ], - "39": [ - "47e81849f2a02210bf13abb0fd0aa0fdeb2a112c", - "6b1bd72e6aced0880c3d302bbd0d53c87f828df7" - ], - "40": [ - "405bd127cdae3059a0f836e5cde2891900065db0", - "5b3c43be33602fc4fbe802191b0f5b11ea682fc2" - ], - "41": [ - "e58783c80f0fdadb851bcd18a3112a9f6c0bb352", - "e265b1d69d0583f0ae85f2a74920aea0e050f710" - ], - "42": [ - "710029b4b97f8642a9392929e48bb777ba2b30fb", - "62640542a171bf96feb53810c51486d2c4e4c595" - ], - "43": [ - "eadaef773b9703b93176cdf68b9c6e62dd32fa6b", - "205d59771a8ba0fdb2220010e8a825d43d372c45" - ], - "44": [ - "554d90fbb670e58685badefb431de224d31d1680", - "732f009099097279107fee301b993d4db8ee49c4" - ], - "45": [ - "840b5ea078f7cbf3035621aa3ea8178cfc3fb37e", - "f389f8954c0c2c7ecd117c98332deb4e2c10116b" - ], - "46": [ - "e5252e191ea0d7bc11d0a8da9fa02853d20f6b28", - "1d6a461fd08701bdbfe2de09951a5a722c9a31ba" - ], - "47": [ - "ed9013fb729045f6ab6145bc68f723e223090933", - "fcbe28fa8e75899b79c684123a7865f39b8d97ad" - ], - "48": [ - "1aee1fc6f87acc51cab7b4cf2a00f5ceaa431754", - "4fcf8aa75122e0bde36bef39c6ec377a5f4e29c6" - ], - "49": [ - "40f0554e5cc345d7bbc83c3122f02022b98289b1", - "e48709730a650a170b65b2d0af7e1c7b1b748b64" - ], - "50": [ - "5705ec683b60c49b5ae77c1b5399ae8c2886c6ea", - "9182226c66f7dec679ee63f0e2079368e1bdd554" - ], - "51": [ - "96faf2853892028ea01884f85900a5b14e84174c", - "bddea3a1b7ebfbb5a2f3b96de6502724379a4f67" - ], - "52": [ - "75a7f63c0410cf9bf84cac60fdcc435d85080823", - "9f5187598f6c36e23f493ce79f9554ef2f903792" - ], - "53": [ - "42cd2b8e2002d9cb10503f40b643724aa898deac", - "d564ae8257b5c6eda14d875d113cfb5a76669b0b" - ], - "54": [ - "ce42d85c01435577db48c26477722d8a9aa74a3e", - "5358d3095c2640831e730a278d01c00ef3c3c4a6" - ], - "55": [ - "14d0a565ed411b87cdb40a37194ae1415a385bfd", - "8df50173225b5f75ead16321858b6ef2fe28e582" - ], - "56": [ - "8e9bee6d5a0ac8eeb54f7bc47fee4d8d3266a8db", - "2459ce4f1730d68bb50b5ee737d90e0460c5ea6d" - ], - "57": [ - "b78adc4fbe842d0af5eb6aa5f7ba1533988d648a", - "22096c34aa52085312df6fd958df745dc7030112" - ], - "58": [ - "d5f289b4c76e90574dd4f77e976414984871d28f", - "2983ec4a1c3a40bf3c90e75f69a7e437606f877c" - ], - "59": [ - "464e34cebd62721db1a72308f3abdc6cc1ab8751", - "56cbe6f21e2068e865d7b90a5255c2e222e87b0f" - ], - "60": [ - "08401d9153038a2dbd3ef7e0b835263a6a52d10e", - "1d61f43491b33c36100544faca7ecececaa6480d" - ], - "61": [ - "7601fb9cf0566fb99b2a2d66c910260c1b18ce7d", - "f2489c6f8c41026b101a1b4d79d1e25a3d665eb3" - ], - "62": [ - "71b4bc25236852167ecbf307c49de613ae5b53ae", - "d13b91b4ad89e37da70cf46e581d53438da9b60a" - ], - "63": [ - "2c2528411e013c272accd1cbb89ae73bed6cb0bc", - "f6d6f2d58e0d91a9030d07277cf2893c8051652c" - ], - "64": [ - "5a47319420964e36d8942d1c92f81a8f0ec07bc6", - "09c2a91c04b1cf0500a89e9d47613fe861270bc6" - ], - "65": [ - "25f5033157ac7147a48f218a1d9c451b08a1cf04", - "30784f865e4eff0f28f0e2f19358349b15d19619" - ], - "66": [ - "50305925bba6dcd26eef7d5dced2577df6f81625", - "48397d227cfcfab689cebc916eb429928c67c531" - ], - "67": [ - "1919297c0301160e134a16e2c24a166c72f8bc7c", - "fed8c7efb04fb6398f0b41393a07e132daed58c1" - ], - "68": [ - "6a908c27091a25a1a7dad995cd7e598e345c352c", - "b136c9a282d5cedab9efbb0db3479f5e94548c64" - ], - "69": [ - "291f42346e04adb10a51244c72f2d9b7b233e14d", - "3101c5d8e730b38ebe116769d154f5d6b12980f8" - ], - "70": [ - "3d6d450e9d6df65e2ed945c86a5968df6b6c859d", - "e3262d2706bc89e8298270590227f513c83cc8d4" - ], - "71": [ - "15f1fbff6ed559080db66f91d5f47e6d6ddb3e72", - "ce0b2d9478a99ce59cc6ac5987fdb7aecc872d78" - ], - "72": [ - "6b45014ca686a9695ec2edcb6c2330e7dd775ab6", - "6b1bd72e6aced0880c3d302bbd0d53c87f828df7" - ], - "73": [ - "b038617d4f1863c97f26c259de7d6b7c104bc326", - "e8aa8b31f5041d6003e2223177d88b55933f23e2" - ], - "74": [ - "f61ede9a4b6134dab77d039ca938ee433d5a0c0a", - "e2af5f1642a529b19b0c5eeb9a20fec5decff142" - ], - "75": [ - "f5df0803f5e65ff373f607667165763bc87b8d62", - "3021e44bd5c3b048dfabd8909c44f32e891b4c4e" - ], - "76": [ - "7818cca01189ea3880a59053b9c4318fb30d85fc", - "b32d49b9bd668b09bc81f6e1ae4088f9402ad3c7" - ], - "77": [ - "4b7074aa802c20a09e1622fe2b28ce1f9017feb4", - "cb3c05197ac29b0ca4306bd445f10869c585d3fd" - ], - "78": [ - "07bab8adb56005f1bc17635c89bebc65b5ee1977", - "09c2a91c04b1cf0500a89e9d47613fe861270bc6" - ], - "79": [ - "f0d22ab95df7856f60f408f32e90f605eace9a2c", - "80ff6132dad024e19e272dd5ed6334b2092528c3" - ], - "80": [ - "94365ed72a14e7be164bebed4ecaecdf8d01e1d4", - "5c159963309849281313f7431d2649da172d3767" - ], - "81": [ - "0e44d961cec049a08aedf6b4535dbf13e32a8873", - "dab10c55fa71759f93aa1852fd7591364534295c" - ], - "82": [ - "fb7c13faa7d9904b6b3d6563303a7090bd075462", - "1c765d9538a5fc0d94a4612f69cfeb56eb9a1f99" - ], - "83": [ - "99424349f579d3766da09bc21da1e87b1fa41c81", - "54a404ccc19203ada20c257c24cd394fb2ce43ce" - ], - "84": [ - "3af407d19d478fc386439578b86254be5953e5dd", - "fa54a56c4d8c2225f5c519902a28bb467f1e5b51" - ], - "85": [ - "011fc381629c9f9f736c9d16055615c63ecf702c", - "ce68768ab185f68f2d74f32deec691652c2e370c" - ], - "86": [ - "28dfdd23b703f6beb881f8cb16d6e2bb87397646", - "822bab572a03f7c828c6725a82caf91611dba147" - ], - "87": [ - "aba3128dffc16e7223753ed5ddeeac4faf432c6a", - "f47598324462551e25e8c90e0af383e76594869e" - ], - "88": [ - "3fa04dd43d01f3d8413913a7173e54c8492c99c2", - "3265918749807518e84c70ed0d228538ea730f4d" - ], - "89": [ - "b111fb2151947563e3635201b3403150cde0b7f7", - "5993c66d91365b113dcd34fa607335e84ba2fe76" - ], - "90": [ - "a14beb7bd42a5cb2627046dc00bcd4df5d37323b", - "847119c0fb664fcca376e052bc8bdb75bde0f850" - ], - "91": [ - "b3df2a6d7520c657630e8ff92cffde89118fcfbb", - "b32d49b9bd668b09bc81f6e1ae4088f9402ad3c7" - ], - "92": [ - "8373fb41355989ad889fa7f804e730bb1174f930", - "54a404ccc19203ada20c257c24cd394fb2ce43ce" - ], - "93": [ - "a21c851bcdeee0ae84409d9cf71bca829c496977", - "e265b1d69d0583f0ae85f2a74920aea0e050f710" - ], - "94": [ - "5eec6e2d70b7c8923d8f8a4682552528ad8e5cfb", - "002ca22c5e6042f2079f78a9a0b296a1e59ab5a6" - ], - "95": [ - "dd0f88c5779cab6ab3f810c1ad44883283570fed", - "002ca22c5e6042f2079f78a9a0b296a1e59ab5a6" - ], - "96": [ - "dc165509e01b83104cf2b7a0ebf552a1f9f6b6da", - "ef6fa969c3d7c0575fb679b660ae03c3310e2455" - ], - "97": [ - "d32293053d448538220a19246474431906afbd76", - "822bab572a03f7c828c6725a82caf91611dba147" - ], - "98": [ - "b1a2b29a64662cf59a254571e9fafc3e563ad02e", - "c040d483a70e075e9a3fed5c53a1d0f78805a1a6" - ], - "99": [ - "178cfc7417c1b447c3d3e55879148c820b54e62e", - "6b1bd72e6aced0880c3d302bbd0d53c87f828df7" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-07cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-07cpp.json deleted file mode 100644 index a751bc953..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-07cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "cc01178076d512e9fe50a3f5ed38a173a5cad0d1", - "97b2be0febd748f52980e0f7241185a0d2b8698f" - ], - "01": [ - "fd8a9d78d94b6692b7ca1a1a5d89c917ed4a3ccd", - "1af5684a4000ba0e798812a1777b59ca3ee91d64" - ], - "02": [ - "be2fca3748595bb4c71491388581f829c6fd29ba", - "130b181c1edc7c3eed0ec42e9a02d5b9e970cd43" - ], - "03": [ - "7d16bcf7c92a4bb9e55967bea4831197ffc18f43", - "aa3e1a140aff16d7826d4180b9f0349ddedaa41f" - ], - "04": [ - "c9885135fee46385b5584f1a3fb63c3108c92a98", - "c131e0e047acebf5b38e8eecaa54fde22ef88cfd" - ], - "05": [ - "bf108bd0a4b774bfc538602c949067e70f6d96f1", - "adb2e900c2c31dccb6cacfc9328985e296fd4575" - ], - "06": [ - "2f2cbfba2507b7701161e80219f4b7aa91e5c79a", - "3b20507c91db7a2ff5ceda925f6d35ab46f4f9d1" - ], - "07": [ - "b2b84b10c26cc762bbbdec78af03babf64fbcca2", - "b778ab7ad9235e317abbf1a92eae5c88f51eb1d9" - ], - "08": [ - "54c38332581f6f20c9e0cd599e5c8a16bd590178", - "3293ac5eb59e98c1b31d61e5de4d3a91497e7ab1" - ], - "09": [ - "da91705671630460591a06bcfe8f1a1ff22ab7fe", - "ad9c1c7dfd41d66f671f3636a2e1ae4f77b23f54" - ], - "10": [ - "a90803070e3abac46c7cf36e13226fb5b2a17cd5", - "b92105d7a3760346f273ba5cdde88c6b6fe97a21" - ], - "11": [ - "49f54f6e19cb281c61e2992d9d634eccc79d2a46", - "88da68463b2296dabb4579f0d7ff753c6403ace5" - ], - "12": [ - "ec140e624acbc19941576d8eaabe54be1d58e6f0", - "c9aacc6460535832f2a3a4278663b3a1018bbfe3" - ], - "13": [ - "6ef30f94b8cbca0f60219b9e89356342b1f8edc7", - "adb2e900c2c31dccb6cacfc9328985e296fd4575" - ], - "14": [ - "7ed6405a5b9d09010b8042912bc560bf24c1c035", - "dcc74f0d69a509f44f79c615204b5a6672ffb2c0" - ], - "15": [ - "67ace6e9c6808906fdd6dce6a3b2de2c35e40de4", - "a21ca2c077a7513da8ee8ffb89b6fd05a866cd41" - ], - "16": [ - "cb11b5bcdd89b9da85925001f95f4e35dc7268d5", - "91f67615d090c1d89e6a9861931ce078f14cb53e" - ], - "17": [ - "ae5bef44f7b00670c7e90b5da095ea48f1595cb1", - "a75c4c84f80ca48d1198ec19b2d718d05028e764" - ], - "18": [ - "37b65ae018641fba30f214f94792d93da74b704c", - "f7597b6b2958bd102c2a29ab79c8bfd2c44d5a41" - ], - "19": [ - "f91f6e75f118fae49a38499db3facb97357b69aa", - "c75d95a2c0f1a807cda3036edf5fe471dc4d4751" - ], - "20": [ - "bc2e8159954f3b6cd7c9272f2114a84becdacc48", - "f92a7353f727aa7296e3e9e8858e19942ee67db4" - ], - "21": [ - "977d2abbff1ea53b429349c2390aec7e66e14f05", - "79e87653795a1f15ccbfc261fe684706bd474131" - ], - "22": [ - "088b465ea4a11661894660c6d99743610fe7ef3a", - "939c0d5feb1c2f554530f5a736872e221b65b9a2" - ], - "23": [ - "4d63c8717794a86e7fd9c80c64f0b4d7353cee18", - "a04e7aaffa7733b26fb8f9fd5e281e60374bbed1" - ], - "24": [ - "d22ef5e9230f5ed76221b261e3d29bbf50335366", - "0a134a745d937e278cafc23234c6bc52eac0d218" - ], - "25": [ - "70ef910ce39322d8ca6924b3e955bdcb52fdec19", - "343451100bc616740495f7662e16185837a550b1" - ], - "26": [ - "2d42950ef77a8be115cbd70e4c8b4a0b5ead1300", - "79e87653795a1f15ccbfc261fe684706bd474131" - ], - "27": [ - "0b9870905f30b434ee247b5fbc8e7adf1bc1ad45", - "6677a49751716e8f8c50f483a61f5b4540c60c2b" - ], - "28": [ - "b8660dfba174c464565fb31b1728ad53692ceeff", - "9111f5f49297a9f6603d6ae3c242e8b2b1e7b149" - ], - "29": [ - "a8409d5d9dfbebaee70c49f771ac562cb3a567b8", - "9921011e29e540e686ad4aaf83fb4b510b0e50e5" - ], - "30": [ - "80bc44e1773daeafbd534e1e93e5a5e383dfb5ab", - "abc4fcb5e019369b9b753e6abaa608a20be1bf8a" - ], - "31": [ - "9a2c28c7d5869009fdc6ea2ebd19edaa18125175", - "a5d638dd05a0911a6469bd11d085ddc6e4aed7b0" - ], - "32": [ - "f1a18e06a55f358d4804db0817d7847fbe107cff", - "e6128224f8f743062d7e0a08dd757bd4c113f21a" - ], - "33": [ - "51599b2ae573ebd47526147ed04d02c56718bf84", - "b92105d7a3760346f273ba5cdde88c6b6fe97a21" - ], - "34": [ - "6d77f60791baf9c21339ddbf247f6bc533fac4b8", - "50bfbcc1cef33461fa2192b00d0a29798dc34f54" - ], - "35": [ - "1398f5d77a3d52feb816d1bb9d38b991f69dc409", - "e85abaa733d8a758f0509ab9e5a38437997a1b40" - ], - "36": [ - "7ba0d56c51c609002b6220364d7d39609ad5cee0", - "5d84aa91b049ebe5d4207d1c1e5846207ce3674a" - ], - "37": [ - "777a5dcb8b8ac2b45ec6f5d2fa77f8d2a70a9b2d", - "9111f5f49297a9f6603d6ae3c242e8b2b1e7b149" - ], - "38": [ - "5f315f93aa9e72b61557f6ce82aa72252c16f390", - "77d450793f756a3be4156fbe2268222869671d74" - ], - "39": [ - "c2b992c0eff813caa448448547c4a9dc08b29a6a", - "65738693f63bb1d165d2320a64402e549e31224a" - ], - "40": [ - "aac53d98a85fddecc6048c83ece637232b710a1e", - "4cd2811a8bcd8a98909949fde26600f611184e5e" - ], - "41": [ - "97a7db546d3dc7dd882cde8e34e42f459ba1f7b0", - "476798a3a6ac4a76ccaace05c2005d5ad7f8be62" - ], - "42": [ - "5974d639556a4b28e2f954bcc9338dd275978a56", - "290768b8c708f2b13784a778e63604c174a4458c" - ], - "43": [ - "8e1735ddcf337331df27b790eb009fe87ca027e9", - "e85abaa733d8a758f0509ab9e5a38437997a1b40" - ], - "44": [ - "247fb5ea474cb5193251e54a5d7ae228bc50f499", - "963e35d44326d151e1e44a81876f800e5c309f87" - ], - "45": [ - "d4e768b399d60fa3b5708e8710aba44735b8936c", - "5d61765f43a7abbefc3a7c3a08bc541a3e990af1" - ], - "46": [ - "3087c8f7944edb84895134f15e59bf19a23154fc", - "5b83e9895edc8c9952ae68b89510ce5f036011ff" - ], - "47": [ - "b2f8b194e762552a7d12b3c63c1f9fdbd5281d98", - "6677a49751716e8f8c50f483a61f5b4540c60c2b" - ], - "48": [ - "20e37c55526111683665134c6982e616882c5a37", - "632cac1e94e5b7dd4f97be26c229a2a72683c8dc" - ], - "49": [ - "dee630c2415f761f33c775392aec4bf29a4b78ea", - "a75c4c84f80ca48d1198ec19b2d718d05028e764" - ], - "50": [ - "22b01e6ce2ccdf9c820114ca894e8d444dafb3fb", - "c20a723f6e2a02f3d7bdb5799c9299e69689de99" - ], - "51": [ - "7371bf403e0e47da0922ad9a74826e2ee2a697fb", - "dcc74f0d69a509f44f79c615204b5a6672ffb2c0" - ], - "52": [ - "a51274aa3c5a9c9523a2221a9265554b0b95d52f", - "9f11180f931e90383cfea7befdf1ffd25963421e" - ], - "53": [ - "526df85a2d5c0f1535de548879ba1f215b250fcc", - "b92105d7a3760346f273ba5cdde88c6b6fe97a21" - ], - "54": [ - "8accd3df9b791bb3c1941e093f8d9edaa2be9496", - "4cd2811a8bcd8a98909949fde26600f611184e5e" - ], - "55": [ - "6c9ce8354616b871107547acea3602f76167ad5e", - "e6ad8d43b83e9e905abd5baea2dfe71405e7ae7f" - ], - "56": [ - "35951e8ae3917e758e80c6133c9ac68eaf8b4491", - "50bfbcc1cef33461fa2192b00d0a29798dc34f54" - ], - "57": [ - "19b9f7c32d26afc41822d64236f45c7f800137ec", - "a75c4c84f80ca48d1198ec19b2d718d05028e764" - ], - "58": [ - "f0c9c84cbfedca824a8a1f98b0a6756dbebb9a2e", - "f3cbfc9ea730166790eac2d06b8469668d152dce" - ], - "59": [ - "3f8a21d83e69b24c624bb4ba496bfe8d46bf28b3", - "400bfa92764b654c7bdc63e2b9ffdce011e556a6" - ], - "60": [ - "b7d1ac4c3bc7c0ced435fbeb2cc987b0822e5424", - "bf1445cf52bdda2c1a610333d376e3a8e8fae24e" - ], - "61": [ - "f8c6f9c07b0142c7be67515b9e856653f517dd27", - "b6620e1303bd664a915ec87ec8bdbfbc625d908c" - ], - "62": [ - "65f8e2d9735abc73a21a2ab64dc254969a655726", - "11bbae4c19792cc65b7c93aef938863a02c32365" - ], - "63": [ - "2c224abb2ff6994259291286da645d2cd03ffc65", - "0cfeb09e18946f18207915b1656954c9f5af708c" - ], - "64": [ - "7479c3f7bc5248632bf4526f2423bc7ed4102a96", - "65738693f63bb1d165d2320a64402e549e31224a" - ], - "65": [ - "5f305d7de6f508c5a6d293ce3ba2ba1e990812d7", - "2d5e9023a36552eefa21bc483f7f3adb4d7bdbef" - ], - "66": [ - "f70f3b683e82f7cd49ea0810db04b62cb976c2c6", - "97b2be0febd748f52980e0f7241185a0d2b8698f" - ], - "67": [ - "992cb43622ed3743e8f5465532e92e8c98e4be8c", - "130b181c1edc7c3eed0ec42e9a02d5b9e970cd43" - ], - "68": [ - "2a3b47e4d1acf7a1407c536b5d30ad4f5778c1d8", - "a75c4c84f80ca48d1198ec19b2d718d05028e764" - ], - "69": [ - "024ab203fcc7bc67dfade48a4c68eb931cd451f3", - "71cc7ec6c0d59e6cd327e70eda61b43187a63682" - ], - "70": [ - "8483fe135992450513cec61dc0b550cf0b3502a5", - "7f055bcfe13dbcf97bfa7a46239e7c220cb96c5a" - ], - "71": [ - "3c54a6948027bdb421f82ad063fae6d823f87b38", - "1af5684a4000ba0e798812a1777b59ca3ee91d64" - ], - "72": [ - "dbad641ad89cd434b9e86e981368a5ddb1da58c3", - "69648a02245e219f3631f578468186e70a48ee85" - ], - "73": [ - "f31ad2cf72f4caeba7572ce47e4100263387e781", - "befcb1a3cbeef5962554fec62a464fbacd457009" - ], - "74": [ - "4e2d53f9cf22baa892abb970959fdd71e792b6ef", - "88da68463b2296dabb4579f0d7ff753c6403ace5" - ], - "75": [ - "d09f9941d8380eb562f37421f88109a91444883d", - "41bd2ee2ee163bf5d20e964bac5fb813bb849b14" - ], - "76": [ - "8f584c91d451ee845257b151046bd04a6d3b39d8", - "ccd62004aefb368b4df5777d561d6a221e30c642" - ], - "77": [ - "d25b06ca1463f2ca4bea2f140a6f77bd06ee2b2e", - "c9aacc6460535832f2a3a4278663b3a1018bbfe3" - ], - "78": [ - "8b1a685d445f1e82e5df60270c3422a3ca62f422", - "6a1b3e411fa7f0d6488dd5758943413eb739509a" - ], - "79": [ - "0ecb1dc7dfe836f3eab8905a852824f144659ca7", - "172ff0cebbbe44c3b7878e539d38d9e555b2f8fc" - ], - "80": [ - "f6a99083d80daf9643058acda68a0de63e7fb19e", - "83ea1739e4135306ecbe850779b6e914d5aab36b" - ], - "81": [ - "e62a454c4c5211cb6c8f74da8b66145d4890dfa8", - "a4b41b4e8f4485a5f9d02ecbb9b614e7b20e9250" - ], - "82": [ - "dcd3816ba27c48d6983ef8711206fd058f7d08b0", - "9e5b9752cb2522bd8ee08877c8b5076ce61b8fd9" - ], - "83": [ - "66a23019cade71b373d0f2ff4e4b242bdccfae6a", - "0c2e871ff13add71ef11ac399bfa3382ef199e44" - ], - "84": [ - "a0e61a3a7636aece9ef3f38bc4b42f7963419325", - "02b474fbaae287c41d254c01fa900855097d6242" - ], - "85": [ - "97abab6ccd267bb325de82cfc0aeae3a306160f4", - "f0068efcfe4cc51ca76c898f2a187e662b5e2fa2" - ], - "86": [ - "5d0923866a53882d00cbee2f0584066004a4ddf7", - "94f7b96024785cd2076170e9ba624ff5efa817db" - ], - "87": [ - "16a1c9990e3d03e2a55e0f2c9d3f28c044cce908", - "6e1a70f9998f0aa0771dbf56620753ca6fe16e71" - ], - "88": [ - "2627c2a28ac1735e443e0bc2899d5aa8f9b85498", - "aa1df4a4f4e5bd6d58839865fc57f4a9e8e0efca" - ], - "89": [ - "8bb189ec441d0131a906a03dc9aaf39b10b70965", - "11a16347297e01b56521623e74c171f12afa48a4" - ], - "90": [ - "479df5ed534bb54026b02cd6c494e3ee973fb450", - "17713c116e55e713fd879b0661d63b122f506418" - ], - "91": [ - "ced83c024ea2ed2ca718841d49db82ac461e5c0d", - "01a1b8fdba3ba92f914c84896b855f81814cd3e2" - ], - "92": [ - "defbebd0ca20576f12714c8d50fc11dcb26eb5b7", - "692656a999cca402a3eb8e79d2d3c108d619ba3e" - ], - "93": [ - "0e092e6ac1139ad04ab57953028b2841492feff1", - "476798a3a6ac4a76ccaace05c2005d5ad7f8be62" - ], - "94": [ - "4ed64e0f48aaf9a2ee18601008987e5695804957", - "d3ea98c900ea7538735472505c99eaeccc67995d" - ], - "95": [ - "3a8f872dcc42a55257659702da428df35061ab4a", - "3f8f08c9a5be726540cec65e6191bcd9bc8546b9" - ], - "96": [ - "bf085c87f31cba04b0f5b7048d4918dca8d797bb", - "3f8f08c9a5be726540cec65e6191bcd9bc8546b9" - ], - "97": [ - "162a7c04cd9559d3316dd30571733d60e61b282f", - "3f8f08c9a5be726540cec65e6191bcd9bc8546b9" - ], - "98": [ - "b0447776b3374d84314fc7391ded0c6172af16b3", - "6e1a70f9998f0aa0771dbf56620753ca6fe16e71" - ], - "99": [ - "6896a68d68fe102d4727f365a96c3dac954f921e", - "a5d638dd05a0911a6469bd11d085ddc6e4aed7b0" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-08cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-08cpp.json deleted file mode 100644 index 3656b351f..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-08cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "c6d6256b8575f5962e7591c81c312de11778ed3e", - "a0938644950b9cc1c10a65a17116b41969357384" - ], - "01": [ - "bc1d48892672cce4702472a134b97dfa388f0b50", - "f1f6001afb261b55ba0e2c37d58cde366f0bc5b2" - ], - "02": [ - "564a02bb7f725814be9f6ff3531a0f6e743d2d6e", - "f5377e5543ea115c656226bd456fc244371a0e79" - ], - "03": [ - "30424a6ff700bc194e9f463a956e1319ff31b875", - "87826dab70aa523b5a48d4706d9f8025d20e2852" - ], - "04": [ - "24d220f9a11720c34c95c05a766c71cf6ac4f988", - "9361350d988b8990aa3547fc79f38b636f60ae49" - ], - "05": [ - "a392ee1338a0f543faaf3337008ca896643303e6", - "f0c5b5ef4c019b4ec8b159157ef10ca3c1d38e52" - ], - "06": [ - "e83710fde4d751a55b70fde571fbb229391fd821", - "9deee78c03ba752727ac6d213ab815099f7d084d" - ], - "07": [ - "d6c8d3c19376c5713b7af98da871bf098882627a", - "7f171913b91273bd82ab14d405c956d893d25aca" - ], - "08": [ - "63a16fbebe32ee437c960d574bbca58015b0a105", - "48532970020c1a8f7dd0891e3efdb03896bf67f0" - ], - "09": [ - "056728c20530de7c9e7dce81b0967f2f1df99aa4", - "b1facb6b6901cbc87a8df6cc44f49189d0f28a54" - ], - "10": [ - "a402944610e81a1c84e706c7bca86ce1a3e8db62", - "a0938644950b9cc1c10a65a17116b41969357384" - ], - "11": [ - "74fee42ae14e02527868f161146e3cc2ab759776", - "a0938644950b9cc1c10a65a17116b41969357384" - ], - "12": [ - "302d239e26f06485060f0af52565fd0963912000", - "04bc45194d34b5dd74771d2fb80896652a14204f" - ], - "13": [ - "7389d254f4dc45a72e985c5e242d1cb90cf255b5", - "d5229e44585add9e73f121cdf9cd4a3209cc3b7b" - ], - "14": [ - "0a3385f0eb09fb6c95e9f0faee43d0c8ac25f0a5", - "a19a83e75d67c6b928f82006a9342d122522c7ff" - ], - "15": [ - "b87992ddd4c525aa6342ed1b49fdff699cb5dfdf", - "09bcba23da4d1a91c308bc00ea0887bdce90bc28" - ], - "16": [ - "ea5cebb0b9b1352c0813d8532fe78f868577c712", - "b123e430b61cb67a118c1e0468605ce50a0c9b5f" - ], - "17": [ - "9b7588a64251503c9fe8647ae33addba476b05d7", - "e016ed4bb33504e4b9f6935a323e1926c2efd124" - ], - "18": [ - "00c6313dbae01f9b2ef19b873f2bd98b4b7b15b1", - "03031abffec0a2c3c83dae59dc785f5b7d23fef3" - ], - "19": [ - "887388a07e1d621eaca516f6b318e8aa1e72404a", - "275a943bd652c6370543ff0895a4ee3b33f47350" - ], - "20": [ - "4e893eb108b530af75a2e4beca51b1dceea84d27", - "02edc34d7eadbccac130b57f3600b71987b923ca" - ], - "21": [ - "e50e145f2dafdbbe3caeb5eaba0c1c4d062b9d14", - "96445ceec5f4a22a56087924d0caf11dd85cac67" - ], - "22": [ - "0b2c2468f7909d7029cb7b6aa43db4f7bbfdd00f", - "8c04b4fa468ce3f0a6fe3b5134d8e501e0d6f2fd" - ], - "23": [ - "5910d62dcf215e56ab6cae9d9e5a31806064200c", - "1d8825af269df9406b8366e66629a949e0c3b0c0" - ], - "24": [ - "30058013bdd051a1aa8c74d06ba45e26eb2f1533", - "e016ed4bb33504e4b9f6935a323e1926c2efd124" - ], - "25": [ - "ab7a44dd33c9ee3fbeab6a4798cb9487c373dfff", - "575bbaaed0dceebadd3ea23b39778fc023e4c34f" - ], - "26": [ - "32c8e70896a8f90b8ec6c3a89599cdec9ff2cba6", - "522d979cde13df34a54fb5d75d3f6521739a5f68" - ], - "27": [ - "fcb31d1ac92d0a31c35d08d8f762e073c6fe09a9", - "992b0239f920f3345217cfe17e0cce7a9ca9c86c" - ], - "28": [ - "d00b25cc0d77848a0be7fb11ddc04e6e0aeef7dd", - "275a943bd652c6370543ff0895a4ee3b33f47350" - ], - "29": [ - "329768a25849f09982d58cfb67d8ba87811166a7", - "275a943bd652c6370543ff0895a4ee3b33f47350" - ], - "30": [ - "90949f0d56718edf2dea734a7c064d8440242dcc", - "8c04b4fa468ce3f0a6fe3b5134d8e501e0d6f2fd" - ], - "31": [ - "d02347cfa3bd9a61ff923c1affedaee1c58d2fd1", - "e016ed4bb33504e4b9f6935a323e1926c2efd124" - ], - "32": [ - "7097f2feada603cd794564f1ab9308680f6afeff", - "9e11f0b40f59466754f2a41793d39eac24bbad6c" - ], - "33": [ - "ef867a494aa12c1616adbd61c84edd14452b32dc", - "1a200a181b40f0ace3f0d86a392ec1ee7f291f63" - ], - "34": [ - "6f51e1559a578d38d0e0f3ef79d4c4f246fef257", - "b80cd37dc4a1bc93f40af593821cf56ac2ed2d60" - ], - "35": [ - "79922a7f8891e65d03de14e70ed7e931afc35e96", - "04bc45194d34b5dd74771d2fb80896652a14204f" - ], - "36": [ - "b3e5d9729f417a5e11070570ec9a45e109be68c7", - "a0938644950b9cc1c10a65a17116b41969357384" - ], - "37": [ - "dd8cacf19af8e80c32f470a8eddf3d0dc4301689", - "275a943bd652c6370543ff0895a4ee3b33f47350" - ], - "38": [ - "3f01d8c88b0dfa32a4c049e310e1c01e1d5b2c93", - "1a200a181b40f0ace3f0d86a392ec1ee7f291f63" - ], - "39": [ - "24cb64b8d06f481403257d7d8a1dfc2ff9110c28", - "992b0239f920f3345217cfe17e0cce7a9ca9c86c" - ], - "40": [ - "28d9a485772c45f729e262463fb9026fcb3f8167", - "d5bbfb833e4e8750bccfaf67081f88262197d11b" - ], - "41": [ - "dada0391ca2553a4c57d15984a8a4b44d6646566", - "09bcba23da4d1a91c308bc00ea0887bdce90bc28" - ], - "42": [ - "9fa71de98f9da660f827b05464c6bc750fd5be85", - "575bbaaed0dceebadd3ea23b39778fc023e4c34f" - ], - "43": [ - "68a133411235e0b3928e96d95d44bc186b467a52", - "a0938644950b9cc1c10a65a17116b41969357384" - ], - "44": [ - "d11623462f0a45e84a490a0d339e77719108942f", - "d4cf2cf52224ad9d2ad7510a22ff63813bff191a" - ], - "45": [ - "a7bc6000ef7502e4b7c61b508fcfe3cac3fe8883", - "75495bb7266e2b7f9d079303a2d7d973baaa6a3d" - ], - "46": [ - "3f31e557edc5184dc453887cc34ad0e76acf414e", - "992b0239f920f3345217cfe17e0cce7a9ca9c86c" - ], - "47": [ - "de87cae7178a6e01f9a0530dcabc6341b403a3c4", - "10ff8d72ab62863d4b593b0ba39e4c7ead1ccc4d" - ], - "48": [ - "c7c77579cf12088718f7756dbee78dd827c645cc", - "bcf7a9765221a81f08a807c6acbfb1f96bd38e1e" - ], - "49": [ - "359f9823d7cc1f670e994844de96e0f55a77a512", - "4cdccf9a5fc981f94a5b802d0cdfb63d5b821b07" - ], - "50": [ - "5c767b82f4a65f7b1920abf6a16958e4b25a626b", - "98326f887e2277c1b921692f1b4a279aa1f054e9" - ], - "51": [ - "864995fdd6f7c60c1adccc41ba8dc4f2b1fe8376", - "9a0005ab1c60710d75f8b2ffd75c3da56f6d7d4e" - ], - "52": [ - "7a8a195d3dbaa38bd513a327d0b186bc23f7b054", - "b302260ecc3d1b7a4a4ace011e1324a931f7165d" - ], - "53": [ - "f3c1998b50f8c692e3b428d030976eeb1645980e", - "a0938644950b9cc1c10a65a17116b41969357384" - ], - "54": [ - "7dd2d5a3f345d9639ecc1fc11fdf3e7364e20325", - "bcf7a9765221a81f08a807c6acbfb1f96bd38e1e" - ], - "55": [ - "f5fb4a0cddca274801f083a4afc9e182fcd3e61b", - "d5bbfb833e4e8750bccfaf67081f88262197d11b" - ], - "56": [ - "97e8bad2a996a3309d7b7013eeb40e3435ead143", - "03031abffec0a2c3c83dae59dc785f5b7d23fef3" - ], - "57": [ - "18cef741ccba07e97c8f6b4acdd2d7d7c99a0e77", - "d5bbfb833e4e8750bccfaf67081f88262197d11b" - ], - "58": [ - "cf3e9c02fceabd844bff888d1264084a78ff745f", - "b1facb6b6901cbc87a8df6cc44f49189d0f28a54" - ], - "59": [ - "c0b1ff88702a0718b4c778727eb616c5dc979e5a", - "d5229e44585add9e73f121cdf9cd4a3209cc3b7b" - ], - "60": [ - "94c34f6492384a7defe3d312e0efb5bd9b7fadf8", - "9deee78c03ba752727ac6d213ab815099f7d084d" - ], - "61": [ - "f236f4f5395f4139b22993503517f52a8c3ae273", - "d4cf2cf52224ad9d2ad7510a22ff63813bff191a" - ], - "62": [ - "a6bd3324158f33bbd52f1d8eb6394d201a95ef42", - "e016ed4bb33504e4b9f6935a323e1926c2efd124" - ], - "63": [ - "56363df9f96a84e0aea4b9b90ff442b6a5ec6bc6", - "bcff48d436da1bb2f8c15950e8f378fb0e301ee8" - ], - "64": [ - "a8b764223cf070032fdf3feeda5f0eba0883cf03", - "992b0239f920f3345217cfe17e0cce7a9ca9c86c" - ], - "65": [ - "cfdec5ffce393c10a07fcc38855486fa7c3456a9", - "992b0239f920f3345217cfe17e0cce7a9ca9c86c" - ], - "66": [ - "ff0810bf5c01a07cf40758706dd26aadc5fedbc7", - "120d6750c3bc289dfc8de5d8d268492ab7a259b2" - ], - "67": [ - "08b45f85f75531c2e63251b21a5b39a110f18e4e", - "8c04b4fa468ce3f0a6fe3b5134d8e501e0d6f2fd" - ], - "68": [ - "21c90bc8ba793d7493ccd5a0c67289d8d1828aa1", - "8f02721ad0fdad569c6f9f23aa7def867d85d5b3" - ], - "69": [ - "87570afbca54eed6af4231daeba18676a7a29e3a", - "575bbaaed0dceebadd3ea23b39778fc023e4c34f" - ], - "70": [ - "1228f72d2f48658d26a9c42eddd3fe45f6b14d83", - "b1facb6b6901cbc87a8df6cc44f49189d0f28a54" - ], - "71": [ - "3cfd82f62276ed2d30ad14bf6cd22e3bfb958b74", - "f5377e5543ea115c656226bd456fc244371a0e79" - ], - "72": [ - "6e8fad657ffbda53061b6381eae2ac4bf48c8006", - "522d979cde13df34a54fb5d75d3f6521739a5f68" - ], - "73": [ - "cd3acaf70e30862449fd9f4e96a27d9648e5f197", - "e016ed4bb33504e4b9f6935a323e1926c2efd124" - ], - "74": [ - "b5350c3617dd9fee015ac12f491de52dfef0f0c5", - "1a200a181b40f0ace3f0d86a392ec1ee7f291f63" - ], - "75": [ - "1b595361a00036528b97e8e914518b1cfffc35e2", - "b1facb6b6901cbc87a8df6cc44f49189d0f28a54" - ], - "76": [ - "899bea836fbbc083775b65080c71a96e601e5014", - "120d6750c3bc289dfc8de5d8d268492ab7a259b2" - ], - "77": [ - "97030ae9065e1815267988b93644f054af8c57b8", - "04bc45194d34b5dd74771d2fb80896652a14204f" - ], - "78": [ - "273e15e56313c09c73ed686169f4651c63f41515", - "75495bb7266e2b7f9d079303a2d7d973baaa6a3d" - ], - "79": [ - "c5d6052f5bd181cf1cc360e8a7790a13ccf0d5cb", - "9e11f0b40f59466754f2a41793d39eac24bbad6c" - ], - "80": [ - "de0b9fda44774313a5b4f122eedba7c9687584c5", - "e016ed4bb33504e4b9f6935a323e1926c2efd124" - ], - "81": [ - "aa468adc8dfba84f21302ceeb77ae25bf8b9c88d", - "b80cd37dc4a1bc93f40af593821cf56ac2ed2d60" - ], - "82": [ - "bb7d579d0437013506d301ba8b1388aea600d504", - "b123e430b61cb67a118c1e0468605ce50a0c9b5f" - ], - "83": [ - "0555d3e2e8055a990432cf2ffc0e128042e999cd", - "575bbaaed0dceebadd3ea23b39778fc023e4c34f" - ], - "84": [ - "80474556a73a8ad7d6bd083cc551343cf664ca9b", - "b1facb6b6901cbc87a8df6cc44f49189d0f28a54" - ], - "85": [ - "74a9186c96986e2a3ba9f6298265f7bcc6f85c11", - "575bbaaed0dceebadd3ea23b39778fc023e4c34f" - ], - "86": [ - "2981befc846113bd6aba73e26546094378b6abbb", - "10ff8d72ab62863d4b593b0ba39e4c7ead1ccc4d" - ], - "87": [ - "7d132d8bf013af22d9704ca43830a6314815658f", - "02edc34d7eadbccac130b57f3600b71987b923ca" - ], - "88": [ - "12499c5e3425cc1ac992e63c22ec593277d9ea7d", - "992b0239f920f3345217cfe17e0cce7a9ca9c86c" - ], - "89": [ - "b9855abb705e46e372f36205644c4d91526055dd", - "992b0239f920f3345217cfe17e0cce7a9ca9c86c" - ], - "90": [ - "486901efa229b92214078891d05ac61d44323054", - "f5377e5543ea115c656226bd456fc244371a0e79" - ], - "91": [ - "7c8a3013dd55d417760b304405bf911d2c2705be", - "bcf7a9765221a81f08a807c6acbfb1f96bd38e1e" - ], - "92": [ - "21e38263ff0e6a2c6ec6f971aa695b7c7e12f235", - "575bbaaed0dceebadd3ea23b39778fc023e4c34f" - ], - "93": [ - "64b4e4b6f0a3bc91c56ab9a66046e83c3f09944e", - "e016ed4bb33504e4b9f6935a323e1926c2efd124" - ], - "94": [ - "a6522e140103a07ec7ba2c49eba9d4c49b15f736", - "f5377e5543ea115c656226bd456fc244371a0e79" - ], - "95": [ - "df4eb0efba66cb957d3b35d27a818804898c4c26", - "b302260ecc3d1b7a4a4ace011e1324a931f7165d" - ], - "96": [ - "e4b753d1d22893b3039f10e665d592ca74aa6b89", - "a19a83e75d67c6b928f82006a9342d122522c7ff" - ], - "97": [ - "59e08729b57ee882290ed1b30d46fc13493ef089", - "09bcba23da4d1a91c308bc00ea0887bdce90bc28" - ], - "98": [ - "91b6e9c5da29e235e58bb4adf978b197eb87fb62", - "7f24789ef8bd72d667da5b3b8212732914542595" - ], - "99": [ - "3f72bb822acef4aef88baf5e38230f42923baf20", - "0d80f742a5a4d20df9883f1f534486ed9c70857f" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/cifar-10-100p-noniid-09cpp.json b/xain_fl/datasets/hashes/cifar-10-100p-noniid-09cpp.json deleted file mode 100644 index c1511bcf7..000000000 --- a/xain_fl/datasets/hashes/cifar-10-100p-noniid-09cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "dabad0e5bc836f866f8fa493a9d61844434683cc", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "01": [ - "2b0b8492da27af3f5f2318ec58858884806b3094", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "02": [ - "b6b19d0433f1d51620b2528ecb1ea4b6ba464676", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "03": [ - "e4fffcc9d2eeda03bcfce2a8b172c6d14f96d212", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "04": [ - "7a956ec4a1e1f6258434958015894c39e0acdfed", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "05": [ - "4272b7e18212455f59034a3212f03e41b87e2d52", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "06": [ - "2d6ae1a307101f908e03c90158539e2f50a6da37", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "07": [ - "97f5e325530e3bda510a12abcd0acb1dffbf7559", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "08": [ - "3737312a9916f9de4a6ee0408067bfcc97fad89e", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "09": [ - "6759067d360fc3f9bb46d287b6e6a1b15984dbfb", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "10": [ - "e515a722d1d216a8a0c4298132f7556f98ea2298", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "11": [ - "92c4d0b9ec78759f3f84699cc39578695ef5b113", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "12": [ - "2cff70767926588144eb71fb58d9fa8512ab9253", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "13": [ - "905d4fdc0dfe0ed68ae7fdd229cfab8c3dd800fe", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "14": [ - "7ffad6a48a03b5e4057d67ba4459ae071e239a87", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "15": [ - "d30666b29b7b892d6dc8a9bf2e07d8357e40642a", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "16": [ - "6c6f536291d49e2326e7aed0f196ff8be27953fb", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "17": [ - "565db990db3324de0308e79b68aa13ce08c53993", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "18": [ - "b2411fe49d7593a3770873e8a2cb74b7efcc8727", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "19": [ - "0f4321741514a2627f0be1278dfb78ff6384e978", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "20": [ - "e2b891d1dc9999b731d51925445609466fd7ff7c", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "21": [ - "0356edd662948a50d17a0f2b3f8da526537d6b60", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "22": [ - "02466afb4b09838168d67db2c619509efdd68313", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "23": [ - "5d8bfdfb6700dd4787a4c0c1d2ff56ce9be805c5", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "24": [ - "fde4d511909110377beed6684b46deb7cf30975e", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "25": [ - "4d54b9fbb08d62ebddb1078102db6592cee3799e", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "26": [ - "b9f71524ea17cefbd13bd9484460493d12614b67", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "27": [ - "e8c4dd192ffb19fd14ff04491b182bd2edcd27fa", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "28": [ - "8fc9876cd4c716fc6223100c5327d90661d16782", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "29": [ - "fe582eb35124487f7852f98cec8dd0788053cc2c", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "30": [ - "31a17685563b982b2830aa1090b9efb1b06e9e02", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "31": [ - "8f003256eca4783974f8a91b6424cfcba3ed782c", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "32": [ - "c2a78094a28a9b062461ed62c89afb16a44991db", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "33": [ - "8d8e21b56965039de9003ad8855bd55a487b6303", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "34": [ - "dd0304c1c36f3cbe0387a2c88f0890a01998f534", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "35": [ - "69589b14fa3c9f42aaa247ae5c4be62c068b16d0", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "36": [ - "761b93a49b34e1ae41f064e777c73014809dca44", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "37": [ - "213d9b836288e03c01b121ddf7c33a696c8e3618", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "38": [ - "ebb1376ef2e32d8758b17ece8ee93eb55bf709ab", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "39": [ - "8797d2fb1a915c8173a15eae8be99d78f9d381cf", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "40": [ - "566ac0dd97458779432eeb87064ecdc5de27c833", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "41": [ - "7e2a6b27b0a18a47048bc9e6b388485b9fb7fbd7", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "42": [ - "32d6f42d9d7f74058fb032e911ef46cfd03b1811", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "43": [ - "8b28c3d4c8022107f37674932c0569830b0e3ead", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "44": [ - "af54b33bf3fd56d6b223b5a167fc9b20b27384e8", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "45": [ - "9fb78637522202b7404fefbf88b6890cfa98f680", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "46": [ - "54b9aac2e0f9ee12281afdf802005a5be27b3c8a", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "47": [ - "cc6367ae480e5321ee46af8e6fd556d167539070", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "48": [ - "5de0cbda991320b8ab133885c4c05538c56c3879", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "49": [ - "f7c3ff88fc26f934b6c573e3782d2724bf947a18", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "50": [ - "76e1da13d0e5f23fdd8ddad24328505de77175e3", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "51": [ - "abdfdf61e4e281514b95268b0f68b3775f932f20", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "52": [ - "9118a4a29d0cf1d71d23f98a40ff5d7667a4d31e", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "53": [ - "c288c0cf3f19c6436ceb2c19b84171196bc85198", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "54": [ - "b35975c39e0d5828109deaef0a868c758b1c09cf", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "55": [ - "5b6f04d3dbc171401f0ac95085fbf2a5fec483a8", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "56": [ - "814bdb4ef2d8a5f8d90ead741d28ff046f508a0a", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "57": [ - "e774cd973080bf50d060ba5ee1261b2be8df1a3b", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "58": [ - "84335b04e9a5970b5b3e20b229b4f143bba6b9bc", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "59": [ - "9152aab5d4d1291a9621f48069610045978b9290", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "60": [ - "52e67c099ec6b03dbc94d7d2d01099c8bc1030a3", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "61": [ - "0d3d0c6cfbe60ca3f977cc9b7147cc531f33c279", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "62": [ - "4986736e569a44f2f4eaff5f0543f9bbe2fbf914", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "63": [ - "f8b74eda4cc18708a8bc3961c75bba517eb02894", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "64": [ - "01a87779c86430d56bac10f2d25af9afa8f5f1c9", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "65": [ - "43d76b95a55cc54fe86c6a00a38be777fa4135f7", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "66": [ - "52056a606f317a01c60f3d798e9b5589d1cfb6a3", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "67": [ - "fdaf48cb222d5a35364c008aa1a5b36e8179f0d4", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "68": [ - "f2518dc1b6c6ac1b64b588eed2c751db7d4c8bea", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "69": [ - "e865dc25e25b9adbcf4baf93aea5b6be6a66e658", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "70": [ - "ac06676ceef5e1e7059462b84279d8e637354555", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "71": [ - "8d0edcd6f469380670255d4e630d59f89aa4922c", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "72": [ - "948f9981ce676a17a2c32ff7ae2e6aec6f27d6f1", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "73": [ - "9ae972e5d7dd859a423d71ec080f36504682eb49", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "74": [ - "c1a31c53ea73b924f277b4cdc2dddfe6525cc8e9", - "86bcc35cef20455da8462312dba03fb2386c1aa1" - ], - "75": [ - "9c0a182351b34d51eb1110f5411cfab29b0854af", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "76": [ - "2a3522ba3afd0bd71794e0aac9085047a63c1447", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "77": [ - "b2dd19ac3ecbbd08386e0723aee095319898e3c0", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "78": [ - "42f5befbc14e865ea77b221df305758dc09cad7a", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "79": [ - "daefa6cc54e0dd8c4dff7f7de17022d81f7f8ece", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "80": [ - "5be1110b939f975d431b15492d6efc49d2d6b4cb", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "81": [ - "88c8c2d09b747fdeab254b90ae5a41c7dfa88e2e", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "82": [ - "f1e13fde4c80726ea7a9accd135ad050135dfa28", - "84bd32f737bf97d8bd167f275206dd21609bcd98" - ], - "83": [ - "7128f976ac5ae00e15aaaec04e93efed513cf1f4", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "84": [ - "ecac64e9eb19b6056f8797c38c7b9f165c852715", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "85": [ - "ff8b2d1587fdd4f82ddc40d6159232c2944babd9", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "86": [ - "755b8e724cb23730bdac06949e6d366d40288f6f", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "87": [ - "22eeb5dc4f6cb5229f8641a60e389677f862869e", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "88": [ - "e32cd7a7f83a48d03f47653f0e49b37deec669e5", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "89": [ - "7ae9ce8bfc6174e3d73eea9a6590bfce021b197f", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "90": [ - "a7bdb555098031ac925719cd043b63b620b1afec", - "9b3ed5f9238d6237a1531e5581525202e9469f0e" - ], - "91": [ - "507486be9b5b064401f64ec49cf20328d887a68a", - "8a89096f77ee18744732a78e7b97bfed3afd63d2" - ], - "92": [ - "7b44cac73ae8a17012706be75c869cf9292e85eb", - "af4914e7f4a9cb0cc38f6ab96a86b613309a5c78" - ], - "93": [ - "dc577e46e721eff03df7cdee56c6f18c76e4f87b", - "a20dde7927d799b84521a823a55cb6846059bfe3" - ], - "94": [ - "4643394c04e10b090dd55d314d1680ade1458259", - "81cf9cd10f5c26de9b5840c298c6d5ca38370a1d" - ], - "95": [ - "545e4173c445146aa34fd5215c2195ff9760c82e", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "96": [ - "30152bdb4609d90ffa6bd5e7fb1a21f91f1b37d6", - "036b3dda1e33d47cbbc43a7605ff31bd87f89361" - ], - "97": [ - "ab7d2c5e3e3aa4e6dcef7856945651eda8ff149b", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "98": [ - "d91403a8f45e26aab1543a0d71d5066ae8118557", - "93cee0b9c5716d4a1da06825a53361fc406f97e3" - ], - "99": [ - "b71b96582fc44991cf2c54e25f8bd7784e94fa09", - "1b9df5e128b53b4ac861a185a785c5ce42772413" - ], - "test": [ - "b3445026a7109c894048d592569b09c8344d167e", - "44127f76beca2a38125f22debb2c6d92631e4080" - ], - "val": [ - "de6bab29c49dfce34c389da4c791f4c0b276cbea", - "faaa5f5d3329dc4e961fc0f7dfaa3c1266fccb2f" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_000.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_000.json deleted file mode 100644 index 4ca7b17c9..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_000.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "4139b27690f72f2f6395cb604bbd2c138b077176", - "5bbc1699807bfa124bd1d83ab1607737cd22cfd8" - ], - "01": [ - "a6105921d01975fa7e8b4dbbb4d9e458e00dc46b", - "36248303700d67afcfc592ea084d65a667e06db0" - ], - "02": [ - "50c8177dc2b11beae7bb44ec2805253414c88d4a", - "13dc60fe027406619ac35f98ced29dde04f7f532" - ], - "03": [ - "7d6cd43a209c7529864d6132554f0312dfc60faa", - "2a1859647b8763ee4976d87e4701112d10e04821" - ], - "04": [ - "7560e4f8f5d19a4489b74f9437ac777df588fe3f", - "09908e2db3a5d7cac5697f4a252c19171de02738" - ], - "05": [ - "a6d6afc36062e280e72e3c557fde6d05c84f1100", - "0613a1f0ed4545d9f7a66b210336df453efd8b66" - ], - "06": [ - "ba285224497a187c8d04c374f26b009fb9538558", - "e16525b398f2a80d812d75e874d5bb549bdc356b" - ], - "07": [ - "d7d107ed6ab9eb8732f2aeb4243838c96c09b42a", - "19b8925107e1ffc114030da517aff904e5548e0e" - ], - "08": [ - "b49851bdbb9f8a1a86907e3d982dee7607ddf2bb", - "f05b687686c8ccc5c36ef3e5f5c4d15baadc7c84" - ], - "09": [ - "3d032d3d1336bdfed4806a72df5f67646dd1841b", - "22675d02de9a7cd38629af7312d68483df69f0d4" - ], - "10": [ - "a228dd906816c9cb5ea405cf261c21934a3c8693", - "c41648197a61ea7bc7a898976a55ff859bcf05a6" - ], - "11": [ - "6f096f00c47600c92285446d4afecb6ce902fc11", - "dc7e0d4bf475e2b46aafca726090b4363354031f" - ], - "12": [ - "64b847de5f50ce27da578a632c2f65fcb05d0699", - "a77fb1cd033df9e4e1035d12e9a09367bf948b48" - ], - "13": [ - "cbf002e37b085eeae06f1b475e976f073d136f94", - "646c30b01999325cacca9dd0e8e8266c186e0e12" - ], - "14": [ - "63dc44c397568b5b0a66c51c0df3b192bdcd84a2", - "f65d0dc6c0c1efc9e5b15274f3616605231613bc" - ], - "15": [ - "3fb4482d2fc351aa60d6396602c08f8d770f658c", - "d7acc460de01697a307571a832bf2938cbf455f0" - ], - "16": [ - "458d9ae610ceb26188089a797ba4d5f3d6443339", - "7b7368ba7036e95cd2671fa8f5e45686600bcda8" - ], - "17": [ - "170d51cd071341f18906ad8132028e20f0c95c63", - "1cf2a63996bd3575842e3cf050366e4ad96104e7" - ], - "18": [ - "001df1956f881d5a9b9607430607b25e392583bc", - "42b1361848d4fafefa15d668bc3263c874fa0fc3" - ], - "19": [ - "da07b808a743abb62549add1e09bd113c7af689f", - "a836fcd858642bc2e3d6d9ec04914cf1a3853428" - ], - "20": [ - "9296f6941d1a9bffc570a3bd57ba3e1444038a04", - "27a7bd6f25b77fb277114a853c2411ddf20c6552" - ], - "21": [ - "13ef5dd0b88343b9fffb302bf7ed30000f9c2272", - "219fcb280bac1b314fbfa3fe72741f39194a21aa" - ], - "22": [ - "149a16236b2f98c5b76137e7f1f0f4b05403e678", - "1b17ebbde6117852b7b60bced0f0bb27996abbc2" - ], - "23": [ - "b4447418cd45a88c2af0c12a1f5933a9d700f081", - "0c4c9e16fe59afac5e229f0e70886ff2aaf2cc0b" - ], - "24": [ - "92134990cbcaa0227c8713d8f78f20e46b91865f", - "740d4fc05e26b640b17401a7d242616910f0a801" - ], - "25": [ - "85f3780f16542c59bc297d2024c06409d3fe6006", - "35c8220d9db5fa343fd1e97a6eba4801f1af5b7e" - ], - "26": [ - "aab8df8accd19a9493f36dfe412ed6b6db2ef671", - "333b528224590247c051f2597d52a59997c39232" - ], - "27": [ - "d6b9e181bc199c5ec4829e66af5391f75cd816a9", - "5c3f5703b5c3b534f01cdc1281f55317f1e637c7" - ], - "28": [ - "bd9275f63c970cc5542811031a9ee833c7b9326c", - "4b7e4da49b9a4b6f241ac5ad8d9c2733eba2b5d1" - ], - "29": [ - "ae02f46216149347133d393e7e0501bf7540c935", - "6621ce6c7501c876e63cdf62482e68cc9aced4e5" - ], - "30": [ - "f311cf6f08eb799849f08a020ebb797349dce9ca", - "70f92137cadca54c04dada56bee82cf639eb6d2d" - ], - "31": [ - "739d3102d990f77bf81bb402d8646d078b906cee", - "27d3afd955f98cd93086030a14eaa9f9ad4141e8" - ], - "32": [ - "ae1f3d3826a86d88aa8cab71577b32074d77dd48", - "e77dacd39e8ff776da87deb602c5b5e5591b9818" - ], - "33": [ - "b313591aded5b580fa04b3a8fd09bede1a219552", - "dc3b18288217fa1208aaa788ac900a3b3736893d" - ], - "34": [ - "0db47be38850a29185385ea71865ababcbd7ccba", - "0268febff5e13bd940c565c7c48efc6686a0c8af" - ], - "35": [ - "0064632178ac191d446971372617c69670b0f6bb", - "14f62a1fe0995041bc7c2b2dd3cd2d95fbc3b2c4" - ], - "36": [ - "bc3d2e0d10d2953dc154eecd791ba388f46b9bf6", - "f6df484e0e9d03921a872468d79752fc3877e7ff" - ], - "37": [ - "0bb203951f0a3b956b9dd5aaaca0ed116b420647", - "896eb99c269519e5a4f1cdcf641ab717df2f8c80" - ], - "38": [ - "cfb0ce039e406101f69e98d03f35dd3f8b4a8525", - "0bf19a82e803105bd4475a7b5fdc78f0b72df582" - ], - "39": [ - "88c67a5a8c229799df8d58f67eeffa7a663dd15b", - "8c94ce28e72dedaf4185cc81672b952eef279dfb" - ], - "40": [ - "4ea8f2a0d69ac9a8adebcaab1ead304a4dfdc15f", - "377f4c0625138778d05b7a2aa172eee4aed68e0d" - ], - "41": [ - "e1782986d98cef64e1ce683c661821622384b219", - "0f92885446aad8c3903125f614144971986bd4a4" - ], - "42": [ - "c54bbb72734bc03b44976026c04485f260f36cb3", - "1c63be7202b5a5d04cdc256c0b277d618bb3d2cd" - ], - "43": [ - "f154e898e91c8e1167c2e4ab756518f5bbaaff05", - "2f76ba3937e135c09dce9c9c367dc2d62be9c779" - ], - "44": [ - "7c567bf551b30ff8f2d28cf545df257a3c4eaf84", - "686f54d9f361084f0af204594e646fdd05aa1b38" - ], - "45": [ - "744026ecf68b2cbf8a8aaa8d7afe0f4eda344245", - "cdee6d4aaab01df99cb9aae6a46825e92c2e2a5e" - ], - "46": [ - "7f32770fd565fcdb3eb0a51440c3d05a9dd77e1c", - "df941c7af00d652d0020cc95463b05f488d32a2a" - ], - "47": [ - "90e6865d81f5840e27fe4091d1d54725783d6733", - "958d339bc8b60791f373140535a145bb998591e7" - ], - "48": [ - "e532506b1121b7807e90deafd169497febdd4cee", - "ae0f550a840bc5bc778b09e84c608cf9b838834a" - ], - "49": [ - "bf5777d9613c9d9ba848afb8a5f25732717564f7", - "89f36266a54ab883f968589731d9a6bd5ac16ff8" - ], - "50": [ - "dfb5bc2950811e1cd5e2a33abe2ab345dc6331d4", - "e26613506bfd926fb022677395ef4af16a22ffcf" - ], - "51": [ - "d9fc7622d779cfc2752df0ee1d014bd50e048878", - "672575a21351a3856d6dd42ff7cadc99da7eba9c" - ], - "52": [ - "9563300993d2910e782e7005f285a919f2782201", - "dd7c83ac159f3fb4a141630d516296ee73a07f09" - ], - "53": [ - "78b4d0e3d760c7f6985098c4a3e4acfd1976d8f5", - "fa8253de589208fd425ef5ccc698b96fa36e3442" - ], - "54": [ - "4045643d2a7fbc252b8a522446e8dbaafb4382f0", - "6a3ba3a67d7756d6a2667c9b309275e2a3857f7d" - ], - "55": [ - "19959a534d07c00898605fa0ab2ca8e1aa83af3f", - "7d69eba968a1db5c91094c4d442cc9d6acdc81e7" - ], - "56": [ - "a112b0d53b03b3d8beddc0275aafffc7bceb66b8", - "7ed5512b568d7ce1eb9eaa1de443709c93d86338" - ], - "57": [ - "b9f5e4ec2709de575abe401adce748f294d4cc8c", - "cc03a29995fc99005657498b12de460baee805b3" - ], - "58": [ - "5b95b2b2ded257b968e4ebfc67206ef4b555b98c", - "9fdd7a4301967ca03d28d529b7e40e0d36ef63bf" - ], - "59": [ - "420538fcbca03441b2f20b3db13c2cff5d5b53b9", - "5c4f098e7442c3fb085308a1be43b06a4368b994" - ], - "60": [ - "a1c030e2cfdcca63427ce6247222fd012237d78b", - "306e5d31f9f5352e963f7f9ec36314a1f483a2cc" - ], - "61": [ - "6f2510fcb0045c975f78c4401bf015e14e1132dd", - "e82ab18192f5ae737e9115abf281fce7b3499fc1" - ], - "62": [ - "fdecf669fcca0839e311df0fe8e29b01a3dafea0", - "3c71477269fa564254cb7c9d155a3d6c5da7015d" - ], - "63": [ - "90b71ac4f4eed410b02413b4caafd97a55af3e30", - "11bed547782e7f0446908eb2874a5cf150cc9fbd" - ], - "64": [ - "55e8ae36d347a50da0f88aa5db16f88f74b5242a", - "f7d41be1e03d6494f7f1ac5507b718876b05442c" - ], - "65": [ - "17b62fb218b9d38c905bfa358f0e81ead173be89", - "56fd52e1ad937016e28a305c4b96d3eb4bac69da" - ], - "66": [ - "cfcd41c7d4eb315da39db39dfcc0600dbe918d98", - "5157d26697a7f546a573011f95b298584e3f28d2" - ], - "67": [ - "344140c4642975c6453715fe1f0554a9203bf631", - "214ac35904b171596bc075ebf2aa2f21081a974c" - ], - "68": [ - "d19c8906aba5b166f0c7651e3d68be53b895be3c", - "9163777b991599e3b56466690aa231998da6e86d" - ], - "69": [ - "73e9b6413b15587409ab92c97bd16226a46f2807", - "5e59973a74d70ed0f206e4559760f330e363c33b" - ], - "70": [ - "f99792120633d1dfb1e0de7efff264ac50b208f9", - "4b40320cf7388e87714f510f7682701fec7ee5bb" - ], - "71": [ - "7b31b0451e48736486f5a99914f774a29321572b", - "a34797f9268f0f22b7b0d5c98744b27ff3a53de4" - ], - "72": [ - "78b6997e27f0773e1dea5e9147ab2ab663d7d032", - "ec3ed7c12ed5654fc73d4dcfc3b036b9db2f946a" - ], - "73": [ - "83d8261496cb98a89ee064705f9e113023d97995", - "7c340633c670c6dc01b7109d68d78c685b088e5d" - ], - "74": [ - "66145745dc07d74a72e0a4b47fa2e2ad9e6394db", - "db7311976ebb304d21672581e249b0ae931994e1" - ], - "75": [ - "0869ad7c4ef5ea74032d570a3fad6d7a28809409", - "0886bd51f6576ec8e3be66ee09836f6b3098ff77" - ], - "76": [ - "d5eec634077df5fac19a43a6fe89ee7412788b80", - "055ad6f511245a27067d1d3cbec85740164f0b95" - ], - "77": [ - "82a15aab11790877dd9f3d1cfb1f34accc297d6f", - "2331be2c4d24a75b376412745766f99ed4305990" - ], - "78": [ - "c418d7813133130831849743c44567b49af0c9b1", - "2c95eb18cdd3250ff7a3c45ec78c265c1d1cd9c3" - ], - "79": [ - "b73b26bf450649ef61e75b055edb956fe91086c3", - "c87b52f812f64a21298fe5058181c428bc373866" - ], - "80": [ - "ebc4f048baf3deed28d866300c232d107c4e6e03", - "0fabc2c3bb50a6622b41b81973c872563f2f3ef8" - ], - "81": [ - "22c1dc6a734c6bf3dcf81712e05f8689ed9fd9f6", - "995c7772e03015074e8e765a2c82145a2d8362b5" - ], - "82": [ - "82a7e135a4a1e5e0482e6daacf4e0050aa2f7923", - "474f729df67ca6719e2cc452beb9518477ae7110" - ], - "83": [ - "bb87451d759dd18a989b88b21506c6e40532df15", - "696a14286156370a43549e5a78991d1cbf344cb3" - ], - "84": [ - "e173a36d0be16b71a66f1e9d3f48655150043a83", - "ebf264fc8f9d0f53f2475c6276ac0feb89c6339a" - ], - "85": [ - "547dbb3ca891346bc37a396a4b237e563dffb3ee", - "9aa1a3fa85528151ae161363f95ffb8a30d601b4" - ], - "86": [ - "1ab5d7506c53db433a8a8307af0e2772b0c0b29c", - "a16abc6c1c7b1e54fa6e4b868a6e6c105d0e7cf8" - ], - "87": [ - "2a8e2bdac5e6406be9caa8f3f22f124a7eab1164", - "eb204eb914799d36de142c731aff8404f5d05ebc" - ], - "88": [ - "22719d9d1d640321082b124ff400a359558f7fa4", - "aff3b90f9d39d6e736a1df2d56e4c66476885ccc" - ], - "89": [ - "e098f4215c7f3d640ba6b479b30d796330f68a63", - "dd2dcaf6f4d93fa18d8d4ccee9cefb40775ede05" - ], - "90": [ - "75a9c2a775ad266532ea46e3619aad554ed0e285", - "a333cc482f36a8bab7c9fd17add402cf045a512b" - ], - "91": [ - "fee4fe535b92713f09e7c1d49358372e0f293696", - "5873f21fd297cc14702293d1a7a9e7918514b24b" - ], - "92": [ - "be09a18af2be1d7a6bd3fb851696f02f7c84a1ab", - "4f4bcad4cde608f44c10f84f91682fad9d0c84ed" - ], - "93": [ - "53c452cfca4a32414ba62af9ddb83b57eb5fb2da", - "1d8b03c0ff4d0d794f888217e4a7e4508b702aeb" - ], - "94": [ - "c6052c044fe509d7a75d6beedab2d08bf908a22c", - "5453725ea3a362881ee1dfadebd5deab73c5a534" - ], - "95": [ - "11c1318decc53bd2e6adc0fc16eb416b5f57066b", - "1d209504f9107f5350c45ff26df1f3869336172f" - ], - "96": [ - "d45467f3d410e6ffcdf426509f72993b1ba1b77f", - "2fb6ba7e3704c846b553b140774f228f4643e768" - ], - "97": [ - "d4af270644f398da7914c936b2900c8bfa7cd54a", - "01ae89c5b73585ee0a2f1f889cc7147557aecae9" - ], - "98": [ - "7015521a9acf2f377cac7310b0ec595f6993fff8", - "97a4b0208db406f1661e64ba5bfc9c2ae901c09b" - ], - "99": [ - "4bc5932712b1541996ff12046f90b823459e80c1", - "4eb9e3b3ad3c425d7dc15d1d9806038ee51fa9ad" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_005.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_005.json deleted file mode 100644 index 9640850c2..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_005.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "458727203c9c71fdd8509529d51dbf7d727f90c3", - "a59b1aa957b8aa4dab524469df8fa798e2f2538e" - ], - "01": [ - "9180b72edaef816f15cfe508627a310e374b0ee6", - "c2dae28dec478da8472b036042992100be7fa974" - ], - "02": [ - "bfc0b9190e1905fad3b01e60161132149dd19031", - "a77a3e611e6549c011c08ed6ac4f994464b10028" - ], - "03": [ - "709490ea490a2ef53b0a7741cdf1cac891bca2fe", - "8e0932c69429c4e654dd1d0a459dc70477e14f94" - ], - "04": [ - "8762a49531056a9eb7e02f87c852852c23972088", - "8c90a637c378711b71533a64c8317eff9d3f0469" - ], - "05": [ - "5ca6a6b1117bcfdef7ae7d674057aa1144b32204", - "df16aaec3e122d48288443651a4c56e50ea88918" - ], - "06": [ - "3b313d359d17a6548cb410094c440e9eee7c0bb3", - "7f764da184f4ea5f27e9363526f6efa954e7bc5b" - ], - "07": [ - "bee0120f8a61fa6fe3292bd350222d782a187fb4", - "fb7bad22875bbedc266e6e4f7d490497ed4a0ac5" - ], - "08": [ - "f3cbe97360024e7d35ce8577d5d8591a85dab3a3", - "4b23e3d1ce34a8e7c3b7fc1ebfbf6d698526bd0e" - ], - "09": [ - "bb4494fd8bcf6045c118d89b25a22a92bcdf999d", - "ab513e9b8e1b5108cd35e80d85052535012f90ab" - ], - "10": [ - "fbe95a08da33b538a320fe8ee35ab0b7c0af436c", - "016db2ffcaee8a459d853208fb5628e2d67552f6" - ], - "11": [ - "80fc8981218a087b40b7b578b1d04e2ba2e1b7de", - "28ba89c6b5dfee47019aaf4da4c4c44db753ff81" - ], - "12": [ - "9806d19a5fefdb56f43839de7be4b62d7378f5fb", - "54c101f499ffb456eec394adaa5522d699ffd518" - ], - "13": [ - "d7c2e8938777e2134da067a2ed003be766ddbf3d", - "777dd5cbfdd8f0e9d19d73f9d9aa1949db010b32" - ], - "14": [ - "0c2a2f7621c4795eba60e4205ef8802a620ee774", - "5bdb038f4c017ae48a5f272a8802b745d6eb42a8" - ], - "15": [ - "59b987162fb88703ceee9e743e4d00ec2f4a2ae2", - "ff31df4341d31e1f1eaed7bdcbdd65904854e8f1" - ], - "16": [ - "b46a6d0883e67797cb6dd5ce77adf2567cc7fa6e", - "2ec8d52a2e4f8c558288e15a53f7154ae8c99620" - ], - "17": [ - "82281911a753b844a0bffe64e77b8f3da74089f4", - "d87e2b2685669c8ad931bbf793d45320fdaa0274" - ], - "18": [ - "c1c5ce52c204af227739e5060d9589b601545f52", - "666e3a2061a06a5355ea2219c1ae3e09cfe0c6d8" - ], - "19": [ - "ac2a471bead7315b3b65d60e3ad841b896e5763f", - "397ff306fe13dd3994f66f398cfa403caa53752b" - ], - "20": [ - "496528b14bf5168741ddb61157d689ba1d608bf5", - "858acdbae9cc05bdb3006d0818081bdeb4344ab3" - ], - "21": [ - "e1290d9cf9941d28a720073d806accb3973754f3", - "6fc245dc5d0640a099576c5b1eb78166e870ce3c" - ], - "22": [ - "f5608a0e81fb81da431879fb131bb28ef1cacc10", - "76f5845958eccb5a00bdd5a8f886044af4339b98" - ], - "23": [ - "a77b67a655923d0259f7e42e6706ea1c95ad7ca2", - "476136e2fb3cc16356f6a1863b40bb306d32061c" - ], - "24": [ - "d9a5c8852ebe4e4ca97faea5e1201e0801b77b1e", - "f5a6513ab94c0f41ffcc906f83207d63bd36a3e4" - ], - "25": [ - "b85ba6f3554e978ff8be5e78b25d35ec14c43e90", - "436c2c956caa0d02ba673804f4e90f5f93b6e521" - ], - "26": [ - "527f9b23548b52ff23886c97c55f888de37b81ed", - "4cc90c3dff7db95ef53db40c71b66d0195fc1540" - ], - "27": [ - "129be206bed2c9f47d97e566ddefcaac3b6fb405", - "3199e640a424c362865014bff11683249981da94" - ], - "28": [ - "04d4f2b921fef43a8225b4c3656a89f9c338b48b", - "4d05337a8b99196fea90c12180d4fda96f509c22" - ], - "29": [ - "19edda8a9839612ecabe39c839f064d21760e045", - "701bd742987c76f790fcd64a3df18976ceca68a3" - ], - "30": [ - "5d4114a541f7bdb1ce99f57f45d455216b481bd2", - "0f3e1e37ca1c0dcced7dd703d76be9f7a7ec5b3e" - ], - "31": [ - "c28bf00fbeaa8735452ee47413f2815ce1e367d3", - "6f51e69e2a30c8d45614b95ead56a7adda443812" - ], - "32": [ - "0b8bb25d26c53c5983d30a8388fb52eb05d8ce33", - "5ac147e417ffecc59be663c121f384cb4680c099" - ], - "33": [ - "8a3a987a738935f29542390684a31a4e0f2e07ef", - "f9f83235ad69fa93f94fcf74e0a6ad31882db49f" - ], - "34": [ - "47d9f120fade6a958719c35f13a92a8bb03fa22a", - "728a7f4b27ac9992e4400a32638b56ba4246d568" - ], - "35": [ - "3f9a89b927f2fe901a8a89b890448f2592e5b12a", - "80951b9229dcef86d74ea1128c2f3881dbcd0eca" - ], - "36": [ - "a37e55e8a2c2f714b128b70a368352d540390430", - "840a5bd62b2882df8279a7454840c748fee54a54" - ], - "37": [ - "6796d2411d1251ca693a72f6a450394d41a4fce8", - "3196cd74acb0dd7f2468b53febd8d3a4fd07bc71" - ], - "38": [ - "0e7dafc384fefecd80172bf67e13bc2dc43e697b", - "33f87890b359614acdf1d82cfb59379d90f2129e" - ], - "39": [ - "ad1893c0b272f4149309814a685c9b498d74320e", - "c7fe2b582b1426cfe3b3f313bf3265baf622ddab" - ], - "40": [ - "b34021dd30faa50af928e324396b971931eca04e", - "261c06b8467e3c550049b93b5d69ffb24c32515f" - ], - "41": [ - "9c06910206a1a03546ee7ba6b4b6711c71087ee1", - "ab9ff1c31a22b113ca06d6bfc855491d18bca6dd" - ], - "42": [ - "3cf7a1e71e4ba5407f5ac055ba4b49fa4261555a", - "271657fa09b705c6fd631a7b26e6c63858ff21e1" - ], - "43": [ - "3cb687c04af87fa7d2a67245d6079d14c8762b35", - "8238d1f5a3721181b21449f8de5e388a1a62fe15" - ], - "44": [ - "c3719fe1bcd07cbb763896b3beeafc56cf705677", - "4b39fdab3915d2b0e59432fbc9872a929502e074" - ], - "45": [ - "69a6039e1dd7e3f3fc43057f2e15c3f534096dcb", - "f9bae40bf916d37af7cf2c7de140e3c43868ee48" - ], - "46": [ - "bdf891c8dae61841e4f433f8439ea8a01f19443e", - "7a362cf5bfe61573e50155130be40a5cac23bdc2" - ], - "47": [ - "a04f1e6b362b4a596b66af5637fb8c0b8aba5aad", - "5a922b1efe9d89d46cb76ac2e64bf00e7e742a06" - ], - "48": [ - "9161dc680dfabb6ff4709116c313f1674bbde98c", - "7138c3f4f7d1362df43df9b8996801476ef5cde8" - ], - "49": [ - "5f77a03d07df9b9b770c56031b43c49287affc2d", - "7bbfe2b85de0fa052dba0a30e238a2443e8a6d59" - ], - "50": [ - "c2412023dfca9bc147b865d0d9c2aa276c93b88c", - "8047dbdd927f7b4b2fbf018931eaa5453b7df80e" - ], - "51": [ - "f484aa206645b02b59ffe6b2415ff7d245d99555", - "7a69bc1b13459dc6285a043e91e3bea4a7dbdc24" - ], - "52": [ - "4cfd38f6a769cdb888c82b3442c0dc2a66bdfa90", - "900ebb2802f4ac726edcc71ed3bd38fd66634183" - ], - "53": [ - "159e5e4854155464fc2092513f03e8051850db35", - "7fc9d6f2c911b7dd336c3c8282e34dc487df57b3" - ], - "54": [ - "e0e5376751be3a6451ce921078d749b4eb82f64f", - "870b858e30c1fedfee2d9013072f8460fb1cbb67" - ], - "55": [ - "41078e1e918f009e8c49b903178a32def46c4652", - "6ed7acedc04e8adef6c70d6415890b5f9500875b" - ], - "56": [ - "203663bdb2e54a5a89111a257b2fc77cf973c85a", - "7ab2d36b152e86ec119224769bb2c19a8ee4ecb0" - ], - "57": [ - "b04f786058f8690fe469528601efe747a86aa330", - "668b94238a3f65059a1525726c58c43300ba5d65" - ], - "58": [ - "04a444cffaf2b7b459ae25065b582a3e0e12010e", - "c0a923c32d75e07a570f96fac892324e73708771" - ], - "59": [ - "c6c5d8eeac72a42c14f1a7d6b6518856304997af", - "dda82c9a8e4538ad32086ebc035aa0e725f7ce49" - ], - "60": [ - "3137f7bd95c1ee38f1756eaa3442d2ea299987c4", - "43fbfcefa369c3a2b73758a8b63997bc8d5fd8e4" - ], - "61": [ - "128a50ca6369607db84f3058087155156cd0be20", - "0cd17f015fb483c2f4d9359bb4ec21b3f65cae40" - ], - "62": [ - "2ad3429813f1b2c3325d67afd6c4e7add4882cec", - "13357b6e4d718a72f1fd661c20b9989922e0ff85" - ], - "63": [ - "f95afed4e32dfc713717bb178632da3e6650afb6", - "e69b52e5a441e364c3e4f724632d060c173a0e69" - ], - "64": [ - "73f09400f4286a60ff0affac29fb5df00aad73a2", - "f08b5a25ee15126d1dc085fdd5e7bbbd7e41623c" - ], - "65": [ - "95242c4a00ed71c2642cd8593d05c255f9044827", - "3a4dda2c22cf10fc28820f0ce83e6d36e6373570" - ], - "66": [ - "18f766a864f83b7c0400af6873a9a73348337c10", - "834056eb748f25eb6e59c7ee5b3304084a8c6d4e" - ], - "67": [ - "56d94592885172288a398256ae7722d78f8134a7", - "09b6b7feb335f1636fb34a01ee57e26bda673fea" - ], - "68": [ - "8e95096e22064f4f8ad734ee07e1c14216f9bd5d", - "5f1986a44e3b14bc7e0ed0f18d8d5412a766a699" - ], - "69": [ - "328a404ba2404786d959fcb2b52225ed4896fb72", - "d9c3a339caa4876c2175812d78143427e90d2d4f" - ], - "70": [ - "152823f2530121d875acd14e89443db5c2ac9ac7", - "fec277d386cf1664bbbe5857791e253f70f7d731" - ], - "71": [ - "01d7e17f9560e9da7bf33008d6df6c16b7387d10", - "ba3dbc21fb79d0b3e11ff9a64ce0b8233b53a23b" - ], - "72": [ - "15a0672cda690b02cae2887146cbae8ee3f8764a", - "87239a38dbb6fe3f76f58abda71b09f39d80093b" - ], - "73": [ - "d89ef1b30bf9bff0682204bb5e2e4b4dec9ccd56", - "a7621cf1582506dbbbde6e0d2cd34edbbb4192e1" - ], - "74": [ - "3180ab680495ec3cdcbcdabc431b1c19610d5b32", - "c263b03755a5519de6972bdb0c50c8650386703c" - ], - "75": [ - "6acbbed9177433ad4568ddc4ce192d9db6b4e958", - "9d8d0de77034b4151e0ee65fab0f476e522b964e" - ], - "76": [ - "7f9cea9cc36a281861fd9225269ca22193a46fa2", - "63920a2d09c861154671f178edbd30c357b4a369" - ], - "77": [ - "40ca7af992939b66f08e4f1357a18b2909873422", - "59051e54d6b40d569d5d020ac342fbff1b342e6e" - ], - "78": [ - "c739137ae5c0c26c4ba67c7d8f3ca0195674ac61", - "5838a55b05b61745b8fae4f544cbfe17feaec853" - ], - "79": [ - "360ed40c848b8db3c0ef9625126437e4e16718b8", - "333be683a3a648f21228b43a31a81ab8ad84882e" - ], - "80": [ - "b4e03135d7d510ee419835924fe0b74eb44d866b", - "b811aeabbfca420e1404983c5a8b31b3129a84b7" - ], - "81": [ - "866c2dd5e084ac3b4f4a736c3644b48313c2fbcb", - "29786f582d0e358669006f4a3cd275ea1a30aada" - ], - "82": [ - "f95bfa5897ac13c6d6a05209431d5d2b2a885c2a", - "87dd16a4693a6f3697dad532c707147e09f12332" - ], - "83": [ - "f27c1d42d5fa09a3a1c4cab21e661eb004f2245e", - "fbfc1f58a1ec16316085ead7061472df79949535" - ], - "84": [ - "4a67c85024f7d778551d6c47f631890610b97961", - "9e903b026e74b2f48fb2c32c682e752eff1ed394" - ], - "85": [ - "6b4d92433abe65a592da6d63c8ff249438b311f7", - "fe48f1d34fe65d9c646caae27d8c209cd2577292" - ], - "86": [ - "6ac13e2f95c57f84353bef152f0786d01f8b2204", - "55bbe6753f90b2ba2fc5801db203c83bc1ac696d" - ], - "87": [ - "8aa3ca783943ab3682b1ff40fdf1bd602a43c116", - "98b967e1493862297a9e62d6f5ef12ef5a9cfaa8" - ], - "88": [ - "16f8ba8506699d96c4ad049877377656ce375438", - "ff586bbeb8eb2365bfae3ac81e5660c2727dfada" - ], - "89": [ - "22041587b4e86e1cad9b205d2e1f1ce87602fda4", - "35602f9f571869acac78d313f333d9f21a4668e3" - ], - "90": [ - "001a5ad44e8dfdafe478e304101af74bb99a6932", - "370016cfb5c9ffbf68a868d7d202b76460ecb3cb" - ], - "91": [ - "f50b2747b8755016fb4f12cb816af6831626bde1", - "9bd6707a89af23840b1cfab2aac068181861665d" - ], - "92": [ - "822dd2093c70a6caf7e64b648f5550e15a6c632b", - "5029e5d8a2bd964bff2b797226035bb3039ea873" - ], - "93": [ - "e09942a65f2caa4a98837fe60244cb09a2a542ac", - "2e9e137545f207e24b6a86a767125a5b6c3ed3f5" - ], - "94": [ - "92ef117c850e928b62fc2ff8080cbf48f05b936b", - "9a2f537d9855c1f835f51889518393a9cf63d6cd" - ], - "95": [ - "51690c1070be30b8aefd87cce51eed197cc5b6b6", - "1221112eaae0b7416bf30232020f380c5b40343a" - ], - "96": [ - "67c7ce4e98190ce6e25f5ce6b0a123aaa9186d73", - "6326a091c10fdebe5fd954f601e086a86d5f1683" - ], - "97": [ - "b5dd551f4c7b4c62c79e8f2455e2429d4ebe4330", - "b82ea925a866e355efa01b8ccc222400082263c5" - ], - "98": [ - "afe4cec4ae1072dec7e7734473530f494bab772b", - "9bc4198f8f3c9cc70332e275d173d6cecdded274" - ], - "99": [ - "484f58628af16ae9d0031eebc232d93cc9036901", - "ba4f2addca9769d9c1f0ac3e053ac4d34c91f810" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_010.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_010.json deleted file mode 100644 index bce605918..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_010.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "ccdb43f1fca686357791fc9b67cd3d763495270a", - "831edfa3c78c08104168e5c9789205481eb0ebd5" - ], - "01": [ - "2ba9f978cb9a5fa3a6712f2cf741fd9453c25887", - "26330f24e1458f61de6d85ad288c8df0753060c3" - ], - "02": [ - "f556d678850094d635950321bc5a5a01efe3b2fe", - "40464f2ac1f32541771151beb4ef3d75910d6c07" - ], - "03": [ - "666e7582b1f36ef05592e05c0d6a32a1b995422b", - "c8f3b3ff9535808a7caaf5aa0d5c264645d22517" - ], - "04": [ - "ee9275c5385fd390f8fee8195f5daacfd734f5ea", - "9487b7ce1c49e311a9acd3b3a45e9078bebbf74e" - ], - "05": [ - "31b9a8fbc89ebbc0f6db284c48d9b5e09c0a5b30", - "2a8d1dde096ad103243b7e23489ceacb77d924f9" - ], - "06": [ - "864a8b729d6e5db8f2709626423b7ec361c2bed1", - "80c72bdcf7f80bcccab00dffbe1787582dbd7cad" - ], - "07": [ - "4e4b5e8f9a6f1a689180eb53842b95f6e7fc8ba6", - "e026c59bffc009aa098116d833a2018ac5ee5570" - ], - "08": [ - "d44f7659db6e14639889a84edeef002d880b7e4f", - "39b25509534e81a81a00c88f4428e3476f0139bd" - ], - "09": [ - "7fe5b223121a8813c6d39e1a45b5cd136037cb76", - "fbb4527e41e72b9d8b1a2a2a7a7ed98c18dc9b7e" - ], - "10": [ - "6d8d1c631508ebff4d0747fcb0b1ff3195703cfe", - "1c288c6dac7e9fda27355e03057fc11cf94c8f0f" - ], - "11": [ - "b89a9ee02549859b52313be2eb019471ed68f453", - "80b11162cac4a248731233d45f85127da053f30c" - ], - "12": [ - "69a791c7347c8bd6a8f12fb5124d499c8af20e48", - "1caf25a5c307f50e1d7394401307296aa4459693" - ], - "13": [ - "dc928319091e615c797b40c06b2149c4df1beece", - "c76e9820058de95fe1217d6a994e8039407f1acf" - ], - "14": [ - "c7054f9de65cb7ecdf3c19d59d6fe7db32cdf240", - "de5b22bdf2c91be1ff85cb9c4df5f775b13da3f5" - ], - "15": [ - "a745c4c6b26b77b7f6477b490a087f3efeb176e2", - "38140c8fb2875d1468d543f1614e3168528823e2" - ], - "16": [ - "48cb125b217f78d15bcbab20c832f79079bafeb3", - "34fd38b965e960e368c9ad30905fdb2bb079f8ab" - ], - "17": [ - "43f9455c2b5c0cc01fcbf86c2c408b0eaf00c9f2", - "15c0bde8f7c914fb9f9ce6a62e4cf69299f5fd66" - ], - "18": [ - "f4766ad0be0ffa74087bdeca4f6e5ef7ce589fd7", - "bf4b289e101ee003aca62d103426922e08a7f4d3" - ], - "19": [ - "997c520e35350c4aba983496ff9de9c87bab04ec", - "1ef44f70eca2edfa5296e6e696a00a781e9b8911" - ], - "20": [ - "9a02030b5cf57c46888cbb7feafa79a13d1560ba", - "4f315506a27a8c9a56166a09e83c366bcafd48f6" - ], - "21": [ - "47b7422ce010a4675ba8e390056579dc519a2951", - "dadcfd72ed3fcbe383f3e88e25de6c0f7d3c3510" - ], - "22": [ - "25e6810092827128f4651785afa10ad43c182270", - "610aba6b4603c4d9c5aa64d94fe5095b8f9a9510" - ], - "23": [ - "0bad173594a866c87b8b87eb8c6721da1b11ae16", - "eefd57737cfd4ee4073c0d2f08f065faf39c085c" - ], - "24": [ - "26b9e95841782b7b042cfe2eb45053efd6df934d", - "2d1ea512df4aa6bec314e2b8bd2dc338897d4664" - ], - "25": [ - "5cf293a44778181f0e957d112ccf0dd8d7268f36", - "1c9682ac9c2a7e445a961be041caed66bab81ec7" - ], - "26": [ - "78e3fd7d69ac58164d33b1dc3d1d06e2707ce5d2", - "4a8362a342ddb38672443daeacb4e62090745b15" - ], - "27": [ - "97ec4849c7045200b2d5f9927eef57bb81f8e366", - "42f54ea0844a0e6a23fa4c075828d789fb1380b3" - ], - "28": [ - "e518c12976779c572591401f688fddfd7ab6e02a", - "5eb946092970fc56c8ce377013051d6edaa86054" - ], - "29": [ - "1bbd321cc69ea399e62f8a39cbb46a93396e6dcf", - "a1590f6083010739108bcef7e99dfce85d6432ec" - ], - "30": [ - "cb4bd9a8efb8ce43aa8c5fd8693b47290b561cc9", - "f47ec9b90f4985a7cd7aee2057aa6db4edcee16a" - ], - "31": [ - "6505ee6882f28962bccc0d2a0ca70c9a5dcabe86", - "d7f0b16029b6699cdd4c1ed7063c107da43b6e77" - ], - "32": [ - "c9ab98a3cda5ed19f52bb6d6a6eca3677622d161", - "ff145ade9798bdb4845d19d1167cb8cae45d7b88" - ], - "33": [ - "93689a760c9cba62b489ad3641be5b41dc387165", - "ee0fcea5bf5b45868bcb91fd8b04ae86ce48f4a9" - ], - "34": [ - "f81599df331ca21ece8aa5996ef43e574cf05418", - "36cc10bf9fe1b1390668ac26827e8d7b99de925d" - ], - "35": [ - "59f368bf383c6dd91ae55396df9049be864be2b4", - "42252497eccbc4c5ef5310ed797f4aff17740a76" - ], - "36": [ - "055804277c7e8772011e53ea80cfc428e32377f8", - "f5a5df2fc5f62d11da27c906833ec9bb745b9d8b" - ], - "37": [ - "c5493fed78713bcffa02f5714b9e5fd1147e3bc0", - "d22252645acc3e1707cbb157221dbe5f019c9cb6" - ], - "38": [ - "a8c6cefded5bb3a30001479b7165bcbc230fd196", - "f97dd85e9c91ba322675fa3a4432383c4c733177" - ], - "39": [ - "cb79c6bf6cc55ae18dd39ec93e98b1abd3db47df", - "e11771b76efd8f2772c27461e39f7a27f568c1dd" - ], - "40": [ - "5d966fdcdea637252bf2b8b98cfe49c2143a92ee", - "e666612b980c787b82cea32e2ab12a6d2932bbf9" - ], - "41": [ - "184478d2fec3baa3fc1fe080715d8d372f9f0524", - "099ed2f3a79b732ac8f7a051b5e5c57e159e69ab" - ], - "42": [ - "d51f657be406d3b4972abf4c8a2d3d7f5bdd22f6", - "dd18e3f6478e0c4831db062b91243a27d9e867e7" - ], - "43": [ - "de71dfd2f8d4d6ae13bfa4f6b125f438bc1caef2", - "e0111516eb40e2a12f1788bd883caaec0a62fd04" - ], - "44": [ - "f4da6815ab0582d7bbd389eae66ee92270896139", - "eeadf142b0a3a29c70c5c638f491959a0a08308a" - ], - "45": [ - "ed3c3fbc8e2eb7e48185c83a260edc855af8cf5e", - "54588b26054b8946529de34364c33a22938250ad" - ], - "46": [ - "4f6bb7be442fc545d0b9cd5fe0599065e95ba6a0", - "f25df12c3350f586ca21da4e66c927c11573aa17" - ], - "47": [ - "c56c3dd6cd9813a23b86b4f539355b47b9bc58c4", - "6da142fb18ae52047711ea00dbeefb9142e6442b" - ], - "48": [ - "8f9391e0c7ee53dae14945e80cd1fd74e04f42ad", - "6fbdce5a768927b3384d9a5029da29e833ff9151" - ], - "49": [ - "34bbf1e8fa4e0f69bec26f0dc2f9b70e0a1702a9", - "940320b82a319be714e96e89f59a7942a40e6f04" - ], - "50": [ - "9b2aef66a8f9373aae3506412e6dfbb5ec05b932", - "c6c535c1c0eb85370410b7a57f47d6a6e09b1a0a" - ], - "51": [ - "a9b78cac5c10bf63e5143e75ccabde898350e1a1", - "771c0f98bacb78355ec4c5fe2347f17e93f289bd" - ], - "52": [ - "3980862bccee5714119be5112286cbe200e18e5d", - "82fba63dbbdfd64128745af856d91274cd8657db" - ], - "53": [ - "5de1a14f0599de4ee411fc38a4fcdb231f45ca28", - "db1320ba27aeefb1d5e55f6182f8d483863129ad" - ], - "54": [ - "3313e61d88347320246d092d869a3b2e2c720787", - "063f97e328b0fc9e619e47ed6530c26ec65f59d1" - ], - "55": [ - "c9c3d9d55e7a80a2d7740ef05dc281648baad2e4", - "1ff208e2069f7eccffab7999d189a247b95f84d7" - ], - "56": [ - "19b4984f3ce88fc7bf23414eb8cfbe76a47b6ca5", - "d38f761e58e617c8e71431b0c9eddba6a961ec7e" - ], - "57": [ - "39713b62c459e289b9986cdaf142d4326c91fc33", - "648c9aa76cc64de761b49dd1c3b30d74f556667b" - ], - "58": [ - "0ae3a6f2c5299992124227d7ad4e3acd24980a90", - "2fc91c8647c6f14e0fc749eaee2019b88a830d61" - ], - "59": [ - "6d603a2bef4d8ec59ee290eec36d99d5a708a014", - "c5d6701da4e0e57a5839711ed73a5ce203f355f9" - ], - "60": [ - "4fbb69363b01fa24d30ff53a2f31b38371f4210b", - "536932c5efaeb14cb88ddb61fa8b94300b241781" - ], - "61": [ - "1dd5c00e7db14075b35e3515ee94bc5e1b386ada", - "19a1e52bd7bc6af6324bd75e2416a6a9721255f6" - ], - "62": [ - "31d8f3778ab99e32afe2cea83becb743fbc0c40d", - "98329182d68ab7789f709177f0aded8e9cfcfb4e" - ], - "63": [ - "1be50ece9d5ad5c190ff1a6250c4f7222ca0235c", - "068fc8b07672377b4a9d2106bc1ff99297df1756" - ], - "64": [ - "909507b0ac2de623ba48b8588e53285820409c0c", - "d1fbe5c93ef37390b3f58988d8f7f615718a5a80" - ], - "65": [ - "1bc9b7091ab54641e5ad101ca2544d4c0c6e3e6e", - "bf1c96bfdc2b8fbab4fd8342802f01318173eae8" - ], - "66": [ - "e86d6d03b7f4e253a722be2738e1ccc69be556f8", - "1b3e4b5e051aa27cbbed8286a0c42e3c9216b939" - ], - "67": [ - "15d604902d3d2967a606db608bfdb14bbc9ac3c4", - "d3d694ced85706281a9f056c9bdabfa8d562664e" - ], - "68": [ - "5e0a0847d0aaefc41e06197c36d36a355065c2e2", - "c6d5396721add5fc5d021a90ad0c4e1e6ca7474f" - ], - "69": [ - "542b6645dee1faf08e27c42ef9a555d9866c5e1d", - "4fe6aa8ac9b4b5bd780b43b7f9f6e171db8e76af" - ], - "70": [ - "36bf712c797f21a34e67a9bf4964e640d1737516", - "ea523fca7ada42132ea308b86133783017176758" - ], - "71": [ - "953e2e1479e215b65f0a1a169c9e1fb69b1b34f1", - "02836c57de4a4a63b8e4bff488e21517c52541bd" - ], - "72": [ - "d5a11a7054713a53ce48678ddde0d7323f9effdf", - "a365cacec63a2125d4bdc8432b67d8160bd5910e" - ], - "73": [ - "e232e6f8e430d7cf3dc68e3b952545f5d29e86ee", - "d65db7b65b07f18428000114d38c99fd3affc8ba" - ], - "74": [ - "d68576440b8dda2085fb74cce4cb15378fd834b5", - "51c58f146ad3afebb3bbce91ef3255a3e79a973d" - ], - "75": [ - "221ea7e6d7e41080eab378185c54dd3f8540acd6", - "63e30c12a9eb0ff5f1d2775cdaab9cde03252482" - ], - "76": [ - "5f66f6626949d71ca980003834b2d75863b02cfe", - "02fc7871423b1364947d7e73e2c062a0b3421cc5" - ], - "77": [ - "f17f2c00cfbd6bba29d7422f4926ae9f0d857ebb", - "480a014296b962611632dddceab723fee235c894" - ], - "78": [ - "0942b915a43e4f15a77c2366d082b1515d00e243", - "d8125cdd37414cc5abd7b0f7b0512dc5190b1d28" - ], - "79": [ - "cd82f0a731407a6f4d6a37cb62785426b32e5caf", - "c43cba37f03bc513c2aeabf47d67fd267ea68897" - ], - "80": [ - "32f4ef8d8dbeade2b4969f06f02fc70ac531d8cb", - "acf3d6f9c0755bd1f210a98ec32fa43b072d89e6" - ], - "81": [ - "14fa78b383b6cb0ce82fc240ea2861f9c4b0e9eb", - "15f500061ef8b2566f9c5ffd58f1b85a39bca2e7" - ], - "82": [ - "51471842a3f273d7124882b3ac1577b980cb1fa2", - "05a6f896d4146a90dbe03584b7ec0e943d87d714" - ], - "83": [ - "c10c6517340c3055474859d4062f5be2ebc3baff", - "4c00e46983090f793c0f91a5580f46013e5e6beb" - ], - "84": [ - "b9626f5adcda15f863fb8cc8326683bebe8fdebe", - "f76e7cf79bed611b479b303b3bdd33ac3c208f74" - ], - "85": [ - "735b08f08b08b29a4fe78e89711de9d55593119f", - "e1e9f7610adb70ca4814c22d2a263192c75005a4" - ], - "86": [ - "094bffa282fa96d96f0371621b38d0e1b5a7b3e3", - "6bd34331e738e1ae05dd7b295cb755a95d5ccd8b" - ], - "87": [ - "27a44d55c1582941ae0afc75d4a362df0daf9c48", - "707a5d72677482aa29e90eef4be1603f0e4607f1" - ], - "88": [ - "163895cee14b94c97d176db6e1a4e3218f0159df", - "d89658fa2226aa25a093cbc200c5cacfde904ed4" - ], - "89": [ - "7ca360a08843ef31bfd43d9239a71326e51a07ec", - "1f51d77a5beb5b5011db1a58dda6d1549d1b29dc" - ], - "90": [ - "98a16106d9c1642bcbdd8466d8b3c0b2269cddd9", - "05b3587a0e3ffa5f6f9e232d68848ed53da08515" - ], - "91": [ - "2ba3469ee22d2a64b4d28ae4801219047385ff49", - "ac05c706409b29937dd5a9a33a6258cf3e270620" - ], - "92": [ - "33e0e1b4bd550731f74a2c076040d929f356aee3", - "b1b4d96b2d66fb8a39e8406d7b79b4d12d404143" - ], - "93": [ - "68d874557cf3d0ce66ef1a0fc92441ab936ae8ee", - "904ddf6142b76e3dbb33fc514d0345bc82da50da" - ], - "94": [ - "9d310f903fa0cae6277399d4f525b368fe779a9a", - "b87821c6012e86e57c11d12bbfdd4148a0e511be" - ], - "95": [ - "da17cba7eb17247f80f6330a73809c10136e0e76", - "de7ac08a5cc65e0b930e4158514bbdeac68b2da0" - ], - "96": [ - "40a45ae70bed1f4c53d265dd6cb63df202d2c55d", - "c9d8bcf7dc10be5888d3ed11a3a22ecde4f1cec2" - ], - "97": [ - "64e7ec3b1f9200370f34c8afc2e8673c7f94f91f", - "e4f8a0b41e3e32559f1c11f2c6ff57c26bb74f48" - ], - "98": [ - "3046d3fce6f02ca6389de94a1f7fa655fd3fa0e8", - "0980994eaf39e7660771d5a5114aff0b6543c36a" - ], - "99": [ - "94801e409380c1b03da5136841b7f86172908923", - "0b6ab5a1ceff08bead18cef9b358b19a9dbbb1d6" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_015.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_015.json deleted file mode 100644 index b578faacd..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_015.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "c63ce7376bce0d2f1b70c140e7855d53001f1365", - "e6b2c788e577e5e06fbc65a42a639b8558ba003f" - ], - "01": [ - "dd5ba32007e75a82e92bacb5c2ad937c0f066a7d", - "8c35577b64c69e72e1463402370c7daceb208014" - ], - "02": [ - "076588236c27b99c000e4b7408d02ec71eb0f1ed", - "5a3967927ec20fbc1514cb7c0873e0223c6f5ac3" - ], - "03": [ - "7d9b8919a7bb2eddf989d3d0d4c2f058fc14980a", - "7d4b95aa2d1e2b229ccf2950034acb63c5c48279" - ], - "04": [ - "056a8bbd2e363fa68c355d31d662275845562da6", - "7e1de647bb64b27962dd18f84458ab48bd396be4" - ], - "05": [ - "bcf93ae72f575e8ea85b5a281747fa17f2225e2b", - "f1f1ca7cb8f9c63eecc24adc59ed54d62cedf5ff" - ], - "06": [ - "4497d2e265c6627fe3f7596628a7192646fb2957", - "d996fa12e80ce1576d69a75b116f542669aaff55" - ], - "07": [ - "3653f7218356df028ed18e33b3c4d642263dcdf5", - "8b2975c52a7f3cf877349c9212778977a367fe34" - ], - "08": [ - "fd2de137e435cb242da03710405cc812bc1c9dfa", - "ff87e88fbbea84d867aa76e6d464bfa15925795b" - ], - "09": [ - "73377ec1e2ac5edaa26e24c2c2578b777912c8f5", - "17418d520a888526118b5677d024ddd5a1406e92" - ], - "10": [ - "bf22f7f1815467c6c9bcb3ba905be21d58e856d8", - "407bcba4640582b489a78a868c09fbfd593f2197" - ], - "11": [ - "9ef8997f28bfd9a2d16e8d3cae7171e5299ded16", - "ba78f45e78eb3a0c40192fec4c4d54e4d7fe97c2" - ], - "12": [ - "652ca54536ef63894efed2a08be1039eda35c506", - "553dcc14680a7bee70a94373b36e6b95b6d9577e" - ], - "13": [ - "0b78529dc8387d5d30c7ece7169d0eadcb0fa890", - "12d486fdb33ee1fa0fbbd16355b92eb31d8f8cf2" - ], - "14": [ - "e2e0d6dd5e2d92f90c1297d1d9027d0fedbbad5f", - "a569ddf33e366dd4b39cb00ebfa2c1e931694d42" - ], - "15": [ - "e45ac164e2b9eae028d0bd9caf36a70eeb73bc48", - "2032ecd5191b383576093eb8f1222514fc56a11a" - ], - "16": [ - "5ae9d9f14f8b91bde113f822989fe536c3770a37", - "b40fb9ad56b9f75df870e203c6aa56220d440129" - ], - "17": [ - "d35dd8945eea3c35dd9f2048067da9f08c7cabe5", - "55d66a2c03cce0210b0c9c053deed051cdf69545" - ], - "18": [ - "9598ffcbdce84f04be740e121f491ca8d7873f57", - "fa9d4bbdc0b7b4047b184311a11a0075930fc538" - ], - "19": [ - "847bc08bf89b8653f938d7f3613a736aeea8b657", - "9635346c98fabc7f786880cfc95cb8fb94508ae5" - ], - "20": [ - "7bac2d06b6933e08defca47d2c6ee27299193333", - "6d86fc8b0e02a6b5a046c779a69acf2946959ad4" - ], - "21": [ - "eaca0d3299f5ce3c35e744d327bcd84a280fb414", - "32a92ca8efcf15948da93424965daf7614a6407a" - ], - "22": [ - "0ebf40a68895b4cf86b372011ebcc748d35671e1", - "80295b183cbcbebc9b9762cc5ab039f857438b12" - ], - "23": [ - "0fd39569269f0e5a12d99cd70ced3ae585bac55c", - "573833e9e4c992efd7977d552ee7aa47f648a98c" - ], - "24": [ - "e5945d4c42586d48cf477eac17d33869fa7dda8c", - "ec6d7d26d8228c8d94af97dd989fd3a0d3d50942" - ], - "25": [ - "7bbcb947886393ba283e280b40ad8bd81bca7ccd", - "11e79e6fcc49ccca71947fadbe3fd219555bfcc0" - ], - "26": [ - "5e5d3611f82f5efd508111294ca7522f800e0300", - "d99be3beb7f8307f09f26b8ab823765f6392745b" - ], - "27": [ - "ba1032c53ff82fc3e89f934ca144a255bdd97de8", - "f68e9e6889b82390348fc5734608069b77bd6ae6" - ], - "28": [ - "0a3c1a3f7dfbbdbd684de594fa6ed715c825ee37", - "1d2025b3540f831314230bd60e70d867155f2b5f" - ], - "29": [ - "206dfb283a4ef6aa851c93dc3b21edacea7bf41a", - "15ccbeaf47fae6c6db5a79323c475c057bd51b8c" - ], - "30": [ - "66a8441c49c28e8f857aec2e7bcccbf4e805d7cc", - "a39477ae0b2adec4136edfdda727b886efdacf77" - ], - "31": [ - "13cb50cb81bf51c2232f7123eec32078cfa084dd", - "b4184177922a0f8fc061d209a63f0cf021e4accc" - ], - "32": [ - "70ff5cf395a45f881e393054b8e78ad8353e05f7", - "34f9b68bb6e4d6beaffe461c2ec6b9b49b9989c5" - ], - "33": [ - "737a96d49ccfc01338b3e38c1880fd4952f36ec9", - "669808a09c9baa5ae02ac711b4c30c57cdda7b84" - ], - "34": [ - "d5282ac6fb304667c9f36d7444d6b4c9f2d563f2", - "f83991a308104ba1405b24484505bff9dee72048" - ], - "35": [ - "029ed1cdcaf54172126b4d23bca15eb60ece1065", - "8b16b65ad890ca8ba4a98d7290905e172c21ec4d" - ], - "36": [ - "63e85931136103fc3d431428a26451a4fa37211e", - "9249cb0071984923c492088e530601b435a29013" - ], - "37": [ - "0b43cec24a1df0885234668a9ef816101d29fa8c", - "375822bfd01342afae4eed3d6b5d64c836210994" - ], - "38": [ - "9e74d6a35a869321b5390b2d023940eafa907697", - "8130465751da4811cb45be38ba47b7552b35abea" - ], - "39": [ - "6fe677e39b8016672d5c0a9c91971193832a2943", - "1ca0cb5e46970ad0058c45218633a958df3def77" - ], - "40": [ - "e03d3e4154bc3a39a1f1bc4cee53f19fdd4342ed", - "c521d842508e75c618ef7b867ef8d2091da5ca10" - ], - "41": [ - "284c78dd963f774c17723439c827e0295f847db1", - "08c160240978b14c1bea60194dc9daad5f982ffa" - ], - "42": [ - "04de87b7ee5b3072de0dabd7d96ca2a5cb150647", - "e5d67489b768d4dcbd51a1a028a93011c93b55d5" - ], - "43": [ - "aa785cd842096226377acd820b35c6ca507f985d", - "bf5244d265d6c9541b31e51579b4a348be1c1d55" - ], - "44": [ - "c3a08ec91a0be4531294f6ba12d5de8f01e9fe71", - "510f088540b4658dcf13f21c8a8211adc39f885e" - ], - "45": [ - "c15c3bead1477c99049ad0f95b231550f1443538", - "d49f472c1a7bcca44ec28fd766395a263ab725f4" - ], - "46": [ - "dd9ecf8878846f5f5462bad5b6195544865810d7", - "43357939d79cc9a6a9f1c16239fba42ba951d45e" - ], - "47": [ - "f38d7620fbe268b195fc72f00fb35482aa9e1769", - "2b8bad97de5b8d12bb408301b6e8b1bc22aa976c" - ], - "48": [ - "0966040e03b759ccacb02d32bddc5ca8d30953f2", - "69c3c8310410359f04adbcb23c9654c0d89a3eea" - ], - "49": [ - "bd573a0d57f16cb917411b836d7e9fbad270126b", - "5e2328f206607e645466794a9b8d624450f952a2" - ], - "50": [ - "f4f947c18e494b3a75360ced79dc111adaabb42c", - "616a326acd39d167b3be146e53501d3756af6c63" - ], - "51": [ - "c426bfd7986f48b417f88cf2895bd5d72d5cb8f3", - "95c6364b68974a69319ee596b94c7e0e6012389e" - ], - "52": [ - "522d8d68007b4039da91daae22a342828988ad74", - "5500b10db44b63f0a3403272fa9af9426f26818c" - ], - "53": [ - "20f572855b33a207461c495954ec2b0fadd11648", - "c65a790b5827992c45d601a3734426df70641432" - ], - "54": [ - "b94aa51c673ebbd098dad69fa4c538512135ae2e", - "3d8969b586eb13dd8acfd237fc99e5ead61af589" - ], - "55": [ - "4eb2c9e9291165587105647b03b4febfa7d22eaf", - "b6d7d1e25f1e96c2d30e13438b998532f389513c" - ], - "56": [ - "52ecb842731c16f1aa9f033ac1da0d1299923765", - "afea61c08fc0c3f4b95ad1c7e638c02d97aac864" - ], - "57": [ - "a809b51761913d3ec1cd3f747c4b9f295456dd2d", - "29c8e44ecad6fa6499a8d4a219a89dd6503a7a44" - ], - "58": [ - "2e8aed3a5cb5acd002974a57085be1f12801a33d", - "3dcd52102189c8737e7693c382811e8b0dcd766e" - ], - "59": [ - "4f869f5eaf2e97d0bad3172129c13953647276bc", - "8f96cc83bb74625f0b34dbe7ca27298a1a035a65" - ], - "60": [ - "3026f85328f141dff6e318ea60d8bb6f61b6f3ad", - "bda4910c385edd08ce7270c19ad2681c39b44246" - ], - "61": [ - "475164807638c365749e516990d19d18d67ecc89", - "4c7c84d5a788fd06cafa129ccbca796f3f5f9f24" - ], - "62": [ - "d7a7bcd9c93ec43888652beb10b9db6601027d21", - "c2c7c9c7240063499057237f1f38e89fef7b0afa" - ], - "63": [ - "b4322fa452570554ddc545b9492033797c985bd5", - "058f6fe88fb77a00575415dcfa0cc9d6a84a4edf" - ], - "64": [ - "e7bc6eff12d758ac84c0cf561e69d5abe05b6202", - "1dddbdaa1fbdd5fa8701b9a8beaee351c909100a" - ], - "65": [ - "cc8bf0929312359ff86015317d24cdc25d2c0584", - "66392aa63d0f17e3e861399ab877f6f8c99dc9bf" - ], - "66": [ - "0da4bec9e977085c0ede39a79b250ca5ff6f842f", - "0e08a98c6c6facef54a411f8280fc6f189366d52" - ], - "67": [ - "f7bb14fd98e52c2760b88e229719fc6400de9b44", - "00837e6e0b1b0a67711f7de408359cd8d8aa54fa" - ], - "68": [ - "bd9a7ee636ee76bbbbab80b33b68628ed66220b8", - "38461985152f2fe8f92fb7f51bfc042a0e1dedf7" - ], - "69": [ - "67e071c24a1cfd921f1511c56122c49fe555b317", - "fa79a77366c7a1fbb8460de51fc950103ca25e1d" - ], - "70": [ - "3a2d02b03b170e3bd145ad44f1ef105175964ccf", - "bfd3e93baebfe286274d8600bd85e4896694e83a" - ], - "71": [ - "baa874b2e7eb0984c48a2221ae04afab235f83c3", - "1f311f91d578983f3d137c8e446b4ae5a9b8cea2" - ], - "72": [ - "14827e6d01e9a8f4983302da9625f1ed92973e35", - "19ef10c3b7529dd6f67fe5b7506882b8a29bbde5" - ], - "73": [ - "6544692c5449d62f7392da324dfc8a852fd466bc", - "6044fdc4db3d4ed679fa25fa5dcf783bb17f994c" - ], - "74": [ - "554b650a41e31e9d50e2cf801ec9915be5bfb010", - "f508c8b6d690c5885a481dc87a2a704ac026c3f3" - ], - "75": [ - "d6cf9f4a46a58fb6a1d4e455e00b7eaf2b6fd381", - "641674723cf5db1feffe83d8a3377df18d5ee2ef" - ], - "76": [ - "3d948e0902a40efb93ffaa2d61958c20d75ba7b2", - "dcad59a4ee529eca5a9656bd71773d0ee5b56a02" - ], - "77": [ - "906948149b0b9c7b41d76593c78ac4a2db28822a", - "ccdad9b7c5ffd0c7826c348f1569cc82bf7a29c4" - ], - "78": [ - "cb1bd96d0e012412bbeae63868a123bef9ef342f", - "269ce6a48aa9a6bb4c7181e7bf34203248fc8edd" - ], - "79": [ - "a7b97b6fdb0580948c749f3738ed5d4871e300ff", - "10e6c57360e6477d731283fac6751c46d1f56ade" - ], - "80": [ - "e56f766cacafbddae03ecc8706f7983a03730430", - "6a5afbe50cfc23bf7d130e3b1ef52a9f9e4c7644" - ], - "81": [ - "fd65bfe001860fcb0c0ca49630a1df03b61e2487", - "ee936bd5158993f70a8d133b9ab6a41c2090687a" - ], - "82": [ - "d579d3f7b9e755b7936fddbf9f13e2a72241f229", - "446fe356bf66437597a91cb80f8369ad5d1d156e" - ], - "83": [ - "77942c73fa1bcdb6f7ff32329b2a9f7c0bb10ba4", - "8e8a0b5eab6fe49312bebdc32cbff5455ef8d92d" - ], - "84": [ - "46872ca37accec191566a1b213b7bedcf1741dd1", - "71b9ccc1da06c64360dae81d5745b649c00a4f26" - ], - "85": [ - "a303aee4614bc8d73db6415d324165fe886f8ee1", - "c82c1e4b2683f91a6521a9c04704b4b3afbf29c7" - ], - "86": [ - "34953ecce9b0fc9df510cd9e13b20b1f58d61117", - "7a2ec324db671f658a8b23907e8b3148de0b61a5" - ], - "87": [ - "da7dd5cf98acc6da79338f8b9bf7ecacbff11765", - "1ca46e9cacf6569c8cdb7c8770b9fee1c425f200" - ], - "88": [ - "2fbf48209d4e5a4eac0998f557b86594b48c04e3", - "aa93c6699041d90b912f4a3098ae978f47385aab" - ], - "89": [ - "7cf7db3c0189e3580df5c845c92895389053aff6", - "874f8ad807c62576ffc806a3874c1ff4461b45a4" - ], - "90": [ - "cdbf096f0b3d246d235f3b2d75319d7442f230d3", - "f5c0ec6e31883c9b9649bb877bc7e2b2cafa2086" - ], - "91": [ - "6309efb87bcdcd7ee9c46abd7720a2c1d3724e0b", - "36e6f464f03528a915aa6a3c60a180850de22541" - ], - "92": [ - "852dd1dc2c69536fe61c6893495ceac176c6bc3d", - "a77bfbdada69a2c7feb4c43bd966b88e5b238235" - ], - "93": [ - "11be43f56e5d97fbbbf4e44700b89780b393c68b", - "bc437f668c2f26d796ee9dd6f6a3139b3c733b69" - ], - "94": [ - "5a58570427572222a1e26d0e21f6296f81b777c9", - "bfdd0035b4c1044d24d2ea1a5edd96d8614395bc" - ], - "95": [ - "970cf0a3ff7efb973b2592bdb4fc4f28f187da46", - "f685f3e8eaa449c542c97171c29d652171a498f8" - ], - "96": [ - "0cc448bedb3497f6e5830cf2719cb48605473182", - "580c61f3f3ad6adba1804cc39105e98122a44e91" - ], - "97": [ - "b51798a96a0ecf36bccbbedfb97472d370921893", - "62ea96a873d7eb92ad2261c39cf6d5d298e5231e" - ], - "98": [ - "72330b8472bd4d9b376a528a97287e28eaaa2518", - "5475e27a0cd7d748ca022014c604c50e17e0b1f6" - ], - "99": [ - "d8802a211f38b5a71155ffdbfe7f36b987f02a32", - "941be8cb709b8c14e73e9795bebd3ae46ea029ec" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_020.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_020.json deleted file mode 100644 index bd84ee39a..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_020.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "dac5e46ec2e58e013ffceddf1568eea9f1110cd5", - "dae76b45813aa435ae820e5c0f92bcc0482ca08d" - ], - "01": [ - "5ee5ec2ec9ba2666ebb34fed16b3fe7f9012777d", - "2a6c7365d9b9e627969b9cd4f1458866dfcff702" - ], - "02": [ - "737dc83bc083b40b97145acc21926c54e882f823", - "5ba5032078db12eaafc93df3fba325c7ff59184a" - ], - "03": [ - "d296c6caa989f94e2747e562b6e108ba726d21a6", - "20cc453711017639da3cf95b885e0f5b1d4ab140" - ], - "04": [ - "c5329c05458077b8a9ff64b687f7a69e23c191b0", - "8e44b3f2ea8890cfe32ed4ed8595add76b0c7c86" - ], - "05": [ - "16740fa6243d55e384dacdca6cb2a2c91dbe6ec0", - "92bd13b1764f0b4b8fac9fe927ebda18d27fc2bb" - ], - "06": [ - "87fd80bf72a9656051254ecbd8b7ad66b7ba7284", - "c41a4dc211a7c8662320c92908b9d5f0f8cec7ec" - ], - "07": [ - "23ff0a5a6a15019ff30aeddb6ca79b63637446e9", - "03ed526649fabbfc9f408aa736d56c81b25e5b90" - ], - "08": [ - "51a31a685e4a6f6466c7cd98fcc666cd19910e85", - "15f3e1b216c6ea4ba2f37f1371c5d32cf8f74964" - ], - "09": [ - "3501328cf231e3fbfd05e4b7de9fc9bd7c90cae1", - "06afa162e9fc344461ab572c36e62a8765bc6f0a" - ], - "10": [ - "a949c6ee88eab12ef6c702a28440c3c50365377d", - "d1d7d23078e1ef2ebb1e7d4616690b298687cf1a" - ], - "11": [ - "337c216ce03da905dbc91852fd7966bcd891ea99", - "f271d1739f644301f8b325e244312ca69ea4a32a" - ], - "12": [ - "6251c9bfc3317fbec2105a5d7444dff6e6fd5b4b", - "d55e90965c91f5bd6b285acad333d05761361fc8" - ], - "13": [ - "c882b7cc5d01291e3beeb751f77a5ea86ab4463b", - "1a470be4fd80b3e27899b78b78d69a4d9da8abf0" - ], - "14": [ - "2ed90fa611fd15d32b056579533a35ca6d4deed1", - "9457312c7472197dc223690cc4d73cf614f24606" - ], - "15": [ - "088f12da1f70df819c4c1dbda2025f68353dcd86", - "a6f90fef2dc0933304437a84e3cd2cb93f2c8dfc" - ], - "16": [ - "248995ccbd58825f2ad34525785f96f667107b07", - "c88b7d5de712c8001c88492f6ddeceefbd0c93db" - ], - "17": [ - "7d3b49df535966b8244f36135eef9318a30dff4c", - "d16b3b9106aac3ab4fb3b5093d60c12a65f815d4" - ], - "18": [ - "afab882c97517adbf329022884b6198b77ae6bdf", - "93c5c92c6328227607a63cd5c33be36b4f37631d" - ], - "19": [ - "505581255fcd9477010ce095a025eefa41198909", - "c40f7e0ef450a906adec2e12292a58ac80c9f0d4" - ], - "20": [ - "24995f3ffb0555bff4eb7c0d764e206f6a9c30c9", - "b385251bb709fd227adff22b7b5f72869b85c9d1" - ], - "21": [ - "7433f9d75c49c010dc667de46eba8f7dd03fb176", - "9a9d76d7e345af7674d8c06a44da2f133d5fcda4" - ], - "22": [ - "fd7fe348ba9dfe9304bfdecd742241bba77d94f0", - "8ea1a576df354f6731915d1fc8ae6479ec8cefc2" - ], - "23": [ - "3a3a985da681c90a451399ca4debee8c7fe71ddb", - "5bb9e5db116f4ae1690ac8c9d24b0ddf03d6ae17" - ], - "24": [ - "02708602c4a4ce39f255aab4fd0a03869f1865ca", - "4ec8716c51afdcac68c5bf76b8a182b5322f5f1c" - ], - "25": [ - "0ea9e2a242b39fb779a41202acc80af2a9434047", - "b91376375f056d858b6ad46408fb7394f150037a" - ], - "26": [ - "a543191f7ffd7e7508ade9a7956219d9c3cb002e", - "9ab05db87ef339be2b2bdda33be1f0757a2e2fba" - ], - "27": [ - "1cb2eeece3f21901eb7100b1d33921a821647b87", - "c85f1dc01ea528e8171aad11729b26caafdfa314" - ], - "28": [ - "721a4458fa3d2e4594713244eed2995d6317a0f8", - "cebebc15a69437cd94e2846ab9267e6810fbae81" - ], - "29": [ - "0067130267d04ca34f60d11a394bed0e7747da1f", - "c4e7f65ac11d86dafdef19d04e61bf9a5dfdebf7" - ], - "30": [ - "0056102d6c531bf7c854f6d4b7638ca664086f2d", - "8cfc341d5dc2dbc10880b7d9330d7af0f4ebfefe" - ], - "31": [ - "e3a97bfbbefb0a05b823d699f3d9b183292d7d64", - "36b702dfaa7e562e1c1146beca836f96fef9768e" - ], - "32": [ - "61544352337835ede0b451bf7626aa245470193d", - "62a5835ca8c9a2860cd9ae61d080bae22ee5ec60" - ], - "33": [ - "444f7934958958c2842844c424644619ab8b7e9a", - "14d8e1f90a9d7a46211be102d1c9c12a1a56cc48" - ], - "34": [ - "2b318d89b11b6c6b155e2cc800bf11dd93a71591", - "e1d1e87262fe1480decf8cedd7d4b162e9454746" - ], - "35": [ - "0645087be69406e93dce67dd8b8f87d6eb8574ce", - "fe8c7465a599a7b04dacd8f674d3c31f5ce674c5" - ], - "36": [ - "14184287687e1f9e6aea362c23c1c81fc074c104", - "30631b42efb278eb30d05c599dd4bc744a0b0a66" - ], - "37": [ - "4e8428d9dfcbdcf4d62212161d9b3bcca0c541f5", - "455cbbd2c428f6965a3c40b370d37f6915ecd696" - ], - "38": [ - "86b643c4a45d74c3b3d28852ac75411b890bc91a", - "f6d7f6b1c232e296c65767a00c680a853a80b0c2" - ], - "39": [ - "333fd28419dabf87ce8ff027da3f7d9e8e8611b3", - "231a295e4f0b362f8446b36882e7367db095fcd0" - ], - "40": [ - "569596cb1ace7628a4262a53a7c32aba360efeb2", - "89352948c468eaf2d774d1ecb1e498fa0702085e" - ], - "41": [ - "1c32681ee3fd0067d3e1fd9b3e511e0e095bcdca", - "71a7c657347478a53c8c4768e20a926d05e9c108" - ], - "42": [ - "b652a5b25f49eac1388e0a46944f0506c4ea8598", - "a4b76ffe98b3a269969d027dc4d450c797ddca3d" - ], - "43": [ - "1f307ee5579f088de5e1ce51484ce7c73cdb2e62", - "b5c3b73b774e7d1a6a67aa3b7d41a1489539d8e2" - ], - "44": [ - "582f648a75779b66f73b632ac44b16f966465ba1", - "4bb467f0c85a15eb051134e2e20dea996faebecf" - ], - "45": [ - "e305c8ad392241ee0908e930a16bd15af857c90c", - "16e239d002f5031d09c4ef409a813479807db372" - ], - "46": [ - "470d789797cbb902cf07a4ffefe251437bd360ba", - "240886bfaf4d5bac836ede43fec6a5d800c0f8f5" - ], - "47": [ - "b9909c9c994b84ea5a74a21deccdaff5843abfe3", - "005e87f44b98c639a1112f602f4efa53265b69f0" - ], - "48": [ - "9145867475c15a1e5700b652dc6d00d17eed0b15", - "d03df6afdc09b164d9ed23f1f5255791179d0a27" - ], - "49": [ - "dd2bba34b5b4580ee77e2b8583deff5d2c4f22f4", - "531942dbc5806c285ce692680891fa3a87a035a5" - ], - "50": [ - "814a09dc88965d540330b5f000567e9d356fc948", - "b33c3f320071c21bab57a838e8b3305b6dbdd414" - ], - "51": [ - "e40cfa4b24853c6498d7ffc2b2392d1f21e92860", - "bc0a5247c75409d78b2ed2a7b8e933e81c403dab" - ], - "52": [ - "6f162c40224c2483b541a03edc3dd7854ef6eb69", - "270ce099364aca182c422e114b74bbbc218c0699" - ], - "53": [ - "4760eb7c39b41fea7caeb543b9e50bb283fdfa10", - "d517e812efb9f0b1563721b94142adbd59c6fbbe" - ], - "54": [ - "9836ccdaaafc02bf9f4fb67722ec454b7c4b95a5", - "4f47f72936b670a3fdffe727bcce117f9e4e1ed5" - ], - "55": [ - "5852eeb9e19f19ab751fd3eaa9c50087854171be", - "2870ead428d3ae93f987117a205db4f73cdce2aa" - ], - "56": [ - "c5d8f204cbad3277b262880dd29044ea33f3ac21", - "55f15c8f7457eab33a2bc3a17b72c358c3249c59" - ], - "57": [ - "dadb0b21e901ed6912561d5478598b5b9ea1fa74", - "acee81c328328d11f05d8319f5dce9ce8c2c30a0" - ], - "58": [ - "c876d14c08b5e97b94f79435dea411e1a2be5818", - "41ebaabd62cc32414c432e432def07f8bef6d4c9" - ], - "59": [ - "f365a24667b113a14bd61b184faf5d51dec66599", - "952ce356722bb0e799b1c3c51e5e45cf3cefc80e" - ], - "60": [ - "d958e78cba943f690a481264f4e0484c20ccd899", - "650a00d57c9984bd508176d4f6259acc7dfbc769" - ], - "61": [ - "92447d594523675e636b032ab73ccfcbcb6654a1", - "a5dd65e76514f3ef2fe4cd8d73afda77cc5500c5" - ], - "62": [ - "58943e50d0b98df2431871ee56d6a5d95fb260ca", - "3774e6d91ffac0f0a4351d11a2fe56ff6344ebb5" - ], - "63": [ - "42877623ca90af1d5ce7cfe15bd3b1c415554141", - "ec27be8551456c23dff4f4f88aa6b53de55fb67e" - ], - "64": [ - "70f88e33338361d75321f0baad01f11e025dff04", - "cc34695bf0b959f3c960fd2de85a594bfdf10fd7" - ], - "65": [ - "e57d4d06057479328b7cbc9afc85aad9f79e53ec", - "1392fec53d2f762a59d8a446024231525dca4d1e" - ], - "66": [ - "3e7dea02b453c58115479ec6ab7e9c5f8d4726d0", - "7589d22cecd56f81f9b3f77578e42fcbbd8923ca" - ], - "67": [ - "a2ea6b3a0ede003f015a2c0c4e94252eb81ea5af", - "ffbbfb859a0652126e8f8ee63b4f3074ccd2d9b4" - ], - "68": [ - "ab22fe95b9854d2e1dc3250379d9cdd48279e265", - "84b6079ac992a60c12c1890b5272ff744e3a24a5" - ], - "69": [ - "fc49c6894a174e8374c9bbe2d8a6b32ede497205", - "1e4eac3231ce0d744d9c37476aa5b66468800f5d" - ], - "70": [ - "1716091dcb13a889fb6a1fc63215c11ec9f88829", - "f82e39ec56bb087064844e081df1ae2d8e1081f9" - ], - "71": [ - "44ee47ed7021be2ff5de4d1b8a14d36fda86f13c", - "0a6e47496005c916a143b16bb36c6c8653129df8" - ], - "72": [ - "6fe3cff840e5cfa4c6fde8690f3cade26c67c60f", - "4f42af9109c9d516f9e492bb3f3e1a7dd055b978" - ], - "73": [ - "9c853f301182522124b75c9f6332c2f206fbb05e", - "c423c3d0d5b418cacd2edfbe2173cfe725aaed33" - ], - "74": [ - "53580508db7c55ead80b18eea207076b3cdc158e", - "8a427fedb5bdd48d94b06046445cfe49a5e2cf1d" - ], - "75": [ - "f1dab6d4cd40cccaf4d5fd59b753f34c6570d9f3", - "58daf39303157e283797342ee56a6b6e232b6cdb" - ], - "76": [ - "7445d24a09294f722c8066e787ed6a8ebad5cb43", - "c5bae9d1f98050ada69b04a1615f219a3a609975" - ], - "77": [ - "cccfce0779c432caec7c7cc28903fd8e72dffd83", - "b34207a496c8b7230ae4ba58a17b6a67fcbe39b8" - ], - "78": [ - "447b9996d73cb43ee9e9b9d09cfd5015b1483084", - "05ca89563324af7d4629ff51be2214b843310e94" - ], - "79": [ - "fefd41485a4133e74debabf41acea40c9eaed1ee", - "25a989b368c3ec8c14327e9bda05351fff827032" - ], - "80": [ - "4e190a4775df715eddd1a2c215ed3907c2548514", - "a5e9cac72b01e873350033f8d92719f872eeccde" - ], - "81": [ - "356be5fee6b593964ca2ed7b73fbeec450082a00", - "c9a65e19b036dbfc8df170ef335c7b64700aae57" - ], - "82": [ - "6e39542bbf7d9b30ac5d89d80818e74746f3f396", - "7331a7db83667aeece3456da616652fc5c59e70a" - ], - "83": [ - "8f9990334ade897dfd66d1b80e352f0d83ea1115", - "51b07e97d667db59f13504a11c445c9121500fbb" - ], - "84": [ - "56fa29cd6145f83e6634b2127be209d81d40f664", - "fc67126621e268565946b31164c7c0fd0977b434" - ], - "85": [ - "761e621b176251ba21da5bd45b6b5fa91e7c4e5e", - "7e01da6fac19caa4f14195981db560ac433a8512" - ], - "86": [ - "dbbe65f5846ec397d1c82141f93b2600f2a5ee99", - "77c6f7653897f70c7cd196bf26d8c9fc81734d07" - ], - "87": [ - "9771ae7c5a1c923d1d07878c38858ac0ed7bbac6", - "baad41c990566782687c4aa809c8ef8635777049" - ], - "88": [ - "7e5957ae4a0606a055c6aa798591b43b51f609a3", - "96b2d4c4b778beaf0a81794d05ac7598d29e3ccc" - ], - "89": [ - "b910878190b40fc95b2001a7bd273dffaafb1cf1", - "4de0019ad78d4d0e74db2c5604560bc0e884e598" - ], - "90": [ - "97d3174b1474fec522dfebc90f08802b1b4eb915", - "ad87a7aa74a1186fd83d9c6562c1168def111c4d" - ], - "91": [ - "2ce33ed0b0abc5991db0396e1e051bf06b7fc172", - "8472e279bb00dcb9154b8c9e31874e1f9fcda6f2" - ], - "92": [ - "70c79dfdcfe5b4e01e6c46ff3d9c288b9e2be3bb", - "eeada648673741d3364ba3fbf67469d802b120f1" - ], - "93": [ - "4675beee697a0e0f2e3b6c84cc24b5a0f8d7c2b1", - "64bfb9a87dd71a064d4593af30d58e474908131e" - ], - "94": [ - "95e7f338e0a307055651fd86ee69ae7246001856", - "7fa053827afe036a0a1a540cc9961f4cf785e492" - ], - "95": [ - "d76dcbe01bb35de00cb94c10012b4bc10c454014", - "e7e68e494c57f68a4603fef52ae874303c796c5e" - ], - "96": [ - "360600f64769240b239a9033fba74eec9a93e2d1", - "26f7c4b403f71822d06bf45cf3dc670893a8ff37" - ], - "97": [ - "d34c70f5c0efafdf4a60bf9380d335bd29c39378", - "59c96f405f9c9408b7c64811d6b6602ecfe56440" - ], - "98": [ - "5e766a206b808c7811cac7a979d70365001ae1dd", - "7341670d72e126bd3557afd8af1a2dd86ddc0238" - ], - "99": [ - "0038f60873c82bde9dc7ba452d847029c787d0f5", - "8debd23ea1450f5f9df12c8bf80bec800583b6af" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_025.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_025.json deleted file mode 100644 index 4a10d93e4..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_025.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "061a8b5e9c4c632bfabffadec377fbe6c94c86c6", - "0804f3dc53679e7390c79a1ec4de326447318e94" - ], - "01": [ - "cc43d334eb540cb93977499f89928ed2c21a97e4", - "ca6bffff7e4f11f4efc4f3230fa6da35d729f6e3" - ], - "02": [ - "6ac8a5c542a4d4b78b0e6d4c1562fcc338555c16", - "e9f3240e9378a4bdb8c422dce369d20b6f5b54ac" - ], - "03": [ - "caf0479f231026de72b350bb78ac50181d6e7fa3", - "646e9bf10f8d585eccbd691de861c8686c8ddd06" - ], - "04": [ - "9d51b8d6ba84576d24d1f52402fc9afc6ec212b6", - "a0d31fdd66263e9e2b85fd69dc6ef567867648c0" - ], - "05": [ - "ec3e9c6c432c78c2ad1adf544925a3a59eeef2c1", - "ab3f2dc0567300cb1c4e953e0e042bcb0ce1364d" - ], - "06": [ - "a86f02c9f83073012d1fb65230d7523968b20d5e", - "17e5a036e897d0a051ac195bff81da337a905ad4" - ], - "07": [ - "e014e21b68b5c6310da40f68c6f9523cd2483a5d", - "1300679e39cc4402d8cd911293a83e4e5f6910c9" - ], - "08": [ - "06ebe43e484a95dda38885ebe2cc1e45cc166a3f", - "a24cddfc19ce9e84ce4828741b58c9febf3a856b" - ], - "09": [ - "c8f95cf382605b8b27b868db673405b31184caf8", - "de9978f5d0b6f01310d5ed2410b2630484ff63e7" - ], - "10": [ - "a42db1c9bec5484911e793f8f2c97e9fa13205d2", - "30c92cb5807739323d72c00cd9bd876aeb7f65e0" - ], - "11": [ - "491c19fb7f242bebba4252809c9e9908d5144c80", - "f14991cbfc0f759aa56a71e5241a665a78be69b4" - ], - "12": [ - "02fb8a889527421aa34b4d70e00b05e9499fa0eb", - "e24d8fc89f2834a6d323091076f821473124c3c8" - ], - "13": [ - "584302eca48eb48379093a723a38f348783e9909", - "bfcce331e9388212bd6b69c585029aa67c35f8b4" - ], - "14": [ - "dcea61eef6b8fb6a45800d489e4cdb4e0339c8c2", - "65c174612bf3673ebb31b60fb4f8767f85c8690b" - ], - "15": [ - "5bbbeb78195c2fc58d01b3e46b301bbd40477edd", - "15ee65d4fc082e1edc43d90119c4b3675f1178d2" - ], - "16": [ - "62bb06d46820a2bd1263124e1f3e7eefc74c0345", - "342a94b40e1faa20c85f40464d1cb3ed92cb2f7a" - ], - "17": [ - "a433d8dafe5bcb8e0cb101025be6201042860c7b", - "0d83c98042b617116f8134e5f347b6857c884543" - ], - "18": [ - "ed02320b0452ad98e19bb146d0c6aab80dc212a0", - "000fcdbb408df546f3fd502dc29d31828fb3d5b4" - ], - "19": [ - "889c8fab98491caf3c2c856bd4cd61315459aeb3", - "6c970f669416cf9614262cd5022151f5f18a8c46" - ], - "20": [ - "10f3ca76384e2d6d2a27c792fa840dca50247f7f", - "3314c141443f26696277c26add5db2f80501a813" - ], - "21": [ - "9a66b5e9c489ae482b9393e23109b53cd351a178", - "cc28cb235169b17db8383ecdf9eda04a9b994ca9" - ], - "22": [ - "dd4112bfa3447d59318582052d9fa976fb460271", - "8cf11fa069f542bc93a67388766a0e00984ac3af" - ], - "23": [ - "d2d45a7cb0df3d45d85dc6dbec2e2dc885604956", - "d2fc8b0e1fd3bd6dc8d5b89a251c5d07b41e25a6" - ], - "24": [ - "a070f832cbd5c93a986471ba87c4bc8c9244fa72", - "8c14ce638a65c4986dfe16ece181b982419d1324" - ], - "25": [ - "dc32a36d7a41be13f1d416579051dcf4a5491305", - "5ffce184c9866616762d3ef16277f4a32528149e" - ], - "26": [ - "5bcdbf2fc5223258416a9662a7009a301a49005b", - "36b453ae0abc0dd1bd6da60bb288db7de258e87e" - ], - "27": [ - "c88f4e605d2998f62adba5825a2c602eeef8ab13", - "1eaae7f2261631edad9d95d7b7d23aab501b331a" - ], - "28": [ - "83734e9ddadfef18fdc8dd7a012ec6a231e7b0c2", - "e988f0a1a09ed7cabb7ef6d69833236720bb26f0" - ], - "29": [ - "84b5136abd3d2afc4f7543d9a6f95c60f00edc1b", - "bec45380baff96c577d13561e5870a9451217a3f" - ], - "30": [ - "ef26f937043cd597a65e4fb6725bca03a712f89f", - "a4e0d11fbb41063fb7e728f8da1f40f72cb66579" - ], - "31": [ - "d19d20dec2cd83a59ebb4feb2c794d7ed15da5dd", - "dd3cb1aa755fa016f29778dc34c89fbec9c0bca0" - ], - "32": [ - "924fb204f1e837791b4dddde33a3b07f4936d4f4", - "47dd7a2d06584308f7f8b2447571bb21f850e3cf" - ], - "33": [ - "0c5ef29f3a73c62a57f3e223402df162fa56961c", - "90780f284648d432a8bd2a540ca33a281fc47f30" - ], - "34": [ - "a0070b838f89debf9af42783c0b98e217782e4d6", - "94d241d7bb051aa0c4c41459d5f5032af670c39b" - ], - "35": [ - "b6a02c7f50ff78f7dbf2a8aaf10280e35ae89dd4", - "8005769b530e78c374452d060bab6a88da199a09" - ], - "36": [ - "630d3ea32aca7f5b12f23ab0cb33eedabfb25a06", - "a37b2041952b0b69578f7ee6b54ee343a8354762" - ], - "37": [ - "bcf8d8b142e35353365735f2bce7902b1ee41d3a", - "5dc84f43bec09b46b7f4f5c0e2df9368648a7ff3" - ], - "38": [ - "a6235395c9f9b7e25f6b6aecc78a139965822497", - "8b675cb678563c95eee85954ed28681e9a418b84" - ], - "39": [ - "010e3301932c9ba2958819394603fc552e80da4c", - "0cfc50aa6cf159cbb1de90b00276a92a8d296229" - ], - "40": [ - "9835007b29aebbb23647c853abbeeb4442ae2b8a", - "0eb2f212a840d4c25cd092260a1f883d6208cccf" - ], - "41": [ - "4cb6d59a2cef9684d784502be4987053a67f51b2", - "5c4be1672c4a565af52e89e66ff3c7d3b5f37159" - ], - "42": [ - "3c02aef70e408510373ad8b2dadc67caa027a741", - "af8c65db7efb52daa59a8b30d8d374aad09e64d5" - ], - "43": [ - "60083532ea0ab1d65305c928f612f0e45a1ce0b4", - "ee53d901c7fc8024ae397017501c86b8395b4d8c" - ], - "44": [ - "a1f7aa27fe13ebfdf135fe3e4c7b7631e86b174c", - "de356230a2107b696be4f8d6733279df160267b8" - ], - "45": [ - "c006df4ef461c66854df6c1422418848d2e417c8", - "45d5b24cfe1e1c62f9e07814e4019caa7c66d310" - ], - "46": [ - "f58bb2707eec28c0670964c130262c76eae5ee3a", - "85438c79ec0f35fdd60e3acda190023014f5d6d1" - ], - "47": [ - "e6fc9bdef49f26147b7455830dfbc202196a222c", - "7eeeada82a87b52f67c9c16e2f8e3c797acc3924" - ], - "48": [ - "0a5e8fb1a7b77d548e44fb8021f98eced958ce7e", - "99f2dd3279e2dd09d57427a31b81e9858f0c6f6a" - ], - "49": [ - "aedad9464438dc75f93dde10ec902aa70d202205", - "245fc13f70e797e38c1b1b87ae6744cda220aa98" - ], - "50": [ - "6ed0e9a48f727fa29857a5f4fad5b2d967a204ef", - "832ec524a5f336e040f97dcf3d1d8b4f75499bb7" - ], - "51": [ - "f3a2e7c2d32c5ef3ddb7dcf9c02a0da328896017", - "75bebcb9614120990c14a0924057771b0eb0b7c5" - ], - "52": [ - "3db239b8b202ed08d85f3c167212dc2012fb8fcd", - "04955d3ee1315950b3fbb7bf82179e98a8243721" - ], - "53": [ - "09c5ea5102cce0478463416b1d79df8a013fa4b4", - "b765a6d1a5b0f7763ccbbb769041fcef87697ee6" - ], - "54": [ - "73ed35823c66e63aece6b5791f800d8d664842e6", - "e2a570c8f2d3d28b9fb15135a9b53d577c214031" - ], - "55": [ - "b6f912de410e804826673d5de5f602d13eefac2a", - "71cbf88cdaf987ece989b237064c79a4c97245d9" - ], - "56": [ - "1e54cda7a01d0162235fd0448421b406b0be1746", - "fb1d09a56c4464f556bfa28efd1fc0a754ea2793" - ], - "57": [ - "0d947bf50959d96dd613d05d66f8d010a3c7aed9", - "1301ac7994d63fe1a5e75b0edcfe11b42fc86966" - ], - "58": [ - "36ba91e0cf2016c1fafd745de008e681d43ab145", - "4f03a2eec051f803581f83dfc6a50d3b97e77486" - ], - "59": [ - "92f58806386fc90378b13b8bcf21af1fb715c1da", - "56da7819edc2928380d97f2017e2b36af679dc2a" - ], - "60": [ - "f1ce9b951275fa8c6e765e16da13115488b8e8dd", - "005d7c100860db06c57f6bc717d7004bd70b73a4" - ], - "61": [ - "3da9666509c994f48fa6854c569cb8fea36f356f", - "abfae3f103c7bf0fcfc57e149992d428eb796098" - ], - "62": [ - "65578ef9ae976e76c4d60760937fa8a4b3c26efe", - "cf30048e758ede92aeac313e8f1f144b9c3538bc" - ], - "63": [ - "2b3d04ef10f535d6604cc751b6abf62458e922d5", - "9db4b7bf49848b5411d111575e917feba009d20a" - ], - "64": [ - "c2ad6f0e745bd247c0e66132cd40254a7454e38d", - "7be78e55eb7927ccde939594fb7d1a6f404799ef" - ], - "65": [ - "2d0cebb650ce2740f468caf42a6ca20bafdb2be6", - "c3c5ef218cb2c867328e8374cfe17b119b1a0623" - ], - "66": [ - "1220b982fbf71fa83cf6553e4b743a9e0a5b7da0", - "cc7b030daebd65cb879b05c9e772853a1898dc7a" - ], - "67": [ - "6a1ba9e704f5cff519f96565bd2710ce00ed31e0", - "dadadc6dad8735b8fae4eae13a6a7c6f0d1473f3" - ], - "68": [ - "20f07e0506ea7cb8d0baea4888ed5a224478072b", - "3320b4e3477b46cd721520a3bbf747a143603680" - ], - "69": [ - "89ecd8b0678a653dcb982f20a4d868f9ab25dfe5", - "7163198602fb59330da8f9f10ab8b9f4e0c031a4" - ], - "70": [ - "c0bae7105b0fcd75ad4ae44d759376e8feab7b1e", - "b73999e9de6fe1abe2f6a44d873dc74e46b72096" - ], - "71": [ - "88de000c589c4f0557f69edc9f4788d75cd440a0", - "60c2541d4fc2df997cdceeb3d2269ccdae3a2621" - ], - "72": [ - "462dfcc0c3292e81c0ce3a972e3254ada0821dc9", - "b8ab93389b2d24a1f5901be43e9f10e466d3725d" - ], - "73": [ - "4c8c6ba26c49494b9604a9a7ee45030161bcdbd5", - "19a1c3543f95c21882a6146ce35c5f604e3144cb" - ], - "74": [ - "fc15eba9a0157382461d504aa9d6ac7779e140cb", - "d6a9b40bbe6f4cf7068038dd71527cf6f5ce112c" - ], - "75": [ - "850239b48d8623eb56327d84a9646e6e59cb0fa1", - "088634365dd452d34e5d41835345f1ceef5ad5d3" - ], - "76": [ - "f76b2a2a09a75f85b0a337c3ef04b7d3c328ac57", - "50736970b3797a068468b1e68fc2c19224a65fb0" - ], - "77": [ - "6d6e029c4c0fa07e199b7b36e0626df42efb342f", - "bd3e8ae304d0a8c83244ebfa61ff3b96bde1db28" - ], - "78": [ - "dac23d4d4cab8e929c0f6ff849d6194a1c1a99c8", - "274590492b45ed0f2d6f16e9a6b31661eed2cea5" - ], - "79": [ - "96f7a43728742cfe443113ad856ddee811fca40c", - "49af0e366f704a6ba8659cea77421b7da0bbd2df" - ], - "80": [ - "f5663d6ee7824e2a35e3f1bfd49e524ca4dc4a52", - "70061cfe002cac2718d4e6cacb9cf565adad0af9" - ], - "81": [ - "2bb35eb63820104ace62c1f391cbb08661f46e04", - "4f05267b7536c31a1a4d793ae19ddbda5b809b5b" - ], - "82": [ - "ede79fed3c935e741bd2076ea59e4432c604cbfa", - "7c723b6c9f55d5657d39d761a339f441d0f3e1b9" - ], - "83": [ - "67ed4e08ef30e08914fe118ce8149fe77e8968c0", - "ec57adab7520e52c2fa3c59d1fe75008818746f8" - ], - "84": [ - "f377cac7c05baeb9b9c9b8ff54d69932fafed5bb", - "de2f1ed3644f5b2cd16dc19b45bad2790cf1a363" - ], - "85": [ - "55dd1ee55dc15246e5010c4292dbd55ef0e758ff", - "bfd951c6f33148082a9c74f5fd6514c18668cb79" - ], - "86": [ - "72e1e67d93dc63917c2bdeaf10dd9fb02c925573", - "b65a7e786e973c4646ca4a5d349073e45298f514" - ], - "87": [ - "75b73eab7123345331fddba944c831b524f49730", - "3e2e00fc76d6bbbf6d0abe797a3203c02349724a" - ], - "88": [ - "7fd3a9996bea23813ae1aed910f46c9c110f385a", - "e57e58c1f50883ebb7fd96588d5a0de52385b462" - ], - "89": [ - "efc6615713c309448ca140b275cceafc3d817817", - "2bf1c99890253bbfa59f2eebca94fe086bfa6f59" - ], - "90": [ - "63282b39ddd8390f02ffbe7e7c435ffe49e596f2", - "7e301fd7008fce1fc0e24232419c5f5bab237f78" - ], - "91": [ - "80695b0148762a17d626bdaebb57f56dadea4773", - "ba86f91a4a4921ebf6324cbc946cb4dd9daab7ad" - ], - "92": [ - "2bc500154bc91cf350b268928439e9e552dd6833", - "ee91e7bc3a80f3dd9f0ca9b9c5898612d7088aff" - ], - "93": [ - "a47ea4b8ab993c438e865ec8b291ae8f2d5768ec", - "7e830ae2e5a1063fc603ed647b2c6efa91463b41" - ], - "94": [ - "bea5288867441abdc51d70d34dbf49c8c63e4134", - "d2a6752e4967f0b48e935a228892ce9dc59e3f85" - ], - "95": [ - "817fcd6fdf6c80a9b77bea4e7dbe037eb29720f4", - "303cd8f7574eb3542371a2e2bd59724f5501bd13" - ], - "96": [ - "b879d423cc688d997a407613526a74c81176186a", - "37c283c831383e233275a53377bc1a81006f87e7" - ], - "97": [ - "deddb28ad5db1968e0b6d8c045ed68237f27962a", - "f760aacaa64887a1c216928a85dee5b42ec6e59f" - ], - "98": [ - "9aeecda294d424027293c0123d7d770357f59f77", - "7c5c52c45cf18ec3257f6ca0cd1e0d75a162400b" - ], - "99": [ - "8ed6c297a60fd3c967cf7837004e24c8852e8c80", - "17b0474b897ab2cc469d2f7ab59550c15d7a04d2" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_030.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_030.json deleted file mode 100644 index 4d222cc96..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_030.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "8f632c05cef14d5e1fc32a329ced82841017595f", - "7ec6073afdf46b25157ebb226ee339f0afd87eee" - ], - "01": [ - "34cdc2ae38d41bf6adc6cbbe3bc6ee8564a0f006", - "9cf5f0beed1aedb4d73cae3c09f551acc3eca320" - ], - "02": [ - "7be8430db1a91e09bbbf4af9d538bb7379b4db0a", - "6ff5f675b4059d5ce1a6c3eb51db9ab22e98952c" - ], - "03": [ - "fbe5a4717d5e7d7275d8e553a8e4a03f9036cb6e", - "c49af9a3ebe1713a6b124b91c16b363be2235929" - ], - "04": [ - "526b5c5318d717cca308b1cd168fadff7f423b7c", - "7a54563191542936f3eaec1d2c771ce3225a87ff" - ], - "05": [ - "43e231f11b603dd30943380a430984171f4c5030", - "5880fd0645e3ef3b21a40258e0a71ad401a7023c" - ], - "06": [ - "0219ea3c1654e271b733b05c3b7d43818a95fd21", - "a8ea6e2c3dc01da5ba2049555b0e8858ed3d22f9" - ], - "07": [ - "a4210ca27109fd4688b231f6e0c78a886c146a67", - "c45736f9c1814fc8dbafa363fb7266d124dace85" - ], - "08": [ - "ce1291de6c3dd84789e80cbde21cdffe593ca14f", - "fdaa9ef895a900606cb10b8f6b1ed22eb30d3db1" - ], - "09": [ - "a8477114ff23f8e26c9f307731fd394fdb77f792", - "c8cc8abe1dba883127392f1b7463c1bcf23985a2" - ], - "10": [ - "0593a76fc2a91288ddb8204da089b8a6e200cb6e", - "982b251b83f6513055b121ce82ddc4293f033f3f" - ], - "11": [ - "ba56220de39ebfbb340eade5e9f2c3d6d3fa313f", - "8d2118b189bca207a50386baa7f3ca94ee8b87e9" - ], - "12": [ - "13a03ff8545d07beb804b56c1bacf7b71413a2b1", - "be4d76f97f0133999ca168078b5e4c90eedecaa1" - ], - "13": [ - "067fa38be6b6a4a84cb46574691a5c56908fe85f", - "75467340f403e9856d4d26a1cca6bc56209e34bb" - ], - "14": [ - "15f31a5605653ee983d8594613280d49fc63fd39", - "74b717b444fcbe86c29cf9417d8b3d4ffd3fb534" - ], - "15": [ - "c4457724a3d02275b0033b5c0325e59986e53f17", - "4069613457a9e0b6c770862093227a5a6582d744" - ], - "16": [ - "5296639a80545f98c135eeaccad3bf233896d0ff", - "56a2b83a2bcbdad15a8cca361f54e0c570e4d65e" - ], - "17": [ - "8f79c38cf8157ef0daa7073c9e1dbe0acf33da21", - "4ad108e00aefdd07b3ab72bdeca4a94a37447c38" - ], - "18": [ - "07d7d5fa6d8248688139ec7d86f52802c86d9d01", - "4b704a92654aaddc3d4ac30ad54c79b355af0368" - ], - "19": [ - "eee2143fe08967d38134dd43cd06d84a91fe3b8b", - "f419f771cf9252f3791f6e3b6c9ccd81e66250b9" - ], - "20": [ - "c6c20eb43ddae0d18f55944ad1bfea34bcf53d65", - "28c3adac385bf3d192f5689abd2614545f578a69" - ], - "21": [ - "7a693d619d2d51b3be2e513612755b7b1809dd64", - "8f38102c8d2c2aea7b56ecdd200442e55cf3309b" - ], - "22": [ - "d439a41ec383cba0e44107dc9176c37be04b85ff", - "97485e7fced6fb98b8e771c176863c99828e64aa" - ], - "23": [ - "04a3f576c5f2643b5e3d63610f81184220003010", - "ee965e626764136ba368ccd38f1cb02e3a96a3ab" - ], - "24": [ - "e64b84ae4798af70177aa00f233b7910702e8458", - "7225221b7f22713c51c18bbbe480ac728228d9a3" - ], - "25": [ - "b2cf4ad3a95a1ef8a690f6bc01a44c573c866258", - "2d7b6d6b8d8fe6294cb059b8548ce2fcf01a598a" - ], - "26": [ - "3ff4ef136740b128191729675a901b9e338fac4a", - "50b44cdf91f67ff57085d585cb7a022db68a019f" - ], - "27": [ - "171af7b4b9a8232d30fa96d51d8ea31ca5056708", - "382e4138dc0fbb8902568dd8e4025d894a42fa5c" - ], - "28": [ - "c3c2090858efdbf0bcff48bd28e7d1e0d740b6e6", - "0a01ef82e2aa84ab5f0a19aaa904b194ca5e03cd" - ], - "29": [ - "57a0931f999fb1a7e93c14d11bbcc8f68f4826b5", - "a510e19ae8ef7ec77ce9372afef5f3124ebb27f7" - ], - "30": [ - "2491f8a876f51cbfb3c53a961401a38510358b40", - "418bc949773361fa78f24b2d5c8efd9c732685a8" - ], - "31": [ - "c1241021b4955812e25b432e5721734168d82ea8", - "c37dd91beaec110059843cc47029539507747c13" - ], - "32": [ - "13c86a429b20eb18a519df378a306193a72f8b23", - "ba7127f2330392b0cf45041b60422353d9f83edb" - ], - "33": [ - "a2192e7912d7c9c3d7c09c82a249913d995212bf", - "552986a73ce63c3e0ad671bf5ac2fb4f3da8766a" - ], - "34": [ - "c3c3313fbd0fca9672a85c1287d13dd929b66e6e", - "d4c137fd3c75d1a4cb2e1e58c303fd78548aba4f" - ], - "35": [ - "f6252867e4507f2c594816f1e305b4823ab05a91", - "3f5c22101fb7f2ae74e25d93e9d8caec7b40cf15" - ], - "36": [ - "9681f10ba9691a2a58a09f12e72590b17c865c9d", - "eadf4d6bf8ac5d5e5237623bb6f8fb30199f115c" - ], - "37": [ - "af4ef724ae39a3ad233aa1ed7d3344c10ca7eb07", - "216b4821593b17fe921a5c2f1a19b73a5fd5bc9c" - ], - "38": [ - "b3deb339df8a6242e3cfb60056bd74687425b574", - "d647d3e39fd45acd85a68c29a414618f08b28687" - ], - "39": [ - "04ac7ca11bb829fe58b85faf3931fd11db54acb7", - "804d01ad3254bb8cc0eb57d9ee0287d9613f803f" - ], - "40": [ - "619856204fd295651a5a337b4a6e14e88412b6e5", - "694621d90f79a1b64b159ef04db00ada7ce40fa8" - ], - "41": [ - "2bb64dc0712a733e764c74ab84e3f684ed10c236", - "8b54f7a08acd0d28179769e3813e3fff1e6865c3" - ], - "42": [ - "b6982d2c3acee07ab5434e39c3ea6e3a45a2583d", - "1b3e4068aedb13d2392024bc4668f5fcbbb76c85" - ], - "43": [ - "4e1841d3f9e239b794191b20e06179ec198dc76c", - "bf0643f01c0c5cf8217aad24c76f6779b3c7de77" - ], - "44": [ - "31e552e9b94a68fab6bbc6501d981decb0d42e93", - "4394fe3d077df74ec1438499b5498d7852b5633e" - ], - "45": [ - "0b3b547078b9a47cdf4c8bca0ccb7f5703dddd37", - "f99268e9685c858f7ca8b6b67329f540426ae3a8" - ], - "46": [ - "4eb62dd22c530ed273aabece254641ed4b9df3c7", - "0456d2fe63c00feeafd00cf762057d0e7f05c680" - ], - "47": [ - "57b07e34d6acfcda249a93176dc7653cb6cec5a9", - "ad245358284ca550a50e20e029d332c0b9afeb7e" - ], - "48": [ - "c471cacf23da636ed28f62f23beae762fea73449", - "cb72029112a7811aa12dcaba7bfff35aaa405ec0" - ], - "49": [ - "57bc51ca264ef82f67c5783d6f3330731f7adfb6", - "48b1c276867fb62c6c51588ade1916f25f2435d8" - ], - "50": [ - "3d558fc25f0a69fb82e54a8dd3c2511be930f1e3", - "3e694752fa95dd114b5ae251277cb54e534260ca" - ], - "51": [ - "80c7342eec06ee5302f94b97a39d53ac703378ea", - "4e506bf6da2ebcd7d7822fe164bb0cc3bb931f36" - ], - "52": [ - "c1c8a28f1a719ecc02d51f36680c2aa4dd9d8e69", - "3dbe3bcd1105df07ba115da4e0fc7c54432d8f4f" - ], - "53": [ - "36e64aa4fc5ab7f37ffd0ca7d85691cee5c9d5ba", - "748ad0ee48f95cdc9e3b2e3cb0bb0612b9e19f50" - ], - "54": [ - "566fc3f2609b5a18b189cb379d609f7e48193a52", - "a0448ce82fc50a82d2bd6a4232b170e59bd3c996" - ], - "55": [ - "5cffa4af9ce6b4c2f99706d6eb261feac184d1f3", - "664b1e7e3d1a97ed6e872dbc4e38135ec73a762f" - ], - "56": [ - "d63b4dd7534422d378b46bcf672cfcbd5184db01", - "377077a990392b56e0f7ec6b935def1c4e751597" - ], - "57": [ - "0ab51aaa201e52685fdd52bed05cb994b8c30f1a", - "7abec676357173fb59b80411cd03fed81a311fca" - ], - "58": [ - "16f6ebbfd5aa79764ceb50f03a490edaf8677d85", - "4478ae4ef387a2a68ea82deab98e310c2cf366e6" - ], - "59": [ - "6a9cf0ac554df3746b57f10234126b988d7327e3", - "deb9098691851110dd7db4f6c309c7fae26d56c4" - ], - "60": [ - "753e8bb365e3cb05d128ccd57d80aeb155816b05", - "217d748f2a636c83e138350c800008b8c4ce026a" - ], - "61": [ - "d315b6e2706e54e72fdb28fe613777f04fd1ca0f", - "e74383b55bb72832e83f34745b1020f80f37c8ad" - ], - "62": [ - "0b120e69a97f6ba100da77cec27b6a1a9a615faf", - "f3952e714f9fadf24420d728bdde33eb2f598581" - ], - "63": [ - "8d037ced06adfcdcf9f5639ddb0e3910b852b75a", - "a9654a6ced65349fcc74325364fdfa60ec2ba1bf" - ], - "64": [ - "d083ba0de59ae2b273ffb4a12be537287b736d12", - "e96847ee12ec0d9fcecc029e27ca0728b3dc5005" - ], - "65": [ - "8f342ee68ff87a53c83c170b5499760d1cbf7781", - "5a0b61ee7c635a5d310234393c06db135fd73ffa" - ], - "66": [ - "cd58a7664709121132d302c4c944e1e83aba1142", - "bf70641f9c4cc64cf6801ce1041387d6f3c3be78" - ], - "67": [ - "1e2b64933c0b357059af636a941c05ea23a1ff48", - "f0a5f8acb7db07eb89f4563f37ae0d5c3486b328" - ], - "68": [ - "01ef4141f901c61e4d22f6f495a8048b7584b21d", - "85c4fea55dd320b1eb147b2a4727ac53b1414682" - ], - "69": [ - "928e3da8c90e43167806c916aeb750338f61c503", - "6fd0a8f513b5cbd485141a83b3422cddf8fede21" - ], - "70": [ - "21a4e9b9ea21d21d5c47aa348c2050015768710e", - "e30b1c9c5ccec93bd502bf04e08b4bc3fbafd0f0" - ], - "71": [ - "416f5369f755b47b9c608994f6a4f0727b7b7611", - "7c340583333cd1c21246ed6f42a65d201484853b" - ], - "72": [ - "e2a0711fb5f66fb08faf1b99040f31d4fe2613b2", - "41260b398e4b9d7bfa0c45daa6f0bcdf4823c503" - ], - "73": [ - "c25f2fa59630ca2366c038f52b3c70f767443f83", - "a582f9ae55293e7268646a6168ad617041da54d5" - ], - "74": [ - "983a7aae587af979dc1067395a1c0c3fdb8b8e69", - "d2db0a3f4730e64fd09ea7374e3744625ec41c2f" - ], - "75": [ - "261d34f6095d7d3040435cd1e090e62a3cc66edd", - "da8e7923e3e8a3c2b6b467e5bf37336f084d7b14" - ], - "76": [ - "212b4584a57fcfee5850307550d664247217b3a3", - "9988fc4a10a5cf173a46a812adae17cf74ea631c" - ], - "77": [ - "1d8f74b076135476157ff7835fa9a8a9f1ea35cf", - "82bff09e7410c8efb6c892d7b52e2a18cb507f8a" - ], - "78": [ - "a32075361e4e53ed66208aa52308b4595f79e284", - "10eede19d015baf04d67943b0ea985e8b6296cd2" - ], - "79": [ - "fe702b54689072e43547e77b581330dd0753d345", - "eedb4eaca6440f268ec57d90efbbbb15b58fe289" - ], - "80": [ - "9beaeb15464722265dde330dc3ac450fbb4384ff", - "0bd134d5ec14e79fe66a3b5d1137043c7bf18d03" - ], - "81": [ - "07a9ec370c866439428209405ead6dfb9797c7bb", - "fe99788111850d89d3df02a09eb93e1ca8df49df" - ], - "82": [ - "4c4c03fc1b3e0567f81a7ad669df5027c9e0c1a0", - "83bb8f99ecef551bba6f0ae1c467d170493e3de6" - ], - "83": [ - "f1a3c698a5b59edaace1ceb766c83d402cabbf9c", - "7f4c63fac843f6c4f25d709f43fe1fa3adfc9586" - ], - "84": [ - "a79f2e51c5b6aca360f861091a350af99b0bb934", - "dacc4807876f28f4103251bc2bd0d40508b38675" - ], - "85": [ - "821fd52d76c1803afad49b6fbdad9394ef7d6968", - "6c2797a11d5faf5357519130a53ecffd90929a5e" - ], - "86": [ - "450d93351dbda27e9ad34f9bfd74d5e406284bbe", - "cccd070e4eac672b828a5e94af438f7b7ede462f" - ], - "87": [ - "068abc98937da60c395762cb1ff641f4a67ec35b", - "6f93f480d25296c3ee92075e3e525616a3889f50" - ], - "88": [ - "5ec53a4322d5dec580fb6b5c2da2ee7633eb9841", - "b0053b65c92792e6ebac6f0559b6f8bbc3c7e7b7" - ], - "89": [ - "251bff78ade1ebeca448485b811012c232e5db55", - "dc406e808f205848a1c6b05ed36dd254aa4b0591" - ], - "90": [ - "86e141d154fceef5b4a9515c51e0f71c4f3f66ed", - "1d4b6efda85e0b13750befe29fd40b1822d39e57" - ], - "91": [ - "8afb0c64e5722dbec16a3c781299f8249fab17fc", - "1d097b3c2d23e0597837c7afe958bc673106db26" - ], - "92": [ - "12cacc78995a227eb32b6bcf33ccbe91123451e6", - "bc83ff79c05126989afcdabee34215ffa527d62e" - ], - "93": [ - "8f6d5e57a62ecb248a3723d2431df16276e0eabe", - "dbc817de79a7ffa3877b124e3c6131204afda961" - ], - "94": [ - "3e964101b5df6361c3ae7e4e2459dda13490f5c9", - "f48a7721d6fb1966001ff237c866c6b0cefe1166" - ], - "95": [ - "1d7164e5f07ee0eca3846c21591ea0d873513a45", - "00d182d7fa7e42cda1b90267f63814563f1b803f" - ], - "96": [ - "9957f8fb66ce8f54b425c5e3026c37363364707b", - "3b01529b3aa1d17d3cfa8540bc35b5518f21ccd9" - ], - "97": [ - "24a1e9ea1c0a7b97cecfca7ad296754956ef9643", - "86aa2c945e736534974ca9c4f44bfea7c0801e14" - ], - "98": [ - "4707468a93335b734ddd330361de740d1dcf5d93", - "111005d87016120a270aaded10f261f6a330662d" - ], - "99": [ - "5d60238f3a74dbfccfa59630ea6aaf37793ac875", - "44a149d784cf55c8159eafeebc304e737f6e506b" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_035.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_035.json deleted file mode 100644 index 63d02cf7e..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_035.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "b7c2471bc8e2f59bdfaf03ab058c4a56953969d7", - "cca46311cd90b883895546a5eecb71b31ff7e6ed" - ], - "01": [ - "712fd713ba6f4f838809cc0f4a52252658db9a1d", - "25fcbb277e9797bc256626da1ad72bf8c9a60ecf" - ], - "02": [ - "4804ae6f57b6d70fde127e88f8e2459ac98441b0", - "67bfe4c112fbd05ef06efd92d8b8b17ba7f03dd7" - ], - "03": [ - "c6a7bbf0d81ac4787d4adfb0fdadc55683055c96", - "4f61b75446e55acfea210c60be095217b12eef86" - ], - "04": [ - "f96538aa40545f2a750761d8d811e2a6c862878a", - "7878c7368a8112c9d7aaf1a128ba752e11f19653" - ], - "05": [ - "6f74b5433ef29f733e80cc68d936289e08f1de63", - "57bb0b8673272e8ff63eb302b1191e34c322c53e" - ], - "06": [ - "2b1ab104a025e81a01f622a4b09d6228a2abcfdb", - "c08a38856df63e46b0cdddea277f0f6663c2996f" - ], - "07": [ - "805fe9c7b7aeb84fa21c31e987e8c6eeca7c4757", - "4c07070605446cd85aba29d25fe2542684d2c459" - ], - "08": [ - "24fc76908564417af0fb4f32f87bdd86df301ba4", - "fa535a8e649195652d19ec4b77cf5b991ec8eafc" - ], - "09": [ - "0aecc44b32163bd59bab9f90485eb5aa35ec5a12", - "f4264e7243acb7a21c54dff4f31ec6f0a0c82c46" - ], - "10": [ - "9294f846679fef59ee974d9b880d88cce1d0fc80", - "84d2bff73c67c57d516fbd87dfc4d0a494548fcb" - ], - "11": [ - "0cec12a797a4d106cb51b1242ca2543b7ed0fc97", - "614449dbb58730e5aa4233fc7779addad1457fa0" - ], - "12": [ - "70458299dbeef1f55e0bd3fe1169c5838a0aa157", - "9fa19417e12961363232999dd2023c652df9a5dd" - ], - "13": [ - "1557bc47d9d1936d128a07f8b067848aa6ebee5d", - "e7a1d1d3b0e8717860199016937db3f921d534d8" - ], - "14": [ - "43a564bedd90f85bbde80d4e61a9dfef0fc50e2c", - "7a6f748eb2e83fba914bce3f63f9df7c9cb753f9" - ], - "15": [ - "8edbb24ef02867d857f764a1ca2313bc8bf787b9", - "54224c59b53bf2457e51af900ba130527c283471" - ], - "16": [ - "3ad7ba882a66437d68facf8bbd3554ffb97b567a", - "394914d1076acad071e00ecad799a7bac1770d1f" - ], - "17": [ - "dfbaa3f824421876fcefb4bea35d7da62211f84b", - "2f4c67a9dadd36069c6c5cc9a401af787810ddc3" - ], - "18": [ - "e3c2d048f4610c42c88e9b0d3d8580e42558319b", - "e470dda6d76d6e7f1ceccfb817e2cb7c87fc8fe3" - ], - "19": [ - "4de13373ae4098a906df29c366bc2bd2ec8c54cf", - "7a343a557423dc5abd7bfb7903a207ae01133798" - ], - "20": [ - "031bc227f92ca62155361f613a3b8d6fe6c5fc9f", - "31efe627f5ff5ff6b20254de9536ecc8ae62e401" - ], - "21": [ - "b2df4f9c705f3a83e71a7a0addb2da5726af5e3f", - "baced53c63b6db27b248b68eaa640cc63b118819" - ], - "22": [ - "274f8dbc5dca857794795e9c9b3c010cf790d408", - "0e101aaa8fc0d69352d5c2dbc8ad4df0a1313f34" - ], - "23": [ - "8f72b4b96d14ffc642993f7f873d8d6f50ac253a", - "3ba285929fae607cb2c95eef40a8cebb0607b935" - ], - "24": [ - "9729c241ea45695d005d821411a6b528036c417a", - "03dfbbad5dc55f9df47df1a5a5434aed0b77ca81" - ], - "25": [ - "0b58eb56c311485b899e6ff13d022cd2a316282b", - "edd784a85ab205a019c62e058d9dea6b98954c5e" - ], - "26": [ - "82fefd75ff5b1fc75b4cc46bc6ef6b8708685fd8", - "915711f4e1cf151b68e3dd749270bdf3e9af4874" - ], - "27": [ - "dabb98759fa146b88127344479a8939f4b01e256", - "3b52a4e31918ff05e3849c3e817035fb61bd21db" - ], - "28": [ - "a245a2576f5fae6f08e38e688d33796bcaf8860c", - "53b40e1a476e4a279fb8c6446eb909daf405a69c" - ], - "29": [ - "4791d74069d7de6eb7da3a798c6156adc0b05679", - "686bc1c9f5e4ebf7bb0caccc626a55be881fb4ed" - ], - "30": [ - "31118fb36093417626687a3202ccd45a1e35a69c", - "f3982f83952b9249af00b5e8d48afd947aea70ee" - ], - "31": [ - "6405134e1065d83133f4b3a36ee8bd671915fbc3", - "a4c3eae695a595f06335d34f4c995e32db4d86fc" - ], - "32": [ - "fd2e4559190d81f8ed42b9e47aa3a74b12a43b42", - "02afa1029e921329a35209ef0c03297e53a2e9ad" - ], - "33": [ - "05afd1b9ad95cb8dfcdc1140074713b92c9fc914", - "9034793f92dcbbe200c3c7eb61b9b5f4643b8e2f" - ], - "34": [ - "73e694a7f573751a84d3487196f734d61f440b97", - "1bd03fc634e7c63a1363ad725411ba62124e7ffc" - ], - "35": [ - "c3e93d264d022ffafef6b5fa8237628155047034", - "bb48b3752260f0fc3592a5b5b7262899f25b9d37" - ], - "36": [ - "b9a3bb2534d7117b46d47847d87c8422c7d671ff", - "261fc56cbd11f417c6ee32ee422ca223377b1441" - ], - "37": [ - "760ff687e0a37addc2c0c9783c00e283c2ae7e76", - "6f2bbd2c6df61eede694eda890a3cf8c7a0337d1" - ], - "38": [ - "f6dfe1e88c1da6b5281676005a14d4ce62d6899b", - "bbf1b478dac182a30e626d6da9964691dd577d33" - ], - "39": [ - "7cb8b1cb4eccc4d488e68e61a12462c2febef832", - "f28adcc0ecdc1833202ba40446a6bd425c5c44dd" - ], - "40": [ - "47e4b04922e692ddc1b327b735cf7edb667cc378", - "98310907b8651d8b3bfa69307963b3ebbca8c71c" - ], - "41": [ - "4a58d2d5a7f8add5063ef72ae833c64c468ea502", - "152b37a6cc4ab52bd813592012c2f6a9e6149051" - ], - "42": [ - "6f61303ab48b044b667697133d844c27c3d5855a", - "7641c3a64adb2d3b6139e555dc33a6acff0f6700" - ], - "43": [ - "13458a4c4dee14566abcfb62ebdbbacc482e2cb0", - "40f4eecf1239574f4b1bf7203446440b9cf0dbe7" - ], - "44": [ - "be44414dd710fad029f03013569ac2f956a41931", - "dd23757f8244fec4bffce57382e8c6c9b28c763c" - ], - "45": [ - "a85a17e7fa71167ff1d9442367300bb2dae0f6d2", - "42f61842b0910bc10fa5389f55dae06bf054cec5" - ], - "46": [ - "05c3c0a3d6697c97a714600f2427bf3ca66bc1b1", - "ec86f271b964ed8ec2da6eda5415cdfb37d74632" - ], - "47": [ - "cb5c6f02af6b8a100e917dabebdcc7cfc9cb480f", - "b345a9aa73acfeb86586c77f23a6a4870197214d" - ], - "48": [ - "0147a32adfa7c2818ba025ddbb28babf1e7978f7", - "dbcf18c71f5a531c62696826aa4fc37d88fc9b8c" - ], - "49": [ - "b619f6a27aad806b6a53a361fe3b633faa523cba", - "6296b42e08fcef4d1417c2c49212a8e3552628bb" - ], - "50": [ - "a85928d199d3294a2fc83d0a0ef7eeb31d694fd0", - "cb25dc64f2d4c8c60ff0969bb88453ea5dfe5e38" - ], - "51": [ - "99b5a344bb45e892817dbfe5ba4ad74148e37040", - "083c2d125bc7aec0d22062ab7f1c8acb36a03de8" - ], - "52": [ - "ba942f61a66c00fbef9acdc59dcd0ef6c35105c7", - "59889b1a2271844ed2bb454da364f12d5e8804d4" - ], - "53": [ - "2abd2434283ce83ac428f29778f6f8295df88605", - "0f8432fdfbe904b139f609b2247cb9e5cb0b667e" - ], - "54": [ - "c8851aea2547f2116d4e484600b2fdcb5602f0e1", - "466759073b932529608533775b13869b3bab777a" - ], - "55": [ - "c84f2b20aff265721135001ef9a81aea4920b326", - "2b966c85cc41a23dc8e2080b458be2cdf8113a03" - ], - "56": [ - "d1ed032c9aeb4e79d60452ed10c605cc979f8b16", - "b5bddb12e9357929fab02eb0d89ba1ea74291b88" - ], - "57": [ - "f10a854ba90d8619893bcbf02829d48046582bf9", - "8dcb70a5d0b5f25c20fb11a4506513a6bf5b6df3" - ], - "58": [ - "3de2f7a7c1327dd19ecbaa4beb4876ac677c09a0", - "4972ea29401d76facb0fed661f086502e0eb3a73" - ], - "59": [ - "a95effbe06d6336eeb3b8b665f9a8fb61b196f9a", - "e89b858d6d330c30d4a48cec9f4c330760a0b512" - ], - "60": [ - "20b12166cd2bb0ae36973356b64b5c9cd32d6894", - "3c55297f0c0eb8e92304c4748463506f3115065e" - ], - "61": [ - "2101a571196ea2cfd448bf368c3e244ec2c21318", - "fa757cd9df1573df48f6d674b1c1b4006ca02d0f" - ], - "62": [ - "e95e6e804a28b59fb97cff395bdb2da41398d6db", - "e9236b2038b6bf9a13b3c42a16aef51a5b680d1b" - ], - "63": [ - "8a256b61aea69fe43f74a7198cc5fee168d063c6", - "40980207de4a0e57e5782db4932cb1aab50adf6e" - ], - "64": [ - "bc50c2c42e6f7c6326739f7974c1b04ba4d205c6", - "79343375e0bc60984102e08534bc4f0a411c67b4" - ], - "65": [ - "8065e2943fdcf513c9341ad51328572f8eb407a0", - "3bb5788b9ec5985e4b6955d9cee1fe41e5848c6d" - ], - "66": [ - "48c823395ffaa84c8b2e35572a5f3ffc2c91b67d", - "7ce11802c238ab99e4594e1d593a94d06f168962" - ], - "67": [ - "b53fa6ea1b37efbb88c385175dc5f4b29684c318", - "a01f4ae0342762bd6c4951fbecd1d511314ce625" - ], - "68": [ - "78ea97cb2846230c13acdf0eaef198bd7a6a3d6f", - "362b7db1f4fe8cbaca31fdbd0763768f56992a55" - ], - "69": [ - "b3c982239d5fa2c9956a70bce6d0629df3a349b5", - "771611e42deffcbcf304b8e76e63491e43677291" - ], - "70": [ - "61a599fa9fd1a2417b870a95d2c14d981d5d2aca", - "3810a1e0e034087dc94bb3696c826b56cdff4403" - ], - "71": [ - "94ffaf0a1126a1b887098824c9e52b1a2c7c9a0e", - "83b9833300739bcb186b17a52ae419fd1bfff8b1" - ], - "72": [ - "e9add4b10a5204ecc35a6910e0c4ad52e906d28b", - "29102eefb0ca858d3898f23c9e3aff0b6a498495" - ], - "73": [ - "5a6881771cec93d1c913dfa618827380aa62b46f", - "211200706a8c476ab3e3044a9dc3834c47503252" - ], - "74": [ - "60cc5eca94078fe0e54b4f2e2a015483bfb4f1f2", - "bcd12383539b2c7bce4bb713544d706ffd703f05" - ], - "75": [ - "66f5b10d3756dfaeeabf90d94dbada80c126cef1", - "75601c82813609d5be0b8e1876dd8d7d488fa63b" - ], - "76": [ - "3a58f34bbba4315809ebd9d298184bf42fb81bf2", - "c87e2d1103d39c190ab8b0ab855c767cb32774d5" - ], - "77": [ - "fafb755da04ad3ee5a5ec71ca159d12a22249d29", - "19d4b993fe6c746597a01c416a3898c1a8d2e1c1" - ], - "78": [ - "6e437d77a945428a6f86df986efe25f841f3d8a3", - "70898e4d2434c8d4233e0e6e046383e17f15729f" - ], - "79": [ - "dc5c5a11dd427331f5fcbd693a00860a36463c21", - "88a607a20504ec3daf7b0a6e98a1de2c7777347c" - ], - "80": [ - "f934ed89718391114217f00a67f26277604e886c", - "aeab9b7b92e441735e618e3b2ecc449f1141f271" - ], - "81": [ - "0e639f5ab6424dd1d4bea3e01ad4d0efcbc8fb4e", - "e62d86df9a78f4bce7383d465818e493d24decac" - ], - "82": [ - "a021333d4069bf82c2651a2c61695d9920396fad", - "f99af3a11f5ee845ffd5d740a46d0c5c70f7f36e" - ], - "83": [ - "131f8f5c0403a5dc3ae2e3cd57cf4fe3b530ecf7", - "f0442aa122a91c524ac0fdb763abd0266d80d417" - ], - "84": [ - "fc95c3428ccd496bad34b974c8262419416bf835", - "13def10d548567c72f754d34963c56c40d79a6e6" - ], - "85": [ - "a8e5269cae4bb71b6ca7809b8643792a31afd851", - "21d3ab7128ef047062ed3aee702cc8c73fbd4e29" - ], - "86": [ - "d92e90ff54a78989eedd4125fc4a70b8d951c815", - "fb3c4e0972e241b4220927a851f926d93a0c8e90" - ], - "87": [ - "b934ce6d0c390764a9bcd5c3c7e80ff120eac1ce", - "72f70083a02ae84683f4f9b229ecceaba76f9e49" - ], - "88": [ - "2a41496f79a08b2df704744f2da9724fb8cf0b15", - "d69e3c15cba8bc8bd30e554b54100da0d577b04e" - ], - "89": [ - "182212ece1310d5a01c6f46bd3a57429b7c54d18", - "437066366687d5f9c5642a14ce62ca5faa797ffa" - ], - "90": [ - "6767d75a0760db65945969a97c3382595f9387d4", - "7e34e3853fdf6aa9b423ff76c565b7d3ed0d4407" - ], - "91": [ - "2bffd719ec6926e1c7e6c15e49c6db6350a07922", - "0ef8d3bd2c073df399decf61e7a583fbadb86bd1" - ], - "92": [ - "249f7d9eade9f55acd413043b0d6af55a521938a", - "a3dac0483fa30c755f6f654a7209c9732dc45ba1" - ], - "93": [ - "b374b39ae61decad2cdfa9717a7e4d87fe1f63f7", - "0265a30b3ef3d96fc1a2d79be7b332cc8238ed33" - ], - "94": [ - "feaaf84db19f8e7060c9d6fb8857dd7e30d2840c", - "3bd3292c066df35d4b50df067f20576675c50dec" - ], - "95": [ - "8e0739c6fab0da1ec45db38de67bed35eb44653a", - "02e7ee787bdb7261577167d0619dccfa54043593" - ], - "96": [ - "f0084ea06b4d70b25008025f63dda0e1128fe625", - "d5bc264cb0f0600ebfdb4c667aea37628a9773fd" - ], - "97": [ - "21a93c63a9f1eb6c70a2e028731fe78280d3d0cf", - "d23ef7968abef8273aad3f780694def74068e1da" - ], - "98": [ - "8a7de17f28fe74fe773f9b252a16c879faf2e956", - "b025422c586495f18c459c9ae682619fd9496653" - ], - "99": [ - "99246aabf312519585302c7a428cce2979dc6fe7", - "4ed32a3e3cb692e918ab17dde85d385c367ffd69" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_040.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_040.json deleted file mode 100644 index 181f138fe..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_040.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "04c9bdd4fc595ba2b1c57d3c8db38e1b4939895b", - "c80b3dc106c2a7a7590fbf7deac39f57ebf904c0" - ], - "01": [ - "6783a645fb15c8e2424fefe8b15985b41d8c669b", - "e28fe39c886c8ca3f7cebfa7d09c1e5677483238" - ], - "02": [ - "803ce87c0f8793d71779dd92c2ee67403335875e", - "fa49bd7b3c129e4091c5ef10b982496d14fbac0d" - ], - "03": [ - "767968ff35654a70f19ed30bb282f43651f79ff6", - "0c23ec4b74b299e50ce804f58f028adb9ac50928" - ], - "04": [ - "293fde2c4033de7ee02eb024053480706859b986", - "406fb6517bfde369a7b72a16b530f9f1a6c9083f" - ], - "05": [ - "80bef1fc2adaaa74377db8d34372f2d06193f28a", - "24f1d4500b10f03b709a0ef071e3413f2b170989" - ], - "06": [ - "34f2da6f5f7827e2eaf1d5cf294fd0c65e376f22", - "54ce6751aceb4e64f682911b516035fb3365e072" - ], - "07": [ - "e22ffe73c78ce215d1078ace23a15f754675335e", - "e771e1dd9e2fee89690cc646bbfe986206cdc1e2" - ], - "08": [ - "4f9e41de1b1e3bd88f367d239bb9d604b11b448a", - "4e29c962ea3d3f8e106e5cd485fd5fce11686145" - ], - "09": [ - "2ee8460c5155daac1c3dd17a28a40b8de8dfcbe9", - "0fb5ca0b69e6d01f706b38c9ba7e5dfbaa4e15ff" - ], - "10": [ - "2d7c3c86275efd376848088ca57200d897c9b3f8", - "24d421af2c789334f921b8bf74644c2d11b858df" - ], - "11": [ - "1584016055e8555d2b49cd2a01bd33c75beb102a", - "ae286094ed1a74b8ac2a7093a876d5b47c8b6c9d" - ], - "12": [ - "3219b822b7ef9188f5f5e604289c685233202a21", - "df0689a4363236d95bfd49e862e47edd15a3725a" - ], - "13": [ - "ca266a2aa397c14fa8d19d58836fa2c754464de0", - "4648686b66e30e25e43490525d57f572c1bfca80" - ], - "14": [ - "1c206f32678c69c0e5b1b287a7b79b3e25854ed9", - "29c2073b0deee5ec73c1c59b3020c0d778870bea" - ], - "15": [ - "b793552e61ba6395711973a1cfe8f170a2522fa2", - "40c2746dc4a53e51b271446ff9982c547973dc7c" - ], - "16": [ - "829921e13e262e20eb00ce9b64a63c3bd4922452", - "9d08a0c9bafc041a42ecd31262b3435910fe9467" - ], - "17": [ - "4c1fbd4c446e2adfd89f6ce06053306f7992bcb1", - "9ef8204b0ac0ffc44cc92b39970d76447477815d" - ], - "18": [ - "599a0b1070cd08b17952a77a019c1fef22f87a1d", - "66e2f4cabf0919beb8f6d89422575beb34d4a5cb" - ], - "19": [ - "0df2a59153a5361fc128fc0753a8624b8ed89b30", - "75a5bbc91f50216a191c8f04ae83793289b0ce71" - ], - "20": [ - "ab8103730e56c31d839dc2594d19734a1989da1b", - "2d7fd52a0fadb248b8eea728bad3e76f3a6b13c0" - ], - "21": [ - "b8225c06ebc637b1f68856c984b9c87050115bed", - "243740dfbec1b3f172106d5d2f75878aa3334bbb" - ], - "22": [ - "ebe4a6f542d9dd7b0d0059886e2a0397f3e03992", - "73a08d62e7e0e8bd7995f613f8647c11772e908a" - ], - "23": [ - "14d52d5e594dededb96f513b3a02bda94cba33ce", - "9526bc03a97f5baf42bd7ce24557183dfe471974" - ], - "24": [ - "fec895eb65487ab8bea8c2db1ed18c4637908af3", - "42d4764c7b81ef34df75b985fe424cb059c26e6d" - ], - "25": [ - "f37ee4d07f09f9912247f07c7664e59f5541932f", - "50ab7804dd568445721ca9c059adb00657003d73" - ], - "26": [ - "e170346ae9993dbf647d96b57ad3324cca1315bc", - "4cfa605726ff3ecdb3ff787270f0042e578d97a7" - ], - "27": [ - "07f6d0382b65af5863524819f3100b352f415770", - "fb1f79633e498897ce1e91d12c27df9cf87dbca4" - ], - "28": [ - "0fd4307f5efedd8d33d7a79eee631e944e44298d", - "a776941e774feeafc085aee5c9d51422c14b256a" - ], - "29": [ - "a013a4d2b55d32db6190c5f19a45da651214f4f3", - "3ec7e307c6afe82bc889969cd6f2b1ea4f3cd9d2" - ], - "30": [ - "c313023d530eae5f4bb8ebe5ae589a4c2ac13c95", - "8ea830174ce81c75d7b66ea8df2bd3ce2cac15d2" - ], - "31": [ - "e3f622013f5f4da675eba0155099c0e86d7b39d1", - "3176ac1e5176428e4ba39c784dae009b37053ce2" - ], - "32": [ - "04ce5c08acf653bc42991f82f9971ff633d6b10e", - "097d6535bb4a92360e75fa64da3727c4fc50d502" - ], - "33": [ - "4952e7bd815875b00a77266d49469adc45554903", - "b8b57e04d791544442bd64f63b227c28d652c8b4" - ], - "34": [ - "65637937649a127d20eac281ee73ddf2740233ce", - "21a7f55304e0bde3009c426c281d010172aab93e" - ], - "35": [ - "9730e96302a0d1641bf0d370945097a6fa05dc6c", - "54c1d7851314f5fdd0d78e49dd1c259a1a4a2d8e" - ], - "36": [ - "d3f5b0a2496150ff9f75af2f754396674250e75f", - "bcbd47b91ba9f94a5a1cb68e50899bae0e16ca31" - ], - "37": [ - "a653de97418612c38add58961ecc724b686dfd74", - "819f5b276f3287fe20ab22dbe13e7b8c8a6ea261" - ], - "38": [ - "16be36c7ecdaf6a2b8fa380006c938b2441fdb7c", - "0ff9ce3fdbebed7f42a050d34a11f50e701dbaac" - ], - "39": [ - "3aebe28a49153325643cf1edde65358ee09d9e51", - "347554787c1db2624f08a6c7a8a046bdd5b7ae7d" - ], - "40": [ - "7e0b697c1346fc54f7d807fc106afa7b3605cc7f", - "66b7492c991949e90034a6a3300beb2339322cc1" - ], - "41": [ - "1e5f3f4efa35c654ae5bc4e1d173be1b22e538c0", - "5b9e03184fd2c7dc317d5e81ba13abc969ab6c0f" - ], - "42": [ - "02efdccc52f5c5a0de831f0528fcceff3224fbbf", - "17543f881fa7152956f8fa56c41db4c2cb62f16a" - ], - "43": [ - "f6f53f58a2cc3cf6baddbfc6bb82b442d60130ef", - "9b60c9331cd143c1a6db1e14e225b6bb49ae2935" - ], - "44": [ - "8ab78e08592b5b4fb9edb3e6e0e0dad3b7a75f12", - "970c388ddafdb7aad1ffa57967f615726547c921" - ], - "45": [ - "a799ef46aea266a7e1351fc943a229359ae00ee0", - "850f1dc3df1ee3e02dc9a4a79c72382748408e3e" - ], - "46": [ - "84554825fd09b11a2b6e6d2a406aacdaabdf0fe2", - "0a384708f8290233a224b0e3dda39fd6ea926b2d" - ], - "47": [ - "af84ab1c1cecc758a9ad20e60ba21ca94ac2e4ad", - "2043b4420c43fcfd45abe8fd863ddd5acebce66f" - ], - "48": [ - "287e64496d99a99d50b99c06cf9ca5d81d709210", - "f32befd16cd2450084f5917e0bb3a91711ad0835" - ], - "49": [ - "a9f61795cacb7f200be4df55b492d725d0d6503b", - "ec80390309132d6796b61c3c622615d88aca6425" - ], - "50": [ - "93fa98dc1c004a8ba6a174818489570e34e14781", - "313389d169b0ec7aa3671e0a285b1936b4cbcecc" - ], - "51": [ - "b5c8a131af31380d9564b8efa10a3b11b39924c3", - "1552541dd6eba1d391f9c1cea0572ea66bed8a01" - ], - "52": [ - "602e85b5d659f55d0c594035325f5142de25aa63", - "9de766738b85a59b0634d527b3feff1539673821" - ], - "53": [ - "b7bcd387114c0148cec0a8731deaccabdb2dd986", - "463cbcfe5abe539288d24320e7d67f9845017036" - ], - "54": [ - "5b418c443155f362c297f3317711e29091fc1c4c", - "8ccf807b9da01a286e4929e25c026d287574f148" - ], - "55": [ - "85f852d4730884bc8f6db1ce18fa47acf5f07e57", - "7eca9bea75d6331f1275547231cb636b2f1fd759" - ], - "56": [ - "84be4bfa73b5a2f8d80bc03addbf5598e528626b", - "d9ff857b65d5b02f9053e1fa91e0aec1272f0916" - ], - "57": [ - "dd6bb894513dca8ca96139bd4d3839b62d3985c0", - "9552963be0e7a95655bce9f64527896edf018bfe" - ], - "58": [ - "9d4fed6ccf81db16b146471f131f14ccfc9faa13", - "57008193be93185c35e9329a171768c46fb7c572" - ], - "59": [ - "1d716956355fc34197f7823bda4e2792da663ec0", - "cdfbc34e64fd808487c0ed843a96734ca57a4501" - ], - "60": [ - "d83c755ee8afd756883d0c58db66c336446473a2", - "57536043f66327a73ced660eb8acec762bf3b7f1" - ], - "61": [ - "aa65cc2843045e7f846b4f5d3654021fdc69a26a", - "cdf6ce37b870f411ca25a153729f4ff37da41c1c" - ], - "62": [ - "24ef648f50222723261bbdeeee18b9e3ce224392", - "792707d3568e0ec47337955f24d3be7abe853fc8" - ], - "63": [ - "9433e76c27806d3d3f0a9f666a7482ea85aa565c", - "b4358aea61092cf6c823570f0bd1d4c6547a7286" - ], - "64": [ - "22fa6b0cb755199d04fc051002996f13a5f627be", - "7ffde0325a6f0cec9368c507dee3b1a5b6cc8ddd" - ], - "65": [ - "2b8c0fdaf514943a3eab173d06f67d64b0979be6", - "605837c34dd08e4c1a1684ee1e32a70f97531ee7" - ], - "66": [ - "49adb30a5365519ead87ef28cd8af2ab5002c23b", - "23b796f8ec3d12fc717e3a694fccc49f2b5e6053" - ], - "67": [ - "d4fde33f7c06f8d358e4c340fbaa254c2e3c1b60", - "c5f8429e0dfcbe861f42cf544cd904b69206ba41" - ], - "68": [ - "0a3b7805242280149ff614e0654c225b2d800144", - "96e823453b4606bfe4243ca04fc97368d346c9b6" - ], - "69": [ - "00177cbe2b39c87ea2fbd0e9aee6b4284f80f50c", - "b8ad4876796f2a96db6359c6379462d0a4465f61" - ], - "70": [ - "7e46798b164c5d9332cb335f92af995d7e628f25", - "a5837f8c74e77ebf17a260b110e22c8b854ed251" - ], - "71": [ - "0479d10016e9f28ac75919f84e259347bf762d02", - "e5491bf1595deebb83bb8bd3642bd264a3ea1fd9" - ], - "72": [ - "d649f46d0d1d92722f9a0af0892a2b894e7e849b", - "4cb71bdb2413e7fea0bcc6f692793d2564b5225b" - ], - "73": [ - "fdbc47c9c456d020ea246b97feeeb77d9a3f210e", - "0f9ad46ba6910e081e14a3c39a4b4060cfc33421" - ], - "74": [ - "64971211574e8e5c769dedbe5ed5df797a1c686b", - "d0911ea2555d830b1606d070edada3da06005013" - ], - "75": [ - "c6a90f4f41e05021be15cd44f5d19ca364b76d92", - "81d7f3cd45664074ce6a1446b9aaf6b121cf5ca1" - ], - "76": [ - "8f8272039fbfbdb28e8ee5cb811fb5b18d10528c", - "5648f9badf882db4b3a75977805f8c4accdf6a30" - ], - "77": [ - "e41c179611c186edfeedb2142a19df5077a17812", - "992f83e211deccfb0c3723620d1d9f6ed1a4f684" - ], - "78": [ - "c7c9652b66e494afee0906897cfbf9aea36d1d4f", - "57ba9912bb02e13a95a08d8956443525dfe455e6" - ], - "79": [ - "95510a36f67ef4d9e47453411b3daefa0fcc3a11", - "919a98712e192d7f00f87b5358f0ffe879b97981" - ], - "80": [ - "0e1b71598b009542255e2058dba637a5e7eeaf54", - "857c167c884239161fa571afec0c6266977783dd" - ], - "81": [ - "b38d24b47a8868f85a858cbbfb153ab32f756204", - "317024cba857c15e7da895aadc8f731c5926c99d" - ], - "82": [ - "de2f7106a88a120637a248a03e8a7463305bb928", - "e1a4770647f655594753088e857ac2152c7fd35f" - ], - "83": [ - "ee3b34de756b58755edbc90d234b1ea084a75988", - "168a83ef6d1576d87e1ec53ab85bcfddfc00f69c" - ], - "84": [ - "5b30d60d8d337b514443b7e31b371ac32fe359c9", - "43523b24a057e243891ae4d62d088c37d35e8e93" - ], - "85": [ - "725cce128472cb08b9362aa4f7301cc604e6b1cf", - "5092e0c0ae0abd49adf4e82bf79f6f0a8ad683f6" - ], - "86": [ - "2a77625233b0abafbffd61957c98fed4857d0e3f", - "38daf4c7cf1683affd52303e60d17ebfc11d3d73" - ], - "87": [ - "aa02cb3e69bef0a28e7b3f0668be763b9238256e", - "fdf18596ece29fb5927b3dd471c3734a34c6ca87" - ], - "88": [ - "f63d10cd975c7516097105c6e22216972f96820e", - "3035f4cea34f3547bca3a48d4e99d3bd6022ce02" - ], - "89": [ - "59bb002ee6c3b8178be2a9b85275acf14374d98c", - "89d3a0debccc125f944a51f03f9d7fda941d8711" - ], - "90": [ - "3179509f478250580000be07663c7aa7bb320c42", - "d27d8dd827f62390a16075d3d0626a2b534941b5" - ], - "91": [ - "143524aad2a286ef15705a71a682197521d9074b", - "79b72fd8edd543ecbaa8e2a1b4018f97a1973f2b" - ], - "92": [ - "6a66d9472b85bad88c9176d1425dd281e3e86668", - "230321bffb354374b0894babbd58194a9e3ce838" - ], - "93": [ - "f808805743e32857842239ab78b78b84baab8efd", - "7e37c1891c601020887fd5be35da13de53ed3720" - ], - "94": [ - "74aa3a0594ab7790d3e39f3ec5afdd1bfcd3aa23", - "927b6ba82c3095b6714d4b59dfc752247aab4c40" - ], - "95": [ - "a0ceebacf2ab49b37067311068882ea6758f8eb0", - "4bc42d421538f7a1dd394722c569da30bc36d614" - ], - "96": [ - "8dad6024795ecf4ff7831277ba36866d00d10eb5", - "a71ba1ac941c36bc9d69f4c28483d7fb79cb24c8" - ], - "97": [ - "643da57d47db9a898d07c97e07b5336c6fbeef34", - "081d2db6c0d0016a29e5b1724710fbdf210f0520" - ], - "98": [ - "d0c09c0a59d80d1162325883d10386877ef6c74e", - "3155bcf89ac424752248a10169ad709569b58e37" - ], - "99": [ - "d2de98340002db23ea4977d9f1e3b6b4f23f2fbf", - "4c695d93cee447f8e9567e42348aa14437d79901" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_045.json b/xain_fl/datasets/hashes/fashion-mnist-100p-b1_045.json deleted file mode 100644 index 22e478c45..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-b1_045.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "5debb0c10d4c1d7d7910ea2414b91d1f926b5cde", - "42c81e6c411bc5b3bfd6d3ea8bb2cc7f85c9bef8" - ], - "01": [ - "a243c106cea8ee152433953e05142499b2dd2cf9", - "affb0c582bb80d84fa33930596cb6463873f81a1" - ], - "02": [ - "fbf2321814239a5d315f93c0821f6a0c44c079bb", - "688321f4e55fa9098e8c59751e68435258f15696" - ], - "03": [ - "84d7cc2977c3701bcef99ac0833fc523588da8ec", - "0325be3d55325a7407b5c27b348fcb817e242aaa" - ], - "04": [ - "de89f492c6e92c5b1de46641cd220385a0080cba", - "90506ae960de9a75b36ae1a6f448d73e83b5a095" - ], - "05": [ - "27fbf11fa3b48346522b076104dc250bf8c29ee6", - "b148e6716327bd4113dbdf2458df6bc2d9163d28" - ], - "06": [ - "09b8cf987be2c8785777d4d6cf41b22bde020610", - "a333978cdff2573667b36ff369b4a09c6653a89e" - ], - "07": [ - "8a7fa8a143e256bc053e648e29da3585a27b2481", - "e514915106aae856054521d98e10d4927c18648a" - ], - "08": [ - "048d3b5a5fcb035c8b3824ef35c23098dc13a657", - "959ec4ef9bb96b4e1d3d94fab1d2ad3231c1322f" - ], - "09": [ - "7a52c6bbf8e8175ce53abba626659a0924190dfe", - "1b0f99f38066e512a3437a6782559cbef11f9877" - ], - "10": [ - "595545e63e65ecda4c0a87744f6d00b028255f5d", - "4ea259eb09eb3e2fe34406289672c7b26d6eb925" - ], - "11": [ - "24dce96fe30de64b07808998e148d688838365c6", - "1cb2b76775db491dbcf3e819b7c6bfc5ab638c49" - ], - "12": [ - "db314df09a85ab758f49e5fb828d4258b5ca86ee", - "4e93707132f485ff6da314ce2d6b1580afe63eda" - ], - "13": [ - "ffeb32b158c766b6301b25de105d2ac6fcf8e79e", - "a89f9e303cc3360dca88f79aa913eb693d5da579" - ], - "14": [ - "61a39f0c1a227d4896d15d8d2f9f9eba51f42a69", - "c0ba96a5e38997972890fe1d13818e1806766a0d" - ], - "15": [ - "3255fb5ac2e60a6811b6a3e86c95aee888a877f4", - "74ab4c9c080674c7855fef3c0cf623c13c8c1d42" - ], - "16": [ - "d94c82a0ba651d77b1136b578b5b6ec4b9d98c04", - "4adacb21d797724e43cd5b58d20954c2f99f4727" - ], - "17": [ - "56e48e66864bfd59dd331044547ff1f74cf78070", - "d0ea8360e23fd8f70c8d0feeed00c094682ba9d5" - ], - "18": [ - "ef11b82fea870628a7bb5158eda1a46f7330223b", - "8b3599045080d92622ae0b9d98bc0b02cddce883" - ], - "19": [ - "36fc203a7b85e83c9e5ee52491ddef03380ad42d", - "3c1ada337255ca9a5205076c29eb72ad2675610b" - ], - "20": [ - "9d10a98cf40f1d58e173b80c8aa2850c69592bc0", - "434a41435c6d4a319a9c7373d7b3fc7cc4147c4a" - ], - "21": [ - "789a00094dad45dae152d07e054e9d8ca3870309", - "04edc3b8d093df551f2ede1655fde64a54f3b69a" - ], - "22": [ - "376689cd3e5378da57d94b284b37a7d55e02b3cb", - "312ddf8ada0190d4901e209a56210fb76609cd63" - ], - "23": [ - "9d1dff73f84803b8b540de4641d14ac916c9660e", - "e27d4f77d0f13235b3f1d22ad2078d5bb3fbcb24" - ], - "24": [ - "1b09050b8d6d581077f29a300e1759ada106670a", - "4593be9b2b185fdd9360017a8c40e42a759c1506" - ], - "25": [ - "0d69be2e27bce05d88579233d1827ae1ab07d104", - "7fd1ca74c5886614429c2d98db7ef9e5bd322a2c" - ], - "26": [ - "02a80617363a9b55d7f660fc013c08994ff00855", - "8e561638eeb85eebc8df848c433037f12fa3f30b" - ], - "27": [ - "1292408881862999fe0b00a8839776678344d6f0", - "f6bb533a066ec1c9a58cd18832f51a51ad3ffcbf" - ], - "28": [ - "d220581cbbad8ef679ace9626a22875d812cad68", - "bc2a4ad546d1ecf689dc7b929a216096ebb48a0b" - ], - "29": [ - "95e0c0e841885bc76fde84b3d00886d998e4376b", - "20dbfd8b134c496a524aca87ad8725c78f157d53" - ], - "30": [ - "ab1110631cf7050266e10a2e48d64a7124777b32", - "8d5ce915988c7dfeaa728f296de8235a585f18e1" - ], - "31": [ - "b7f33355905845979e1e02067fb639f8ac9c9ccd", - "ac3ce59f8c29c93676d44ab47e6e6141e636c915" - ], - "32": [ - "b62f354891539b19353d635d9fdb21c19408680d", - "717a26c729fe58607a0d800ececb79ff7afc6e73" - ], - "33": [ - "b187b2c06befc5e807e8c8d647593d86cf87e3e5", - "a1229b391b567a1b936ebf52ca9bf68f60e3ef84" - ], - "34": [ - "1c640bac2bb3410ee19658b142dfd9ed0aabd6a9", - "1b9fb5a683d79d8134dbb32b7b734a8a5522d9d9" - ], - "35": [ - "c6daae1817c221d0ac58ab32a90f52b82bbb4f4d", - "2e596460cd4b5b60ac8b68c48881a72340b2865a" - ], - "36": [ - "3282594f66a3175d9d0fb06e2d505ad9ad17fb77", - "6d5b8cd37245b32cb1692bfa5e7f382ce87599d7" - ], - "37": [ - "665d2338453e1bba6670bffeac28fea85517f4c0", - "5641b0af305b10f4c436028ab8a12898b094391c" - ], - "38": [ - "e26f67cfe3fc7e255935a2d49d7ed15b68ef6766", - "63f50495c534f89106af97ca44a768431b0b6c54" - ], - "39": [ - "426c2ea2f04abced20ce9b28d2adaef40c744b30", - "f9d98af661b16a6652f380953c27b9af024647d5" - ], - "40": [ - "92e449c5e3cad24be09b6e00c55df3214c4a3ec5", - "043b61dc244a3c5ea4cea039740bbece3f178945" - ], - "41": [ - "04f17b8cd3082d1fdfc4cc0455acc228a7651221", - "607f5ff25f2831fdc0e8b82e874b373ef398fd9f" - ], - "42": [ - "bd8556867fc12e39146fc69525686d0304885c0e", - "1b4a40f179cbed1388915a785b36be808b5e930f" - ], - "43": [ - "99ba65a0c335b4f5e89496eded1d6f57735b02bd", - "873ff09dbd49f05897e8a40f8998ffe1b4c5cdc9" - ], - "44": [ - "b6df6aebf8d0d83883fd55a63b3c0d064c3c1b11", - "21c6bfc305b14dc68d1514eab929057bb0b5b2f5" - ], - "45": [ - "9981877b21e25653d6571ad304640782c191a4b0", - "ec1e35b8877e8023a4ada0e5b23943fa6db7e4ed" - ], - "46": [ - "e6dd1535cd6ac788204d4ef0b5d73fcfd11d094f", - "9f11ad6b58662c7d03ad8de917fc6bc30f3e8b97" - ], - "47": [ - "1d2f86600a500fc60029aabae1b36f5e86afdbdb", - "1db4c20c945488febac3d8d998ce50a1b03efeba" - ], - "48": [ - "c7bc4963334ca9dfc34d69383c450cf8adea760a", - "4249c081519a4e1284cef21d8c08f95989605665" - ], - "49": [ - "671df0bc78d529731e83d66aff0977a14fc82608", - "279477893af206d7e5348163ba03ddb748773fe3" - ], - "50": [ - "309b50549c1d5cd9fa4c06c7927b127d34728a53", - "ada5e910f9fdc4d326a838f7da93cb83bf77154c" - ], - "51": [ - "a6680e77b2e3c21b7f494a1d0697418bb40f796f", - "fd7250728e292fc2c96165cf807b251dae5e9c34" - ], - "52": [ - "d208a8fca0c04958a0c1e13e42204ab1d88fa01d", - "d9683941880fa79288aa6f01a5e693ac44df3f84" - ], - "53": [ - "4c131048177b4a63348d5c890bc56dbdbeadbf24", - "5487a9acbbe587f4e7d9480bf6194f31397d7ded" - ], - "54": [ - "65e85869d9bc65ae98d43f15c0c105cbedf92daa", - "a5bcde1642cd15478e96d69ecab6afea2611f725" - ], - "55": [ - "cfd8d6c453bb92ddd80c8dadc7b3889ddccf825e", - "cbfa415827823d660db77b9cb3839cfa293e7a34" - ], - "56": [ - "ac37bc42238425c8ff26b005f54ea456f8dcc447", - "0cba437a8ae6335a3e4cf7f39ce95c7fac73442f" - ], - "57": [ - "1214220dc38516738180c09a71776bb01c78736b", - "2c8734ceb5d3b70f09ceb4acd1db0c1814815c9b" - ], - "58": [ - "2f275abdbd1a086787f5e058f34e9f5f67399b43", - "72180749017adfdf87d9ebba7a6559da388f7d58" - ], - "59": [ - "9aded72d0788cf7bad227164d8cbafb8ece4d082", - "041eefe0c3349b1664ae20977ad8311968f2ead9" - ], - "60": [ - "106000e31e43fb3180cc0a3e42496e6d043af8a1", - "cab2dc7452c58c8a796daaada24876f59613c249" - ], - "61": [ - "8b5a4fac0b2551bb0336fa3e5e50cc9d4a4cb297", - "aa6907a6b1212ee8d2b0b726e46755e3cf0c0fe4" - ], - "62": [ - "96ffa487107924546800c67870a73320d5497705", - "8ccc9f26e6a11715ce3473077431d2b9a7e482cd" - ], - "63": [ - "2c634b54d6bc907046c27e4552f26c52e57e6161", - "4169dee73d406f394a0d663fd0d89944b0930ac3" - ], - "64": [ - "ca5287f0279d734f3142ec0834aad032b34d6193", - "d8089d13052211a51e4324b10b0dfec1d961c636" - ], - "65": [ - "554adc11db2157ef1325795a12aaaac0882acfd3", - "b2c0d7e26ea851e0a0bf4928a7efe5f5b3ff6013" - ], - "66": [ - "0bb9e73282b993e90b4aec96f96520ee3abeaa45", - "9f8647d0a0b3c66c9418da3135bc560e62c0c6e3" - ], - "67": [ - "50353dc5449588170656b42a509bf579d47ef778", - "af0bc192850e8692a8a4566b18c5cd2ca7db6677" - ], - "68": [ - "f8c71201f3d3623fc0284b358e59280d9abdce94", - "1c9e16b6a2cee9ef164afde8f2a99a3db60bd313" - ], - "69": [ - "b09378e115744a75962805a855c6a34e9ea65c6c", - "129d313c68908485da3c69a7b872b60a34f4778c" - ], - "70": [ - "eab1748e11df8bbbcb89a1f271e96238331b2dd8", - "2398f8f3138c2ef9b0f18a063a040a6dc350e868" - ], - "71": [ - "9cd823fd173e92a1e0e368989cc677db573a7224", - "c73b2c24140fa348887b900f8640a73547f1f87c" - ], - "72": [ - "eec434081955e9551fc89bbbc64f705b132cf44e", - "0d5bc82b0db5422480fbd07287ab1c1eee6d7645" - ], - "73": [ - "f00ceee36b1fa8d1c0a4b946a83f27048d69efc0", - "5525ab7061fcb968ed4ba51c8b2548b220618cb5" - ], - "74": [ - "c7f93cabe1b12ba1d2f62d6a5a9943313982f8ee", - "61c29dbc5268d35a90b50ab5d2301522afd9072b" - ], - "75": [ - "502fe19710d162e6c3a1b0b56820d3f970826a3d", - "70f3bff2a49d4a78aad768d86bbe2f34e838a6c5" - ], - "76": [ - "d0a302adbae345c669bb32bd7177328f524894cf", - "3754445f9deb07cb0ecb2435c7465bc84e171925" - ], - "77": [ - "a4547811358220be08a0f707ffe0d1553e3e09ce", - "743cf40ad6dd9770dd7f23e0f981b20e5e1fff07" - ], - "78": [ - "13d2ab9b2c56ff637f60b2c8cb6dc2cb0e954c58", - "bbcd3b8e1261813c503e9a3468b4a8b88d1e938b" - ], - "79": [ - "386bfbda015df5b8368b9e3e4a61d34ff2e0a4ac", - "699aaf7b788bd20c5788b2ef63e0dd81fb02c8b1" - ], - "80": [ - "1535221f02cfb4a68481143397164ce06a2f1b70", - "90036774deb2cdf6b5cd18ed571141f00b3c6987" - ], - "81": [ - "4b1622331f6b50bbbd362ae2d3d8f05a2577306f", - "804cb90493af0138b898b2f1d95471f5b358be99" - ], - "82": [ - "493523bec710012190c429a7e32957aa68e9e0d0", - "a93e86279f9c4386bc4fad6ceaab55b873eab548" - ], - "83": [ - "939e16f77ba0696564fd017453ced576853bb378", - "1a6d82e84b67fc5fd408ae2d6846c87064f33169" - ], - "84": [ - "fc45d4f1ee46b4877220239a314ab5a46ce160a4", - "40cb6ca453b5cbfeeacc262035653935afae4382" - ], - "85": [ - "20d5fdd79d7a8031095aa54a2a51d83ab7fd570f", - "79936fe91ba939711ef88a24a9af0b518f0360ac" - ], - "86": [ - "e22f5a7f2cd4d9aef249b094dd79d37d7cd08186", - "fc3ed8f22890fafd6b56fca7009fa56ef1989be9" - ], - "87": [ - "407fd049b902d627c5b542451868d04c4e1e89b8", - "c68bb7751b79b989896105816abb3c80625ed89d" - ], - "88": [ - "0c73ceaadc2eea3d0099d6f136cc74867cfbe251", - "135cd5e9552ecbb59c84bd44f312998b175139fd" - ], - "89": [ - "112f972ee2e32a1b7c85d3af75884621e249a037", - "16d32844660dbe6e5e6bae3648d53bcfa1544bbe" - ], - "90": [ - "441a704ee80fc2352caced3f4fe987dd7bcc63ef", - "a1d5d68d06254fc204c7be8c6263204c89058713" - ], - "91": [ - "9ad6f9eaa8c4dee94242bc0a99b0977a181e2517", - "46a6706895b3472e041a2c9044ddc6499ead4d90" - ], - "92": [ - "f0a0c5b0474c287e70e72aad4e0165d0e0b7c015", - "63904a2763cab7a529c8331ae02ad68bf25b2b05" - ], - "93": [ - "12b2387efc52638f8e3be216780782e3e5c38cd5", - "53e8161979dc741b1952630e9ea19484f14ebd31" - ], - "94": [ - "4df2616e73dd7f8012fe9c7d6bd9b54f2ce7e5fc", - "ad781acde1b44c26fa963996cd5a9602ae684cff" - ], - "95": [ - "e89b0a56b545296a34de82c37b797513ed95ca41", - "866ef13e9c322c4b3e7b97fe7fd1216174a354af" - ], - "96": [ - "305b6bc7fb0ba1b57374dc562338685a59cfae44", - "0f7b240b15c521ade8f8e5648a26cea339525e22" - ], - "97": [ - "05de288781b6eac338e52650577e3a93c3a0a920", - "e48500daab2e112d5b91d6c18a7189e6cc3676c7" - ], - "98": [ - "0afa93f45b65df53bb5b07b9abe0e790627ad85a", - "5f0da09db7c667e4d66121d9b2f320c0ac4d3507" - ], - "99": [ - "098d5013263002b635ef9075578ba28773a38c66", - "3a84b270a2d4ee867090b82f786cc89045e408dc" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-iid-balanced.json b/xain_fl/datasets/hashes/fashion-mnist-100p-iid-balanced.json deleted file mode 100644 index 4af4ffef4..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-iid-balanced.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "4ce953e8d422588e5d74b90626d1812887054194", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "01": [ - "a25d6bcbc70b5b34eb60c69cfbc84c073979fefd", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "02": [ - "75334baf7d26deed356a36faf28f9be21d40b599", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "03": [ - "575d6259b88b97e1eb41b9ff662a222452eef780", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "04": [ - "a52d438b4dd92c93f2a38def8644cc3d323796c4", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "05": [ - "e96175ec9805a0cf1565231b43d16a1c38cf2292", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "06": [ - "1c4eca87541b8fcbdcda818fcc5d2c28b3a34162", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "07": [ - "29ef61724077621a09f4f118ad39adbcdaa317f8", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "08": [ - "40711eee17d9de61b2c544bd712d5ed06dcc8b08", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "09": [ - "a495b423de5673653c1f4d8104a09f248f3358d7", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "10": [ - "523d4219c6d5f41532012f454a376305196db11e", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "11": [ - "65d9df4eeb5d7f40bdf558d9f0d592203c2d2d6c", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "12": [ - "8f09e5a70fed4459cd25dac41338d80e11083c91", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "13": [ - "f2edf1858b10c79ebca08dbe394f98eeac1cb6f0", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "14": [ - "1dac2705ea3969c5d61e5c50fcb25d78d8791bed", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "15": [ - "4afc9f1afab9521eb615178f15357245d975de2a", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "16": [ - "ac17eede8972d5a7d32fd12994951f85386e449c", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "17": [ - "eb01f38ecfe6b1301574b96d7b7fcc4e875e5413", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "18": [ - "806d24993b951881f98a494d9ec395c4a5a6d35b", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "19": [ - "95a6924b8d74b6faad16a9bb285d815f70d4e800", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "20": [ - "ea173a12177f5b09f2fc94ffb6664353b0115f89", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "21": [ - "ab54f80835b93c1288fdab68a040c275c4796a44", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "22": [ - "e41ce2b25333b7bfa63946570b5eb22459461aac", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "23": [ - "c7b5a326e45c462e14685e65604e8dd7d29fdd94", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "24": [ - "8e751e4afcf9aaba7f43a84cbdcf5c2e3673d87d", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "25": [ - "206516ffde1e1637a688fd5c9b54da14a9208818", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "26": [ - "b9a6d58d07d15860b5b7f16ba5b5ad74c73f8ae6", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "27": [ - "8e94d4afc2015e41bde3f0c6e81ee05d03e665b3", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "28": [ - "e62ccf5e7cd427ae306e8da66ee54083baf6bf61", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "29": [ - "d74394cc2e1b2b41fa39a7ad9ba0e2fb4c237539", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "30": [ - "90e5c4da528998a53a122906b57e3b96404257f7", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "31": [ - "64b74b2b07a3d43e0cc7e17710b4dfb6fb3bf1c4", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "32": [ - "03c5853b4fdc89cd51cb772cc995db49ab4ba4b6", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "33": [ - "e01c143521a75137241a77b0bcf55e1ab233828b", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "34": [ - "8f6110361ef58ff70a17a115e297631197794fc4", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "35": [ - "c1946cfa8104f7969c7cc27b310ed72968146349", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "36": [ - "55b58987058df9f8074b58eb44762422188bab69", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "37": [ - "7a308c828f45db815d730e96a85c454e1b4ef6e0", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "38": [ - "345ae1f0a526f22c3b2052ba705c98b1a8ffa376", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "39": [ - "59f50d7827d9f6a04be3764a50eaa87346c817c4", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "40": [ - "2f1db91a59abdb1a50274b6d951439b74e8f1d24", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "41": [ - "117608ececac24bea2e0ac35078088cd49b2813d", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "42": [ - "eac037ccbc8d750aa90a6e9041df5553903b4c74", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "43": [ - "7b9ef1b0991d17727b7b5b7d439b55b4f8be552e", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "44": [ - "57d7de076ee6b2bf25c087dd6fd66ab71bdc0bad", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "45": [ - "a6aa9ca711d3925d9f25648b6456311e02f8b447", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "46": [ - "200bb52c0240836e80b039ba3317e3ee988dd7af", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "47": [ - "7dcd4b0f7cfb19f6f2f734d6e253a0e0bcb18901", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "48": [ - "3adba9ffa7f77b2bc9f7fefd8b6d1852b6eb7b94", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "49": [ - "996a3a61f72f3f64bc7538b3c4f8d5fc9abceb93", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "50": [ - "d3d4858bf8370d93ba6faff6ad3d2ca94236b29b", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "51": [ - "bbae4f5abcd4be2410cd0a1b7505772ad19098b4", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "52": [ - "447338b3dc7c1fc3189e0e30673b229274a16f7b", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "53": [ - "51bcf3dbba955622c57acb5e60e560a8a2d9c85c", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "54": [ - "183cc6d97e86ac65531cc9ce4916b71709b3423d", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "55": [ - "9ab2bb969d82c6b6c27d650080f7be4a940f93b5", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "56": [ - "45d52a0f5b825d138f8e30422e8d585acfb4c56c", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "57": [ - "fe0daae22c600294c9596149a9b61c5952098326", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "58": [ - "7f4f806e4c1b5e3434b1d3dd35d9b01485b0a220", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "59": [ - "6d14a9d111b21bd280580b0d316233556ebf75e0", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "60": [ - "06634685f9bee08bd9b90768d0b275abf22b567f", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "61": [ - "bfce1f5d4bb2f8919c6cee5e5a01601eb8bdf49b", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "62": [ - "80d5ce0ea13b6b331406786bfb4e6a7b5cc3e8d7", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "63": [ - "c95c6b661b33d80aeeb0eb7d37376266921772c1", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "64": [ - "51ecc4729bdb7e05b577db75ba18eccd7ec68192", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "65": [ - "3bfdaa880e28fdcc01cbf985db55df470496f764", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "66": [ - "151a6cebb41b3149692713d65447a16b13f31ced", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "67": [ - "ab5373060e914bd5d1ae5697471d84615c583c7b", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "68": [ - "06db653c8d99925c088e5986053726e3bed32d22", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "69": [ - "9776d7393f7587657c6b9d357aad2d958d332ce2", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "70": [ - "da71d81451033dcadd4fab7b403c1ed163bd97ff", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "71": [ - "7404db3783e4f450a2fada1db872a2bfa570e713", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "72": [ - "99b3a922c95a28bb90154c7e27de55c99e7e0f51", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "73": [ - "9d50678a032b56262e0420084e13aa0d4ec2bf6e", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "74": [ - "0aa4df1c05bc3a2985a83386848e2d021fa48610", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "75": [ - "fc95bbdeb8e0fb5139bbf2f05627bd42bd856d57", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "76": [ - "f00e1d6d808931567b54edfe28085e0ee0549cbc", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "77": [ - "5dd9325d76a9c899e571af884325200677006add", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "78": [ - "3a37c168bbe65dda26864524562a4431a56c6c40", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "79": [ - "518834f8ed56404d8b112b2e05c3c513de64205c", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "80": [ - "bd7467fe0c7b9e5decf568caf8b38d8e8476027d", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "81": [ - "f8364b2151a7e01f629ede7c4c6e1dcef6ccbc4d", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "82": [ - "51be616db2702f695b6b0f8a4d5bc582676adc2d", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "83": [ - "dc0a5a0a7876fd7ccc89a8dec3689c682c7fcf76", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "84": [ - "8e7b20004700568b0a637e7451eb08a38be54936", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "85": [ - "f41c15a535b3e5b083c68bd8a857778591048fd2", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "86": [ - "07ad02f42f2d66302bbc635feffa39af8b2c54fc", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "87": [ - "97083ec7784609e1a3483a538cb72ccaebaecf5c", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "88": [ - "339e75575513fedf44391eb2b1a53020d83ae4e8", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "89": [ - "f8009095b3682aab0b3ccae18e5ecee2c29c5dba", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "90": [ - "3f835031aca339fb22aca849f5a78bc33342ff3d", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "91": [ - "4614eff44ef9cfa9a98ca22d7aaedf6714cbe36f", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "92": [ - "c07af0328134bd4960f7aed6dd5a1ca6d600037f", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "93": [ - "4f94c1f89399f27785d0a5827e333c94d7503af1", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "94": [ - "cbc96b727f1cf441701c4e57dc284f3cd9fa950b", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "95": [ - "ee3ee9da0d384daf755b51e18442cae34d027834", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "96": [ - "df117b9ab9f0f5181098677eccff5aa8b7564b4b", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "97": [ - "7a0ee7c84e5d84c62d9480390367a73d2abfbac7", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "98": [ - "8a66d155967264ff7dae0af5094c5987cebe2645", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "99": [ - "4ebc3c64498f146a92a9e1f74f17d4a598ff4d9f", - "fbb36dc6af8e9e343245fe4180ab56f1d5af4a8b" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-01cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-01cpp.json deleted file mode 100644 index 9f5cb04ec..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-01cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "78b3794c9d99916e527efcf1488aa0447849ae2b", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "01": [ - "fe2810e33b0850ae6386f8c583355150b99be4db", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "02": [ - "135a6cff7e0fd1ac2dda4cc1f6a88c8c1be6054e", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "03": [ - "73225dea3935cce4d6281d0ac85cbe2f5e5eded8", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "04": [ - "ddc41275730af5e6769a7901b6eb2bb0fe9baaf3", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "05": [ - "e5d2a7b689f84bb29973334d2de779b7845254b6", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "06": [ - "23d37730b4d86ce242e915ed38683d7fb027fe3a", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "07": [ - "20b63f7dbf5f7523f71f50b3419541cc4011ac47", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "08": [ - "c2e2df68c0ad3125a0cfe2f926ec63025a20e688", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "09": [ - "bbc6af43bd8dafb93ab30f48ab78e26909b821db", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "10": [ - "29ba7b8679237166898f9869cd4c8055febc751b", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "11": [ - "a0c027606922bec2905c2a99bdda294d201d4781", - "a15440c87de62c02ed88835e080824558749337d" - ], - "12": [ - "67df0ab7119330715f46323eb06e006145efe342", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "13": [ - "3a6b673c8f4ca905ea3bacc8251b413f2e46ad21", - "a15440c87de62c02ed88835e080824558749337d" - ], - "14": [ - "4011d300c754db08f5b60ef1404759bb0635e70e", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "15": [ - "6a4b578698fb917b2493f37596cb2e52e5c5655e", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "16": [ - "73d801b8a92570e1cb076a6334d6a017f0525f33", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "17": [ - "b60c8e91e54c8c66f66cfeaf34b932b552303e76", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "18": [ - "7dccfa63b8f22deff1b201cd2adfb342d2b1bdde", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "19": [ - "61a7110d2bc4d1c0d1732d27021d305c975b3e11", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "20": [ - "dbf392d2008421466b6a10c67380f68655db0103", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "21": [ - "c313cee03e0f90e6a71b3df356c59d7210ac4d1e", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "22": [ - "ecb4597bbbb233210ec1a567748ba6a6489f602f", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "23": [ - "b2e6d6ccc3694460e835dbcacfe0af417fb05b03", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "24": [ - "0fc9ae2822fb88e080c79fa3bd0d7637aefab579", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "25": [ - "626cfa30874ebb22e887156e1a4f117c652725e4", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "26": [ - "3458968f2211b38008792b66af29fa616243e089", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "27": [ - "754998ed47a0d7f5a4c9343c05a08953d894340f", - "a15440c87de62c02ed88835e080824558749337d" - ], - "28": [ - "c409d80e6dfde0be87d5f5793a0f8c7fa211b5f0", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "29": [ - "6b8867c975740afdd9dac7a862687aa8e1475ee2", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "30": [ - "a32fe57168b06b40f293c89734b2a221f1bad3d2", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "31": [ - "547ef56f7d48f1d0124b9480007b3f2ecf294337", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "32": [ - "8ef2c86fa5d93b6b45c8f1f0e16792d22ff0d5a1", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "33": [ - "20a2defd89c7de2685b5da81c30c191e47ee8c62", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "34": [ - "25b39c6a284dc6c5b8d0e09296a8e0602d0aa557", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "35": [ - "c637c48f8fc4d7038464b6060384534461d4186c", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "36": [ - "90120c8d56be5470b0f41a06bb0f5c7234c83a4c", - "a15440c87de62c02ed88835e080824558749337d" - ], - "37": [ - "63a3478fd8b2bdae58aa998fc239c8f2870d8ca7", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "38": [ - "95d3f7b73344c112eba110214839e2af168d81c9", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "39": [ - "927af4634c72f50b06da2300376cfbec1efa22a5", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "40": [ - "8c06a2e1a530580b4a20d6c10d37fc85e1ab99b4", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "41": [ - "438e06ee1d9e2bcb27dcebb051646a0d68f4f6c4", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "42": [ - "4b98ea176d961e1a29a675aa683f24bdc5ebb8ce", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "43": [ - "aa84906e0d6b41aa636fdaac8c2b90a01fef42b5", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "44": [ - "efbf9704274f32878b541ed2e6b3a48bf41ccc0c", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "45": [ - "e489a565fcee2f364519837706cf12d3ebceb9db", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "46": [ - "331027c7e4d20ddc378d9881df3f07cad603f3d5", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "47": [ - "3a9447f18a2c303ddcd39cdb7527b1de94eed5ad", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "48": [ - "2cfbf5be0e4c765d3011217dfef27f14257db43b", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "49": [ - "6eef952a7c565f2137b0a8bddb18c479d22a495f", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "50": [ - "0a94aa6359ae4228d29748e01825816cb09265b2", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "51": [ - "96d04b00d4dc066a6c262c0d67b25b7ba4c3de20", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "52": [ - "31aeee8631a98ab1d299c3918487b6d21c7952df", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "53": [ - "b91ee590c22ee6c4f34a7e9945e0d2469a226567", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "54": [ - "f62bd37a0128a4a12748da4507f4d7f398a3566a", - "4b0b6527c21723aea951fa984bef99a1e1adc2cb" - ], - "55": [ - "da3caac5fec6d21269d2997ba7a382948638bee4", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "56": [ - "d4f9b3fbfcb733ca07defc3e8b8a665ed84bc1c5", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "57": [ - "698ac58d77ed7d6c4b0e7960ea096053c3e553ba", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "58": [ - "285db2068d84a44cc6f10191eb83839229a71fe0", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "59": [ - "ae48da572a42dcc068c95bf7746170deda073e50", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "60": [ - "d31d17c50679cdd2d142600fe4d4fe94c7106f6b", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "61": [ - "657a7dfbff035d155cf08c6cf24d85340a1a4f29", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "62": [ - "d7103be118ee6bea7f7c09c3b92239dd2bff97ce", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "63": [ - "fa524501bb8f6045b714455ffcd34bf3779cc972", - "a15440c87de62c02ed88835e080824558749337d" - ], - "64": [ - "86ba399af97ed817101fd7db353083d5d26ad764", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "65": [ - "a090915783598fad21500b3be502c4badae943ce", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "66": [ - "c197a4eddf5b84a960f7efde4d15771e300784e7", - "a15440c87de62c02ed88835e080824558749337d" - ], - "67": [ - "86e22b7920780b6244b471f47af48f2a7571e1a6", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "68": [ - "c3b8233ade4038287aabde97ccd9356c178efb3e", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "69": [ - "904e7fea4f18630d9db3886aa54722552a810471", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "70": [ - "50b8c7d378a46ff3dc9d31ea9567b9b48fd0d4f1", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "71": [ - "5d1a7c8b9d849b4c2a48443dd158ed3db400db25", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "72": [ - "6f7115651021d0d1ad46e1144cb19a6b0eac4314", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "73": [ - "8993d1ad086f79179012ea8626cb46c2c0472d54", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "74": [ - "1f1e7ab7d6a2a985349d7ce9fc0aa89dc1d4b5c9", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "75": [ - "f7f268d9e2695fe7ad2f389277a5a46e22741365", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "76": [ - "f1ff1fb96fb48fa65b82bd04394ecfd979c7de9a", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "77": [ - "9c4ea420da0b377c86e535f728905d3243ae306b", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "78": [ - "7328a0ce8882ebaa2ba23d9271487cf24ff75c20", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "79": [ - "085bf57bc8be623991e02fd1d8e4356fafdb3985", - "c824bb2ccdbad4b27c0010dadaeeab76a647fc4c" - ], - "80": [ - "e18798091125815b09a327b7a97fb46ac3d3e319", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "81": [ - "aa601e96d527372efb334e20d060aa5fce9493fd", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "82": [ - "6d2f6024e88505587327a1e60784b0a875947eb2", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "83": [ - "bf1c96cde9d5419f717c6141c75762329cbf3923", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "84": [ - "bacbdde9d56b6d56a654ee417c310a46f8514cf8", - "a15440c87de62c02ed88835e080824558749337d" - ], - "85": [ - "dea3627b45011ba2485880aa562acdb5664e851b", - "c5ecbc7d1aeb28befcbf9b9af4bba2cc27a6b8de" - ], - "86": [ - "55c43a971e4da2137e97703d974c3ab611ca68a2", - "9213d1d5ddb7c405e58c4a7669b8a43c7ab21a25" - ], - "87": [ - "ad91df499d6cad139c63d0081b2e6d53b57013d5", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "88": [ - "bbadfa6b25c080567b8f8051f3ee81554bc9a657", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "89": [ - "3418959670dee5c639b89971390e1da4b1272d7a", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "90": [ - "729eaa72508759de528b9503a6010ddd7b550f73", - "fba92bde2718e726d5c3f6413800caa664108826" - ], - "91": [ - "1de650aef8346714a6d05cc5f5166e52ed56c855", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "92": [ - "99965c9cf6edc5569a743def7236566b95aa5fd7", - "528baecfb238d6e04ac17709abc732a56e14e5af" - ], - "93": [ - "0508d46a3ad3f6d631f4e6a324fc4bae11ae1db8", - "a15440c87de62c02ed88835e080824558749337d" - ], - "94": [ - "d470d937fdd54889cff375bd0b41f87a908d5b3d", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "95": [ - "38c117260e8f1ff5bdee154156dcc22b69930ad6", - "a15440c87de62c02ed88835e080824558749337d" - ], - "96": [ - "f3fffb1e7af56525dbd204f45920c2d564329d97", - "8f98e60081ac99fb246d97b5fcb27ac35016b66f" - ], - "97": [ - "49ecb86a0568759816a0ebc7c336a24147dd3bd0", - "a15440c87de62c02ed88835e080824558749337d" - ], - "98": [ - "9cbc35a8059ee898f54303de148a8ad7b2d06d7b", - "c0ff8fa29386209195a59583be490dd2678cd570" - ], - "99": [ - "9a80e7290b10abf8dabb9f772672002ba0354462", - "99822171b0d75274dffa48388786fd8d8bee3b5d" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-02cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-02cpp.json deleted file mode 100644 index 8e2520bde..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-02cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "9b15028721d82a6e621406a9cf46186f9d37c0c1", - "c9849f81a7e41091012fd887791087fd6fbc182a" - ], - "01": [ - "a8363f6806091eaf26651e089eb262fbc4aa605d", - "2853df202922bc6bf1f774f11dec29b640af7708" - ], - "02": [ - "90cb1a456e67cfd9b14663f640d3b92d10bb4ecb", - "d92b210993a5f1e0290c3d9d907877227c05f295" - ], - "03": [ - "af34c545c6e4b2b380eb50dc8e5f9a3b48bdf9d4", - "c8ff6452bfaa42161a1fb81500ccbf9d1982af55" - ], - "04": [ - "10d498366993773669e58b0180414113a64c1f77", - "928795e503daa559aa11e9d046767a8e5522d94c" - ], - "05": [ - "54f4bf5e0efe8f3cd57be32f631457b7244f9dca", - "dafb73ea98fb497cd32e44f26ceea83376663de1" - ], - "06": [ - "7df1a3e099e714c8e2f9d22c0b341f062a27cc4c", - "c9849f81a7e41091012fd887791087fd6fbc182a" - ], - "07": [ - "3c33371e95a713ffdff8bb8d2f2854cb3126a5f5", - "95c7c4af113667f0cfe3ba689f75d92275eda152" - ], - "08": [ - "2bcf928dda1a07d3946bd710668ac135ec2d1ef4", - "f9b7a73e153827ee60121a768b17e00b42109729" - ], - "09": [ - "c97e5a212b97f7085a7ddde651319a17d2762fff", - "5e58323803dd23683d3732f5ce0379dbe3a23ae9" - ], - "10": [ - "887504b694fc8800113e2a1f7d795a4533db9add", - "95c7c4af113667f0cfe3ba689f75d92275eda152" - ], - "11": [ - "addd6321cb349ba094cd0c92a3d04f580f0a1a13", - "6197e61fa0ad46b4ef149401bb989580e23c2d08" - ], - "12": [ - "d75ecdd54888ecaaa7b0437d60ee8c3861117ae0", - "84cd1dc47d511e5a3863a7d902ebec0139735e73" - ], - "13": [ - "70a19bf5acfd006d1a90d659c0c789875f759969", - "f06d6d618b3d3bb0673934adb71d85a86057ba04" - ], - "14": [ - "780dfe41ac615cc0126f7d459420c64f6106b159", - "b66105f61e79f9e1528ca5a9e63d15da1b0df9ce" - ], - "15": [ - "259db0dd81187b0e1db2fc1fcac853039ccbd527", - "bb59a4c9414a92023797ed38606da28285b72e1e" - ], - "16": [ - "934b6124d9de960a122ca0d96939d2c36a3fd0e1", - "5e58323803dd23683d3732f5ce0379dbe3a23ae9" - ], - "17": [ - "aa665a5559ab51a12c7cb1c30ba78834b6d9324e", - "eebe4b2e3f5b8385accf14c4a220c73f513178a4" - ], - "18": [ - "d6eb504b3bf48fe06309e91405a0a23363750463", - "f9b7a73e153827ee60121a768b17e00b42109729" - ], - "19": [ - "c03fc4adcc6a1c98618f3cd6a316d9288212079e", - "3c9e9b0336b8ca92711ba6f2e440d0dfe4f1f778" - ], - "20": [ - "ee346b016a5122ef319252f4494b4077412add49", - "5e7dffc970dd37a3eef8b2eb25e6add5bbdbf93c" - ], - "21": [ - "1ea26581a03e036ac53b20a38f548f4c8dd5970f", - "96b2bc7df94f28dd7d4b5a19fa5f6e559595f603" - ], - "22": [ - "da123c5b74c0446db253afb0631a351151b125c3", - "da1940950cd1fcf613a412e23d79a6733177a2d8" - ], - "23": [ - "61cbd208f87841a94414c341ee7baea9af7ce6a9", - "b55f0533a9bffce4b61e3a8190ef95e33fc7fee6" - ], - "24": [ - "4760d6967b52d821d41c14319cdf293487c73721", - "51b39a8dc4528df2ccbbdadf2f38590862eccc4c" - ], - "25": [ - "b994f2588ab5160000e657494e1d68806f607886", - "95c7c4af113667f0cfe3ba689f75d92275eda152" - ], - "26": [ - "124fdfeb354ee77d63252239b795eabff18b1a27", - "dafb73ea98fb497cd32e44f26ceea83376663de1" - ], - "27": [ - "7a33330c67c297a980e3712928a2b9f7e145e598", - "8927463a9798ab07652874a087e8b4626b96f1b5" - ], - "28": [ - "c6748f985d9bb945214cfacc3252bda1f8733a9d", - "95c7c4af113667f0cfe3ba689f75d92275eda152" - ], - "29": [ - "e9e5e620ef8f955d6d77eda2dc5ab3bad127dad1", - "3297f2aa94fd5f06da8aca801084008a4f7c5bc7" - ], - "30": [ - "11856b41ce65a624ccfbf1589520dbcb7d38d7a8", - "51b39a8dc4528df2ccbbdadf2f38590862eccc4c" - ], - "31": [ - "3ee2a4214cc05bafd83ba75e902729eb13bea706", - "dd06b84218fc91107e3728b5d887df2611c735bc" - ], - "32": [ - "621ebd5d803d5dcd7da4210c966edce357925a79", - "95c7c4af113667f0cfe3ba689f75d92275eda152" - ], - "33": [ - "976b3b4936c07aed97be08b81b98296358f63f30", - "5e58323803dd23683d3732f5ce0379dbe3a23ae9" - ], - "34": [ - "989d8ae336ab1b7cddbb42562c5ac12a074b7b21", - "12c915d828e87fc5e0e0d2f4abd24425dce44827" - ], - "35": [ - "59128380b57ac4fd169eaa195acf00c34469554b", - "b55f0533a9bffce4b61e3a8190ef95e33fc7fee6" - ], - "36": [ - "67f558c5008efb9ce7930e254fcd36cfaf833916", - "e5cf51c11a0e605e0aaf0914bd2b517ede2b7317" - ], - "37": [ - "61ef2d9111d4031f06b281df7d8458f881375e41", - "4674e874d3a66957a841c3d6bd405c25edd4178f" - ], - "38": [ - "69b975885b3dcf9b9f824c7a904090d28a570732", - "0c72795b7db2268f261283912967da2e4acc2708" - ], - "39": [ - "ecfd91496ec02330842f881504ba25a739200da6", - "2eb513b18ac253ccd6c0372f6a369401c6680713" - ], - "40": [ - "0d97c6cb20c7865b3e33f360712ff9b76c8271f6", - "846649262c0c5d03f5c459b57f504c4e1525f17e" - ], - "41": [ - "603ac391157ca9762a005b78503fd76fff061943", - "b4bf7d89b08cb50787fa0fce9c6d0c306822a606" - ], - "42": [ - "8e039d39a824343444345e4426d8a286ec41c654", - "016971b7e77cee99b4a52a4252e848e8bc58a232" - ], - "43": [ - "9fe799b59caf1beec4b35c8127f4aeb9023a14a9", - "878238466831c76efcdb7a03a26a385e5ba8feb1" - ], - "44": [ - "84e1dd8225d877bf913a323a883bafaa9aae0161", - "878238466831c76efcdb7a03a26a385e5ba8feb1" - ], - "45": [ - "cdcdcf0a9d3b54345fa3fe5bcbd629e7719a2b07", - "076ad645addfe9c97fdd2b279aa9fd0da2672114" - ], - "46": [ - "9b08994164cc09900a16fbf1cd8f2cd4ff805e5f", - "bb59a4c9414a92023797ed38606da28285b72e1e" - ], - "47": [ - "faebffdba857322170ae0530293f439fd3e56eb6", - "66b5950740232f45c39a2ef1ea2b52fdb11c27a5" - ], - "48": [ - "3f7b3768c99a339e6daca78ecbba2a2506b35a41", - "bb59a4c9414a92023797ed38606da28285b72e1e" - ], - "49": [ - "03f04fee374e2d48ff3fa4887436dca1e1a664c3", - "c8ff6452bfaa42161a1fb81500ccbf9d1982af55" - ], - "50": [ - "551b5333dd4f6bedbabff1c46b0fb9e16bfd77f6", - "928795e503daa559aa11e9d046767a8e5522d94c" - ], - "51": [ - "49fa0a4dacd62d77ff3d7e9caf872724c817c49e", - "bae0a17f3e8ee602fc747e713f47976857a2af36" - ], - "52": [ - "97a33cb25ade87d7448bf066d239a5b3d2a12d28", - "c8ef147e8048834ccaa1b457ef49ea82695ecfa1" - ], - "53": [ - "9dd510876d6cb576f04eb2325b2137a0d5b9fe1f", - "5e7dffc970dd37a3eef8b2eb25e6add5bbdbf93c" - ], - "54": [ - "9cde9760db336808838a279ad6be61d286ae4a54", - "016971b7e77cee99b4a52a4252e848e8bc58a232" - ], - "55": [ - "98f8e5e5eee8b663591ce8850b9149bc357c6a58", - "c8ef147e8048834ccaa1b457ef49ea82695ecfa1" - ], - "56": [ - "0672f4ef42397da827825312c2322bd704f0ebf1", - "6273204bae5cf28c94987206f5a00343223c6612" - ], - "57": [ - "7552851e0474ff79dbbd5a1ada8cb38a2d286fbb", - "016971b7e77cee99b4a52a4252e848e8bc58a232" - ], - "58": [ - "6c2d03c4eccafe73e460ac1f0f7f3dbe36ccd44a", - "a1a61cdff7503b4eff80d98ca014283344900009" - ], - "59": [ - "2cbfde2c7e632c9ef73a7dde8b29c652dacf4eb9", - "c8ff6452bfaa42161a1fb81500ccbf9d1982af55" - ], - "60": [ - "07f10a5927bb09063d0e60048fbfbd3a5c1b308e", - "dafb73ea98fb497cd32e44f26ceea83376663de1" - ], - "61": [ - "d429a68b990ed780a1d6ef2efe5dea8b62b36b3b", - "2eb513b18ac253ccd6c0372f6a369401c6680713" - ], - "62": [ - "a864247d465a99cbd740b61c40ead5ba33b995bc", - "c9849f81a7e41091012fd887791087fd6fbc182a" - ], - "63": [ - "759a4fa1707881f69a16f05ac18486303cd0be4d", - "dafb73ea98fb497cd32e44f26ceea83376663de1" - ], - "64": [ - "eadb182acb3a8d9a37a3ca9b76375bef1fc9f4b2", - "2eb513b18ac253ccd6c0372f6a369401c6680713" - ], - "65": [ - "0c07424d7b4691bc5974a65421bcbe4efef56cd3", - "3297f2aa94fd5f06da8aca801084008a4f7c5bc7" - ], - "66": [ - "984ff70feb24612668e12d3709a7229b5de86b63", - "dd06b84218fc91107e3728b5d887df2611c735bc" - ], - "67": [ - "8cb09f2c5e0668c4b9161832360f716e4ed564f4", - "4674e874d3a66957a841c3d6bd405c25edd4178f" - ], - "68": [ - "d142066b31067bcb086b8d0d7361620a0caa044d", - "96b2bc7df94f28dd7d4b5a19fa5f6e559595f603" - ], - "69": [ - "aa616e191fd713d584a4a10375ad8da1aedd3522", - "6273204bae5cf28c94987206f5a00343223c6612" - ], - "70": [ - "b07a76fd14c629572922a2fb0b811a19f989af0e", - "076ad645addfe9c97fdd2b279aa9fd0da2672114" - ], - "71": [ - "80b7bfb6adcaf68c8abc830b27eecaa41644de34", - "f9b7a73e153827ee60121a768b17e00b42109729" - ], - "72": [ - "74e3a4597821a87d60ac2127f2b939fa7890e271", - "94b1bc6711d093a698d3551864015d05f32dd85f" - ], - "73": [ - "d8d046579b5c3a54a2f6b5c0326aa105882a88e6", - "076ad645addfe9c97fdd2b279aa9fd0da2672114" - ], - "74": [ - "9a28c35530764ecbba741f68e74976772b264274", - "66b5950740232f45c39a2ef1ea2b52fdb11c27a5" - ], - "75": [ - "ac0f4610dceb214ab603abdb7d296e109a491999", - "846649262c0c5d03f5c459b57f504c4e1525f17e" - ], - "76": [ - "993c0a7e7810a2d9fcf8fb0b6bef4e79523eb02f", - "3c9e9b0336b8ca92711ba6f2e440d0dfe4f1f778" - ], - "77": [ - "4f913c17d691850a499959b95897c43a5c816d93", - "66b5950740232f45c39a2ef1ea2b52fdb11c27a5" - ], - "78": [ - "06bea9161b91e1e95b646fcf340be8f73c16d396", - "bb59a4c9414a92023797ed38606da28285b72e1e" - ], - "79": [ - "a34d5f4112113dabcb287c60146f5e8fdb882f7b", - "bae0a17f3e8ee602fc747e713f47976857a2af36" - ], - "80": [ - "aafd9062a2be8e5dc4ea6dc442bd149b21984640", - "eebe4b2e3f5b8385accf14c4a220c73f513178a4" - ], - "81": [ - "b388c5d2988bc8afa3049f45558fc1a0d05de880", - "0c72795b7db2268f261283912967da2e4acc2708" - ], - "82": [ - "7bf8bcdc1d06cbd50c1b537eb7d53e2eef77bd73", - "da1940950cd1fcf613a412e23d79a6733177a2d8" - ], - "83": [ - "dce3257b2d6019d9e4f52d54148197980bd233f5", - "3c9e9b0336b8ca92711ba6f2e440d0dfe4f1f778" - ], - "84": [ - "e287146132bcdc05762037c2382f6478f0adb498", - "318d4fb2ee28d35989c2c3a96dddd6b1b4813930" - ], - "85": [ - "47de6846ccdf63e218ba6ed169595d4a3f0e8300", - "928795e503daa559aa11e9d046767a8e5522d94c" - ], - "86": [ - "7656d143329f25d9c5553d10ccc9c86331968077", - "318d4fb2ee28d35989c2c3a96dddd6b1b4813930" - ], - "87": [ - "89be8090181d67e74c70b93da05046edd2704539", - "a1a61cdff7503b4eff80d98ca014283344900009" - ], - "88": [ - "c8ae6f54a9e44ea5d9b3c418238507b4ae4113f0", - "f06d6d618b3d3bb0673934adb71d85a86057ba04" - ], - "89": [ - "5dcfc65112038d2d2e6f72fad3b7528217b8bd72", - "a1a61cdff7503b4eff80d98ca014283344900009" - ], - "90": [ - "602cc88dbd6a2be09a6c4e98e2dba5104ae91124", - "bae0a17f3e8ee602fc747e713f47976857a2af36" - ], - "91": [ - "8fcd5d4abc9ac9475cb411c3828df21459f24b22", - "f06d6d618b3d3bb0673934adb71d85a86057ba04" - ], - "92": [ - "ec79d58d0157e9e5e6ad61170b20be3414ee9bf1", - "f06d6d618b3d3bb0673934adb71d85a86057ba04" - ], - "93": [ - "f21bc16b0ddc649fc7e92a4432fb47e38d4e0d29", - "8f3f2e406b3ec8dee0097a111933f9f87e8affa1" - ], - "94": [ - "c47c4aa7510521d8433f8a159fb4d5850dfcb81c", - "8f3f2e406b3ec8dee0097a111933f9f87e8affa1" - ], - "95": [ - "c52e334b3ae505744068bf824193c43acfaf9286", - "b311b207e1868d768172e9fa206e4ac044ed0e74" - ], - "96": [ - "1954e27c60421832edddfe033dcc2cba3560420c", - "b311b207e1868d768172e9fa206e4ac044ed0e74" - ], - "97": [ - "7f5d7159e2b6a605ad10aea362cbb0ca6e899cac", - "b311b207e1868d768172e9fa206e4ac044ed0e74" - ], - "98": [ - "09b8843609fe92be460057bf943ad40026dfadc6", - "b311b207e1868d768172e9fa206e4ac044ed0e74" - ], - "99": [ - "7f6336f8e61474337085cf1109060dea234d3c28", - "b311b207e1868d768172e9fa206e4ac044ed0e74" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-03cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-03cpp.json deleted file mode 100644 index c8fbf2965..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-03cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "4da1542c8c510d17cce56bc0103d0e8454f668e1", - "2583e38bc26fe77244e15aa0416e33838cc2dd4f" - ], - "01": [ - "231ba11f3cc84ebb5bb5fb0d56cdab5ebd7164f7", - "1a99c8f8841c5cd96ab757639e7260a1b45f7a81" - ], - "02": [ - "f7928f442cd1011a9ac00b5b579c1c4bef33063b", - "102ec1a289008396e6e51850695bd2ece8993ba3" - ], - "03": [ - "cdb642f4436375f9361ef9204bae39df0dab6a57", - "63035f36e7369e94eb17534a63a5665d41f8a70e" - ], - "04": [ - "c4db49f60f8fd8bbc9c2a3ad5a7ae746a7b232e2", - "22e9837298ae6ffeae75d9dc33e85dd0b73eb843" - ], - "05": [ - "9f433316a40b8c33844ffad4fca1e60fd9b83c14", - "fb5be4213d6eabee36a6e4fb8c97765e8ca02313" - ], - "06": [ - "ea4c6f2354ce111b9c3c2c7df967e2b5a029bfdf", - "c3597c4e9a57f540b98df32ca70ae95237f3b110" - ], - "07": [ - "9b558893f98d96910ce9ec73ebce1b64ec46d49d", - "a6c51272e09b8c3d8af16ea145b8af1f1bffbc53" - ], - "08": [ - "9e16e8e451d8d683d33966cf960f692812b35455", - "355bcaef80291449a607bba1d22a6598d90e374e" - ], - "09": [ - "3e759ba3fb784a4379e0cf4676157bb343a41f3b", - "a197af957d7fb052606c9639423cff1fcb26f7be" - ], - "10": [ - "274657aea0017de852f3ff8c1c629c7127bb9760", - "d7cbd45344b26c929929c166c8b5a9f6add0a296" - ], - "11": [ - "f745a53541af91aaa349fa60b5926d8f0339ead4", - "6218daae6e184a6eafbed27ca49ebd3e51851cdf" - ], - "12": [ - "80cefd9f42a2e708d6aa2e2309af8ccbb1a01fe1", - "0da2fc5bfcd6191643b575d6588ee4a6b899b924" - ], - "13": [ - "7cf452fcee8a1bbec7bb0c13edec9e9937c4ec9b", - "2a963c0439fb16432f7c7cbdba93216b972c37d4" - ], - "14": [ - "f2c9fdce09e95403111feb14a628569e41f967cb", - "608161d2ae2ff4342788bdc9103491ffbfd803be" - ], - "15": [ - "56bb189d8325104f3bcbc885d7cf2468e72571c6", - "fb3af4736bfcc3b00a50230cb43d702cc5434450" - ], - "16": [ - "afa077e8e77e9b0c3c7eed5bf0b32b16972c1dab", - "a9bb2732e8463f11f23dc08ec9da2eae1ebdf7c6" - ], - "17": [ - "be7003c84f11db6d29bafca3084fdb016ba28d57", - "bbc6afcb0312f1da455281ac36d09ff614483742" - ], - "18": [ - "f90172a9163dfd0eb6b4ddeda5791225884db6df", - "de02bcfb8b9af7edf3e1e0a3d18777af1963cc5e" - ], - "19": [ - "43a5e98baf20a6cfcb3eeb9a4d806554dc6b03b1", - "78acb923d93afb7f1888ec36cb5c341a23886cd7" - ], - "20": [ - "4c793a96129b635caa01ded3c73caa29795c3e92", - "78acb923d93afb7f1888ec36cb5c341a23886cd7" - ], - "21": [ - "d9c063152be1feef7efa4cc26aa50b968d7ff157", - "4e8cd80ff6c2c4902f7a0fb42007cc680005ea44" - ], - "22": [ - "f224f1c46c08c96e2233e13b2c7dd0174e482ab9", - "1a99c8f8841c5cd96ab757639e7260a1b45f7a81" - ], - "23": [ - "bcfcc03b8735eecbea167ee73623388525185a97", - "721978a4c27e9b41198e82ff050cc1651e0c2a06" - ], - "24": [ - "bbac6f4a6236949e359c6e5e872ec6cb9b37ceae", - "432ab426dc0bed57cdee3a505c7cb44dda0a7a9c" - ], - "25": [ - "d13a53105fc0b0ae4eb966e6869fe47d0a354397", - "dff60213bddcdd092c0220162c298542298f7b2b" - ], - "26": [ - "a5ee4214bb2491073a5d67f7881c7cc9152b523d", - "59e7a3253ee53264b39f38e714881d206a807634" - ], - "27": [ - "376078fb3a8008820c03d564f348a91e954bb555", - "2a963c0439fb16432f7c7cbdba93216b972c37d4" - ], - "28": [ - "a2b4f3c6fc8da3fefa32df583c6e98303a252358", - "a6747e74e08b522a614fd27be31959347bdb9feb" - ], - "29": [ - "653eaa81bd95a0e1e740a2da849255ed7b6e8873", - "dff60213bddcdd092c0220162c298542298f7b2b" - ], - "30": [ - "1f9571f3ae00ef52bc4ad78599848027ee41211b", - "432ab426dc0bed57cdee3a505c7cb44dda0a7a9c" - ], - "31": [ - "3c7bb591d8a0c1738242e1c29ce850358598ef2a", - "ec7eb34bac227046de95c4b167525dc072a2cb7e" - ], - "32": [ - "6f13a69f95c2517413a0bf495be88d77ad4e0cc6", - "d7cbd45344b26c929929c166c8b5a9f6add0a296" - ], - "33": [ - "cb25cff974b120358c674d9777780c9e77262ea3", - "266d3861ed2cdba02225d1f8fabe992037dcca30" - ], - "34": [ - "4d907d4da7e74cd94b8b53698ebd2a6e505690e7", - "217d191cf9f1a5479ab789c8564099bf0a86e3c1" - ], - "35": [ - "bef79d8581a69d42581f7573ddcb9b180d66c32d", - "ff29512a5fb6ee9e6dcf67044c18d750ba6c3855" - ], - "36": [ - "758a577e12f7f8002522d3c085bad3f0af159c15", - "b2f773aa0d14e17f64a06eea3c2a53377889afe2" - ], - "37": [ - "5a4ea7b5eb3fc4624992a50d1662f46036538837", - "266d3861ed2cdba02225d1f8fabe992037dcca30" - ], - "38": [ - "fd294c6724f0d42cd875b2ce2fc18e349f56e959", - "b2d7ef13093e5c7a3c5af5410fb2c8fe54ec915e" - ], - "39": [ - "84525f36d17c873a1653f26b18916b7e2abef316", - "b2f773aa0d14e17f64a06eea3c2a53377889afe2" - ], - "40": [ - "828e7bd0dad114a518da7072a75e54a2a478b6ae", - "5c1de31fbd5d1e309fabbb7643896d08fa8ba77e" - ], - "41": [ - "2b5bbe282d98d0349cb46fabf88ab0e7e5196f3a", - "5a58209e8f31cb790f37dcbcaf65fd5c55423adc" - ], - "42": [ - "6879b585a40ac9996e5dd5734d4ea649909b59b8", - "b846fc96338e8db0785f9510a898c16889b66cf7" - ], - "43": [ - "7f45531eeef69e7d34e711a60e22832135dcf670", - "9e3c9d9b4fccb4f92b9fd520c93c1b50a44d9930" - ], - "44": [ - "d5a896a82c65aebd89029757034a8c54fea71d43", - "183f122fc4f4f89f31a869bcbc3f1a7803d9b16a" - ], - "45": [ - "2f3cf26bb7dd0142a3de9b4028a7a829d30a6d09", - "1f5268105cf1ca66d3b1cd5237c336d3b6502c28" - ], - "46": [ - "3775052dab05c51b97527062ce67730fbd7b9bcb", - "a1e0cc94b9a3edee45d05a0c5b1239ef37ac4a23" - ], - "47": [ - "3030995aebd571c2d617cd3c648540a8d140d60f", - "d7bb0156cb20414c0fe9f02fbecfe3ca60c1c8f8" - ], - "48": [ - "f8dcdcc7ec68994263984886574f7fde767a3603", - "d7bb0156cb20414c0fe9f02fbecfe3ca60c1c8f8" - ], - "49": [ - "9f3443ed677bb99e86f83d03cb5b72bc447453ec", - "5d5abd65a2b2e410a80fe1d1810b5da830b61e4d" - ], - "50": [ - "a6ab754793f0905eff4a42e5f8cc0d400249fd00", - "4e8cd80ff6c2c4902f7a0fb42007cc680005ea44" - ], - "51": [ - "ec1266b80f8d653f0b72d3e2cda6f5d27b1c046b", - "0146b380fd38ce930e84988b17306ee01afb6b69" - ], - "52": [ - "ce8496fdc76db118207f9e691cf78e7a389db614", - "eea1f6bbb9c46867da9ed6e150a26db5ca79b1a0" - ], - "53": [ - "e128e6bae6bfd01737a8af052ce93165720a9ee7", - "e8cb9e8bc6706b8fed23ab2177fadbf33fcb46df" - ], - "54": [ - "3779d46a233aab24159ff4698c153a1ab736900d", - "1687a5e4c4b148e5ab6c45f5342d9ef81de40de0" - ], - "55": [ - "88f72971fc41c1af686a31bef3ba9c2696e0a6d7", - "eea1f6bbb9c46867da9ed6e150a26db5ca79b1a0" - ], - "56": [ - "4b478bc40573f4568a2a134e797a0e199fbb9b98", - "c9f965810e880e6e0b28a948cb42829c7bd5878e" - ], - "57": [ - "dbece5f6af993f830564edd5722b294ac53bcec6", - "3afbabf2c249565a0b07f5f271ee5ea406c7103b" - ], - "58": [ - "bd312426c1ce22fac24c9b70728c08a260b60a4d", - "b66a48574afbaccea39cf76909571667517e4934" - ], - "59": [ - "2b1763ea68ed17f1449503c903fbb71de849fb70", - "df28329d17f362168e40b894ee967adb53cbc9d1" - ], - "60": [ - "3dd6a5ece4cee6cafc36749c56280657af20a77b", - "ebf95e9ca640f11712f5ef1283fd12a4209b232e" - ], - "61": [ - "15a656f7f5a916243852fb2fb60331dce083788e", - "b2f773aa0d14e17f64a06eea3c2a53377889afe2" - ], - "62": [ - "4c9a38e5d2e408d0be2211cf91f9f0ec9820175f", - "27bb2bb8b02a4b68b291549bfbb17ec0e720b4ec" - ], - "63": [ - "db85274e31f63659ce2893d0cdeae20f52ba54a2", - "6742a935f139acc4a5832cb83f9cc517f82df4f9" - ], - "64": [ - "935ea3556faef31951a2027ed3bdf04db2b85d5a", - "b2f773aa0d14e17f64a06eea3c2a53377889afe2" - ], - "65": [ - "2f6b4773bfce627dd069c84091a636627eba2653", - "22cfe89359e05f536381bbee14918619f34c1a8e" - ], - "66": [ - "1fdcba42f0bfd86c266373479e956c0e41054718", - "d5b0fa63ff8cc720f1a59f788ee828d28279c73f" - ], - "67": [ - "5cab9208384a644eed13d7d65917bf89d98edb2a", - "586dcc254f12e448391bc93c91dca2a735ffd343" - ], - "68": [ - "fa359f4dfe1d963807d301e7d32012f0788590e5", - "2e7416a1571f702457d0a1820fe591ceb0fc531b" - ], - "69": [ - "8176cf9144d7fb28cee00be75c8fa22ea6f9febd", - "6374ed4520c3817fb2366700d16ab856f58ffd01" - ], - "70": [ - "defcc6da4ac1c608503ac7017c580779aa64d534", - "0146b380fd38ce930e84988b17306ee01afb6b69" - ], - "71": [ - "61625418969361a96fb3f5646e1e05086dedfe43", - "a1e0cc94b9a3edee45d05a0c5b1239ef37ac4a23" - ], - "72": [ - "d5e894403934b7fe57c1e2849de224ada802a67e", - "a09e773c7110223c006de2ddd4315c5bfe3305f7" - ], - "73": [ - "682a52515ca27a739b37c7b41216a6a15afca8b7", - "3a184f69f57b7fe19225c5d8c1e9f212a0868c7b" - ], - "74": [ - "2b32a43fb1548a55c3c9500878cc51d7cf8b5dd0", - "206086ff005679acc029ebef6e171b64c2dfc07f" - ], - "75": [ - "7a1216da453855803177b30eae08006b997b70c6", - "8461fb16970bfdbd9fd7f9b1f3804a095cab2d86" - ], - "76": [ - "49252676863ea7c5721070616f6d2570814a8c1b", - "752f4659c3290b6fb43e9cf8f66e7db2977ab561" - ], - "77": [ - "015c362730125da1049a2ba0968cbc341d374d52", - "9e3c9d9b4fccb4f92b9fd520c93c1b50a44d9930" - ], - "78": [ - "612c1ce5f49eb0d0292e8ea4d67f3174dbecc8b6", - "d7bb0156cb20414c0fe9f02fbecfe3ca60c1c8f8" - ], - "79": [ - "e86c747b9ec9665633c97961b7f9de7af3e8c40c", - "1f5268105cf1ca66d3b1cd5237c336d3b6502c28" - ], - "80": [ - "e38444f30370f106775844ec17b19517fceace28", - "dc22e521340b3753b797d65e89e6db4aca19b944" - ], - "81": [ - "0b56fb311b47972ff12d5d5f8cfe369e66a206a6", - "9e3c9d9b4fccb4f92b9fd520c93c1b50a44d9930" - ], - "82": [ - "59db6329832e7ea7d520ff570f0dff74ee750f71", - "dff60213bddcdd092c0220162c298542298f7b2b" - ], - "83": [ - "e939d8e0db89d6a2ea6ec15583f5fda4b9ea1e43", - "a09e773c7110223c006de2ddd4315c5bfe3305f7" - ], - "84": [ - "dde4c48f48dcbe4474b441e0ab2655e5d444d59b", - "b2f773aa0d14e17f64a06eea3c2a53377889afe2" - ], - "85": [ - "da6798b4e93668b74a681974c57f78a3c5943aa0", - "ec7eb34bac227046de95c4b167525dc072a2cb7e" - ], - "86": [ - "78d049317eab94878caecaac7ba8d28fc3fec97b", - "b66a48574afbaccea39cf76909571667517e4934" - ], - "87": [ - "2ee94c0ff9cc091a7c523789853cce627515e407", - "217d191cf9f1a5479ab789c8564099bf0a86e3c1" - ], - "88": [ - "d4c927354fedd3aed04d7d7b15e1c0ac6af753f9", - "f0d08353a08f47b314434d280f407a77e9ee50dc" - ], - "89": [ - "c4b9e1f807ff0b2c68547fd9b3372d66cb7b6ff3", - "a3ce02136b00618c7492fcdcdb820cdb900137f5" - ], - "90": [ - "38d4d1d1e3f1c25e02c6a431acb47503e4277ceb", - "975407b81f6a43c5963f1eb79c2b1c7748965948" - ], - "91": [ - "0bdb9c46129f0ec358a72d16f31e62a5092a1b45", - "eb3608638f0a265d516ea7f5aa0b9508f9925b48" - ], - "92": [ - "1975fba2df66bb0bf15d823d201d0d4e103d20c0", - "2583e38bc26fe77244e15aa0416e33838cc2dd4f" - ], - "93": [ - "8ff26f8127e06b64ead6d6db411034b548c50f7f", - "55d0698676699dffc691376ac44ccafb651ecbf8" - ], - "94": [ - "5ed43c7a41c54679e077f4756c7af379442cd3c8", - "b2d7ef13093e5c7a3c5af5410fb2c8fe54ec915e" - ], - "95": [ - "3b9fa4fb05e20762f9328f7c16c93d125cad7cd5", - "ea62e24e570c30217aae408c26e58c8ae28ea4c4" - ], - "96": [ - "7e3ee2fe81c9481e63620e0deabd78d4edcecd07", - "165a0fbcf10b1d9d8edf0da75dbd3766aab6b99f" - ], - "97": [ - "42dc92e75eb5c8f141e9106b9542831621b222f0", - "ea62e24e570c30217aae408c26e58c8ae28ea4c4" - ], - "98": [ - "fd71ac77614bd5b02a2400a2cf6511ca94eebb9f", - "217d191cf9f1a5479ab789c8564099bf0a86e3c1" - ], - "99": [ - "8dfaf3df0e29849924d247bd5ca911a458e54267", - "6374ed4520c3817fb2366700d16ab856f58ffd01" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-04cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-04cpp.json deleted file mode 100644 index 2f8e94ba9..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-04cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "8e8190385d5b313228bd3a247aeb448ea6ee29d4", - "7d39294cae32e1a2fa33fbc349e92de2d3f96bf5" - ], - "01": [ - "a06f415a4d872a39cce387aa4bd8eb806e9fca6c", - "20f4dff5ff33eacd7a5f366487ccb3f5c73376db" - ], - "02": [ - "8c638aee11d6b2c2eb94c88f01adfa4e1424ac04", - "02b651b541be54e2a86e0070765f63e5501ff253" - ], - "03": [ - "f72a9bda5719d8b7bb61894d11af993fec87c12d", - "cbf1792703ebef7205ac51ed5988252087eeb73c" - ], - "04": [ - "27a4160920fdae70a31bad9f5e0d5c270dd0a28c", - "ddf87c2f9af311f0286d8acaf15a6c4f9cb681ca" - ], - "05": [ - "61f085398223914ccc1660b1362416a19d1eb8f1", - "68873e3158bc27659e5d26960c540eac064e4cf7" - ], - "06": [ - "b1636facaf84bbeef2829d0a8f9cf0e756e248ae", - "c3b88da1803a43ac8f48fb83031ef63829195df6" - ], - "07": [ - "12e3f787a5284172811f698df213434d58abf383", - "c9de41d1cbc1c07a06c0e26b4e9ee8155a9f523e" - ], - "08": [ - "d33d1e8717ea3576726d1402f59b0f0d1384f462", - "bf03e622f96ed0cc04abaebfd4958129b7d9392c" - ], - "09": [ - "26189dd2d9675f1d8885f9618399b9f23aebc1f3", - "e8286aa989cccb4b4348b5684b53142c657b750a" - ], - "10": [ - "4f77a214a9d13f6500b1d5ec517c731bf795e747", - "46c09cc64a2ee13a0e0104106ca37215b7e998e7" - ], - "11": [ - "9b280e2adae37d2b17a173fd1db48c6e0b41b3a8", - "c3b88da1803a43ac8f48fb83031ef63829195df6" - ], - "12": [ - "7ca9f5865e7c9735527f696ab9737db996e0acf7", - "2b0d5a97bb43d78567b01ccba3f2267a60d9ca79" - ], - "13": [ - "e69755289bfa37f6028f242328efee4d719669e2", - "720ffa9928d90ab41ca12c708587bd85b9d2a209" - ], - "14": [ - "df7286d5e7359b54788a8c99d1f7a675c28cd0d5", - "7161abb91c1a480404f15a1b457ee8d32c257be2" - ], - "15": [ - "c05f8177803bd1bd63f08e1a69fc7b250160d792", - "68f4558e6fc14e54520334bb1dbcf5458d79bf8f" - ], - "16": [ - "7e6697ae64ddd0fba225a99df2572a4974d87ed0", - "5cb74c6440123d58e37b95c53f71a021a833f8e4" - ], - "17": [ - "345fb53fe5a6a47fa2269dea162655be83b65252", - "df6e9803fec54c8468c9798aa81e2fe76f18ed31" - ], - "18": [ - "7b83aa16a7cf97719d69889105679a51cb2c5e20", - "b7749247b948f804bac95190a193511c872e5f83" - ], - "19": [ - "4728c1fbb081ebbcd4dee1725d048d5379162330", - "4fe9d562d6bae8f9872c352892e675ca7c5749df" - ], - "20": [ - "daeee5e4b16c7c848473ce8bca407a5a0ee085b8", - "26e3d46a93a1274ebb2163285dee9ad5679c97a2" - ], - "21": [ - "6f13e92d8d50502ad298f490105c484938fdca40", - "058a846920621514b1584a4a95ae0f0359b68edc" - ], - "22": [ - "31761dc4ef798feea4ef1db9e613d271a9aa1e08", - "5dd8b03f97d346e8a5c628ed89914298126ecd6b" - ], - "23": [ - "1252c75081b8b11d06ccc13f223becf2178c74d5", - "58f5d3c2c5f35deed2de5faf049e295d3e907ac6" - ], - "24": [ - "dc85d8f5a6577f8b438c38a98836d91e8af86be1", - "bf03e622f96ed0cc04abaebfd4958129b7d9392c" - ], - "25": [ - "c22903b64759cefb3899d07f650a6d854db938d3", - "d280fd764739198a423027dd28140e332f6edf35" - ], - "26": [ - "a23b4e339d71b80ea44fc86ef0eb7e4e19d0120d", - "4655d0811691d681929f24f1abea686399ff6431" - ], - "27": [ - "d472a265979192f63562029b4181e38c9d620b13", - "b445c9fc521f6bbea4ace7168d14fad81b96f124" - ], - "28": [ - "c7f8cbce80f5102bef78d61e74ca273abbddd346", - "2e75c87dbd67eb4a614e9bf727e8ce6a857156ab" - ], - "29": [ - "065ff7c0a0bfff1cf9b94356f7531e262311fa53", - "ff9c3c6269dc648dc618ed43e1b505e244933a02" - ], - "30": [ - "a16da6f6d2ff060587f722527197c3a0a673e30c", - "f9f2962c168f4f07e6776d4a9f225b80d8cc8e7b" - ], - "31": [ - "6a969d4c705257cf8818ee7ba8f3d0185e719aac", - "4fe9d562d6bae8f9872c352892e675ca7c5749df" - ], - "32": [ - "95348cd31f50e86910877eda64ddd90ff204df9b", - "2537b35cad42ffc2b2730f78b3627d19f8b237fa" - ], - "33": [ - "28466548ae49858de893bc7a71d99e6a54bdcd11", - "0863d951518e4e2b081fe8780b342f43c4a4eb2b" - ], - "34": [ - "bb0d16cc6f8bfa7d3da5c81b04c5bfd844875bbc", - "f1569d5780aeb5221eddbe53980f95522aac9401" - ], - "35": [ - "fde3c59b202ff9724c8c45191f9a1be6adc314c1", - "8ec8eaceb1752c0a1bb27ecb8cb3473c6ced1e13" - ], - "36": [ - "4372ba0d09345ca0bf652132cbb982f0a1fcfdb8", - "15bda25a6ae18195e83ee75be612d270c1e59eb3" - ], - "37": [ - "75bf00efd130ad532019f81745a9a20eb4eb53b6", - "b22445edda61a5b20c161dd674eab4e85107922e" - ], - "38": [ - "66f938cb94f65f3a2884d6e6941a3920606ae543", - "da374d23eca5c4aed477f4ba2582bb8d126e77e2" - ], - "39": [ - "1467b1d82e2681265610d3eb221161b376d6bca4", - "8692f9b56aae015fb87809dce9555959f947d58a" - ], - "40": [ - "98ce9a0108677eee71c41cee60eaf395aca8639e", - "dec86d2013552defbf6d878a6ae7f436507f2f30" - ], - "41": [ - "5125d9f6f1a98c9ee00bc40ca8cff89c75a04ab9", - "fdff35175ced1b8f4b51cba1061fdfa5cde39cda" - ], - "42": [ - "b47d6d0b1f089fa1e0c4db8a5620a58527e15ad6", - "f9f2962c168f4f07e6776d4a9f225b80d8cc8e7b" - ], - "43": [ - "8bcfa68ab1a48189bdc8a27db689ff1ee0b0e8b0", - "f7e6553de59e1040b408671cebd4bdb9f10b1bd0" - ], - "44": [ - "64c808aefa2da0d81ef4df4cb611e09abb9c7e44", - "dd7dbceb87c57f2da09d5b1cc0785d5aa5eee864" - ], - "45": [ - "3ebe21b161809bf5c210f0c776aa2baf7c5fd16f", - "bf03e622f96ed0cc04abaebfd4958129b7d9392c" - ], - "46": [ - "4424cddc61110bbdd9ea9a79b3e221dcc5a32d85", - "46c09cc64a2ee13a0e0104106ca37215b7e998e7" - ], - "47": [ - "3ab7bf6a42fd7d0bba7f4d3eba99c6962413088e", - "5e6a4ba53210a4a736cbbb9b0a0bb45d05d65eb2" - ], - "48": [ - "5ade67b2e9484ea027802f90802527bf5a12e1bd", - "26b0d27f442e7784d824feab858368ac9aa2989a" - ], - "49": [ - "c76c552ab0f5c6d1097aaae31e01b27d94579daa", - "df6e9803fec54c8468c9798aa81e2fe76f18ed31" - ], - "50": [ - "c6229480bdad787e51b2abdd291d17be0bd06c10", - "73d3b3a24b1b5d393a88da3aeb548f6a070dab57" - ], - "51": [ - "684bd9a978de8f02be0a1cc03f4f357d07a3c8f0", - "a97f0af0900d244c2a9f69d593ff264910f79b17" - ], - "52": [ - "e2e11323e0e4b225cc61574c9a6c5420ee04bd09", - "55b1cd4095a15dbe4ba50698891528357a0ee30c" - ], - "53": [ - "d9d96b07f4ccd345400f18c0303ac6e2d0830c5d", - "aa601866b104c34844e10d37b78da7d192ab8a8e" - ], - "54": [ - "8ca8c0c61aec7c3d266588ae294cff949893e670", - "39c013b39e071f8984be500f05a3fee7366ccd9c" - ], - "55": [ - "3a90fc9a73bec5fb2452aa868a9ac432f8089a86", - "6f795bd4201bb38e30ed1377195ecbfec6e81306" - ], - "56": [ - "6b5050ee5c66a58b9adfce55d71851748557c3f9", - "e669c95c52922e8924cd70a47e2ab4242e52312b" - ], - "57": [ - "2f4c4991c56ef8d2929f268b6552f72bb918facb", - "ac3906472ae092f01792a83bb939c31a9d6ce6f6" - ], - "58": [ - "dd6e55030f0820790d2d3acdd19fcba208f8775a", - "62f4833a305cfe1e0d717c84041644bd7f4cc1c1" - ], - "59": [ - "ae54aa99443c6ecda1fe03faf4cd253ae786ed4a", - "2a6f2b2110cafdc60628b1afbea20f7065f767e9" - ], - "60": [ - "aa9dc4b4bb437b931188939b824ef05cc6cb06b0", - "68873e3158bc27659e5d26960c540eac064e4cf7" - ], - "61": [ - "1fa9e9c99acc72b3393b4b1406afbaa1c6bcb35a", - "9455be8a9d7165aaaa210b819a6115187ee62399" - ], - "62": [ - "8ad9fcc6877ea55f88da3c67d0986781a6ace9b7", - "b1893249ba96a4c1ee363fd090bd6e5193b296a6" - ], - "63": [ - "fa4f27d0bb2f4ab023bbfa918f84d9e45c1d5e23", - "be2e4ce325447505b29edfabab36d541470aa5ed" - ], - "64": [ - "30200cc493d821f88b03a9123a123107145ea245", - "15bda25a6ae18195e83ee75be612d270c1e59eb3" - ], - "65": [ - "5c677b7728b570a8f803e4cf2c647d775c43ae73", - "5a32062d78f2a7de582e5dcf6e4cbc390779f330" - ], - "66": [ - "bb453a714bc5fd5b76e4f13fccd13e636d16a01b", - "aa2f935e5a430a5361ac02ed9a253f9e842f1d9e" - ], - "67": [ - "18070dd6589a4293350154da26e1601f24b5f26a", - "3e8ecf183aaac517385ddc2ff77e7e15ad048b09" - ], - "68": [ - "272f25092500b91536b393c27b54d5dcac11bd2b", - "0cd47cd68e0b6e871f6dfadd96b2b7e2980b4e13" - ], - "69": [ - "550cbc693f58be2067328f42bd764f3bba02a8ea", - "05ec61b8f09c6f7e40db616f330047e977623d56" - ], - "70": [ - "24b8b7c0b373a12f21d243e037511dd708af848f", - "ca46ce17e14d4f06f8220c9d5c8aa560946fdef2" - ], - "71": [ - "7bc7f991ad857ab4248eb096ddcf36d3d7b176ef", - "aa2f935e5a430a5361ac02ed9a253f9e842f1d9e" - ], - "72": [ - "7ae336722df15cae26e58ff30da35e81aa1efe34", - "ddf87c2f9af311f0286d8acaf15a6c4f9cb681ca" - ], - "73": [ - "c6fdf5e42df79435696d00fb96d988a253c89d6b", - "a331640ad8cff2199e8624d5061e586b7471a4b4" - ], - "74": [ - "3409683809926be826395bd3625bb8fa0d56c89f", - "9625db43cecbd393dfb4eacb223c0e6b0fe338f7" - ], - "75": [ - "bdef580f2c572d99e06fe5d5e38cf7e8427d6acc", - "2c7329068ec28e88352d35427e62e09e7c6114d5" - ], - "76": [ - "5f3cbc4c037ee6ee22d3fdb21fa932ba7ff0c0d4", - "f53d56e46acca48455b041d2d78e6b10f77d56ae" - ], - "77": [ - "c2ec3c9cef291b1647fef8b42f284db4b5170713", - "ca46ce17e14d4f06f8220c9d5c8aa560946fdef2" - ], - "78": [ - "5c6c43fc6ef79ad1354fbcb0e5a17b41f0861d52", - "26b0d27f442e7784d824feab858368ac9aa2989a" - ], - "79": [ - "2b2c5efc5b73924b5d510739ed47f8cb0686ea3b", - "e2b30d2bddd701dd07f5d8db0e8d617d284f7cb3" - ], - "80": [ - "688ba4c2823c411ad1885565209c5adfcd1f7409", - "06865b0a31d33450af87fa26ffa1340465da66e9" - ], - "81": [ - "c594677103a85ef6a99a4eaa2e989163d2b3ac25", - "dbacaba9ca3bc4456ef7b7fea73dd2a45611e878" - ], - "82": [ - "1ad1a25d00a4e1660801df27aa12ded36c49c8dc", - "58f5d3c2c5f35deed2de5faf049e295d3e907ac6" - ], - "83": [ - "280eab645cd51cebbf5ca8f25933e094184ccfc2", - "4fe9d562d6bae8f9872c352892e675ca7c5749df" - ], - "84": [ - "3da49b4b527030e5feb982a4c8272535b1c35178", - "4fe9d562d6bae8f9872c352892e675ca7c5749df" - ], - "85": [ - "ed2a5e57f4a1087a13d34af2d1434f010cd6af2d", - "1d1362d1c6da1556c58c7f46626109209fd310b2" - ], - "86": [ - "42d6c5735e9fd1db4424ced5f0874a6d3410b314", - "7397892dc10188e62b59ba3082df42c684f77ae1" - ], - "87": [ - "de388f66425e5b6a71a68d148827a5768abc3ea9", - "873afe197991bd32bf73b8ff553c871c40336d11" - ], - "88": [ - "967f932dcb0a293df59511ec7b7100557c8506cb", - "8b7f9f62a29a9a68c04a0d8305eddae6bdbc7a47" - ], - "89": [ - "a9082af3217cbfa78e59030c4cd4f44028b8637b", - "2b0d5a97bb43d78567b01ccba3f2267a60d9ca79" - ], - "90": [ - "4096803646d88dadef612dcaa4577d0cb6bddbb1", - "16ce6b444b05900938e47ec6286a361df0d74bb1" - ], - "91": [ - "2522ad83674032c43347b79085c665e606c068b3", - "b0491a0da3071ac9187644923b245ecdbcb6b126" - ], - "92": [ - "99bace4e787b0adabb83b4ef1e9d2ef6b4fc3fd8", - "e263db9a60d32aab08651e7e0cd7adb8879f4733" - ], - "93": [ - "2e4a378e32d54c75fc52f9c37e2df03702daaf8f", - "f4b7bb62a8d397802c76903c504bc547130e6037" - ], - "94": [ - "ed46762997d439d0eda7bcf0525806a00f2ef7a2", - "dec86d2013552defbf6d878a6ae7f436507f2f30" - ], - "95": [ - "9bc4f43c3d167bbd39fd2a81c6dd67ba3238c985", - "9b5905ef570b0168ea438f5aa0bafc149188bffe" - ], - "96": [ - "f263849197089878b6357d10edc33da66fe6f12f", - "f221f8b07d4e24b6668811bebf404dab371cc771" - ], - "97": [ - "4281bf46663cbec9e34b4976f17f0f9187b9f109", - "74c80b62604d2983ffd4b18ab99c9fd655a0430d" - ], - "98": [ - "0c0fd90f2f1f7fe8aada1b4bc7cbf5a9c762cb36", - "5bac8283b6dbb043b162f548793b4c1bf36b3987" - ], - "99": [ - "815d44f75c729f0ba412ccbfcdbc3e7b45962de4", - "e669c95c52922e8924cd70a47e2ab4242e52312b" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-05cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-05cpp.json deleted file mode 100644 index b7c36e148..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-05cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "d27801df1fbb2e78b657214a6987c39a9590a6da", - "d3f05dd5927d0a0b6df20bb8213935db5959de6d" - ], - "01": [ - "2404a3f802e08847ac3b6ce9344c8350c2b5b7fd", - "424d0de7eb0b3faead8120be4019fdc9aaa789ea" - ], - "02": [ - "757d9691db401776b9cea804d41f786d409ab5ce", - "f0e3b4119a5f773786307aaa48a5705e96415ea2" - ], - "03": [ - "c8a7a23fd16c49020145b5f53bfeb529a5bf6fad", - "0a102cfecc126d4457da7b0fd5ee7ecd16f7066a" - ], - "04": [ - "488ab95e4075558e3c9596ca501ef0d6563c4d2c", - "7fc091b440ceb026d1ab8ff05dab6f895f434fd5" - ], - "05": [ - "c6e17f7da73021f0c340c3c652f360ab750e748c", - "4742d1bb778e93b244ff3c7ad170cfcd8faeac98" - ], - "06": [ - "ebf2d7d8e1e4492a3ed18526f6f2a3abf287bcef", - "2b5f753452ade72e62ac0f412a6d0fcbaddacd34" - ], - "07": [ - "cd894b5104f7d72b982174249506b63cc568615e", - "b15dab8ee4a43dad97b4d21d3dd3b9e3b95da107" - ], - "08": [ - "4b3ea242c8ed7d7e413b6855d5057ef9e0010abe", - "a4f4a9b2c7399d895261f1c30a702abdac7f016c" - ], - "09": [ - "e9159140c99a0aba48471b65c06b88fd6df13592", - "0bdbc07205a9ca74344661a6a3b4fc381f22ba55" - ], - "10": [ - "39e6f5b956e300a8f608530e8521d521e50f3817", - "dc7c97ab0147ffed75472c591758d7ca65d96c63" - ], - "11": [ - "c63a2f1e6909f6971bfe999575186fc66a90127b", - "60fd7f116cf7957305729f591522dc7c7e1d0d13" - ], - "12": [ - "be916881a1d7579f77102e6286888c747ab4a072", - "211df8ca85e8399acb5c7d495eefb1b09130ddf3" - ], - "13": [ - "a4f28931f6d09a929e4857ab2cad9ac5e5d4cd5e", - "766f7c83046d196311959dc923835d63c0647d11" - ], - "14": [ - "51bf221f3d387783a11dcb669382a54eb8d8afe0", - "4ebde30f88647134aae8b71b38014058a7d40eb2" - ], - "15": [ - "9d1865fbfe6ac816d4e03017f4a8555fddc18d2a", - "a94e572236c45c454d7f793fb08b5fc44f0e61e1" - ], - "16": [ - "2f0587b6970355bda508f648f9ce74d1ece6d7e2", - "29bd53e06424dd9dfabf7b45b0255d4ee32938bf" - ], - "17": [ - "4e48bd3d02cc2dab7f736085a5244306bb68bc12", - "b6372f6265841ac661fc9a61f80532ab3b6524cc" - ], - "18": [ - "93b875a975ee63b2393bfd71e4fbf6ceec05c51a", - "0bdbc07205a9ca74344661a6a3b4fc381f22ba55" - ], - "19": [ - "2d6b37a128cbe23a17db0d46c5ead1f0b645859f", - "0a90523bc293ffd4e98bae10104d9272414d0193" - ], - "20": [ - "819bcadbdf8085ba5c83e7f996b3a30b9873a502", - "d57cf1deef1b713f8b5da2ca72b495d58771f3b2" - ], - "21": [ - "b6daa133813d38b1d823270d0063991482422c22", - "b9c166e529e5c716b66d9de086666155d8b4cc7a" - ], - "22": [ - "c24500384c0bf7b86929094a0f4bc64924d6291d", - "01fa86fdba1b0fa11fe70bf2f378283d429b1e74" - ], - "23": [ - "7ef1979d0ac70a8558375daa5e03e7654e893df4", - "5616f7e30846e3f458c5f06b7aa52f585dffde45" - ], - "24": [ - "503ece1f653c1c5e1ab5ef1cd2b32830c2ba1792", - "b5cc6f6f2724ad74c59444062b5c082ff50ddf54" - ], - "25": [ - "7375d35958170bc51b29edbe7dfef8a6c068f895", - "5a607a25e52f34d3583f390ee4d7ada4d940819c" - ], - "26": [ - "68f3be73f614f5f8a8165072db0b769aa0cd6fda", - "3289e71b2d998a7b0d6b5c53c11d2ea146d1b36d" - ], - "27": [ - "19d110c780a00d1bd2811915df3a0a0d383d056d", - "2456b3a37a86c92805e54198038ac21dcadfa41e" - ], - "28": [ - "ab5c9352072081e32840d61a6151b14cbfd68f14", - "dde94f7546e3d8ab9b169cfee84c96d80346f626" - ], - "29": [ - "19556d5b1b386b4a30d3b7c8a2cca41bcd4cb3e5", - "9011230e53aa2050471e52bd5d0c51dc72c55410" - ], - "30": [ - "0e05bd5835502262601f15902cd76407e1d7e1c3", - "b435f7ac221f74fba4cfa2beee8e43e2e2b65cc9" - ], - "31": [ - "247ab25172c21cddf7dd9966bb6cad00c9dee74e", - "983906f3ffe4595176637905eea7d6daec51917d" - ], - "32": [ - "1367402b4403e6849f228c737d9a9d3c84e784b3", - "3f66bc04f3236dd3078cf550e876d9d11fe62b32" - ], - "33": [ - "e660e84ade01ea9a6cd9806bc693d73831d3ae5f", - "4ebde30f88647134aae8b71b38014058a7d40eb2" - ], - "34": [ - "94a9185f76e1b1c5b5d1931f342127312ee625ba", - "f78acf13c83abcdadaca2c86a364971a5f21a831" - ], - "35": [ - "338bdf44d9c7e998a19d8f4d2ec08836585d6946", - "7a0e9fa46246abaf11c2a49ee62950498b9bae08" - ], - "36": [ - "90de12a027b9dc096e3ac17f0c03de3c3b1bb092", - "dd7dc2a4c44264ca4cdeab2dab1df858f9b4e87a" - ], - "37": [ - "dbf8b9a606391cbc1929750c3b51ad5d88400748", - "df8d5ef4571190f55dbb504293d20891b7360ca6" - ], - "38": [ - "45570e0e271644fb1517e4d4e634b7c3d67973a3", - "1327df65956c065de6c65a62b8e8d35d0f064911" - ], - "39": [ - "401439651c3009fc32271219e2fc50497deff728", - "1ba5699d97c7d7d7686ff23907dee580b9d9886f" - ], - "40": [ - "2685f4bc60734a22744bf832e6799b78f54eaa09", - "4d475a89b3a5fef5fc5a177e0fb93ecef81af294" - ], - "41": [ - "9c325692e1678a6f7fddd2ae58516624ea464289", - "10916061b7bc57b5461b39f59147619834b1c55f" - ], - "42": [ - "35a1fee260a97077a3cb06b3d8997fac173e8cf5", - "16769275f105ca3e087294944da62fa2747ab599" - ], - "43": [ - "4c66d0f4eb2209e9eb0c61fd7b802dfeb4c3107e", - "4266046344b08620b7283e949916ccd09d71a1ee" - ], - "44": [ - "a0c0bdc384c60834ca7fcd584da200181e177289", - "ccb70de9109b700132cea745e2ecd5355b38fdeb" - ], - "45": [ - "642fc50a1bff9001bce61d2598a571dcf045812d", - "96269db2a10085c8a2e00fcc62f3d2b6924afce0" - ], - "46": [ - "0c47e43a089fad46a849688cb07c257c12f6ea4a", - "65cc73371501f5c45d728189f2f2db03ce4eb532" - ], - "47": [ - "3917cbb6e2c0023ca4ad3be3b6620e472f02744d", - "abdac1dd568e0edb09143245618cca92158d66cf" - ], - "48": [ - "a095fdce0f534282fb8083ba8b3331645415bea3", - "a04e1bc38bafcb13907fae92c11f2e25b6fa7e69" - ], - "49": [ - "fa6936566b4264afd17ea13587f8d93c77fd01c2", - "bbf7bdd24e552951fcc0e1af8724e87139270a5a" - ], - "50": [ - "9ce044476656b18733039ee517b01b64d22d1531", - "e0aabbfe5e7195ce393e5af52f78426da23d0f81" - ], - "51": [ - "360a41d14cbfe978743a91e5bb56adf792a25fe1", - "e6dacdc6a3d5831969e674de4fa657513a56f350" - ], - "52": [ - "70688f9d4824b17a765d34128aef2e7f06dac1e4", - "10f8155adf3b0a14e525d940dcf729c8457bfd73" - ], - "53": [ - "21843b75660e5925ad4d74cc6a4e9121be59e295", - "d57cf1deef1b713f8b5da2ca72b495d58771f3b2" - ], - "54": [ - "06dda38a615a569479c840b4faaafa5009de53c6", - "424d0de7eb0b3faead8120be4019fdc9aaa789ea" - ], - "55": [ - "e4c5eec1cd9e9631e1d42d3c0ee46d026af3a29a", - "701f083bf3969fec7f5a528ef189dc83cd6bf1bc" - ], - "56": [ - "ad87f4e7a31e0bd85c13e59c3b4d801a733ea556", - "3903864250d501256c57961b333328343fbde658" - ], - "57": [ - "28db851862a38159f55289dbc91841c1965a72e1", - "10916061b7bc57b5461b39f59147619834b1c55f" - ], - "58": [ - "33f08a1429d4998b81b4065db863afa60970841d", - "b1b783e9da4b385e1c546a611ee67d3643380ec3" - ], - "59": [ - "d6fddae81102d1dbdfdc588be230d67b919c3858", - "a2728b0d14ac2fd488b72262d274443afb84346f" - ], - "60": [ - "442dc3d2687c47468cd72c8cc1e5cfa06031840e", - "b435f7ac221f74fba4cfa2beee8e43e2e2b65cc9" - ], - "61": [ - "2eb23d2e7124e66b637f46f3ad58551ce85c8a04", - "628cac541f1558cab1666804c37ba4ac9fab2607" - ], - "62": [ - "232fac521011e10782f8b04cd17898e73629aef2", - "d82147de161f17858509d11cb2898338cb1d8a32" - ], - "63": [ - "f5f9bcbe8e49f74577889122e88154fd7fb3d39e", - "1b7387c5deb3007a9d034433ffe656d69cf502f9" - ], - "64": [ - "de00af1f9091f231cf3e7da122298161017556ba", - "2d3c8510928c6f313fe9eda920aaea7df15bac7c" - ], - "65": [ - "01cecb8adb80326c9011197295137440003770a9", - "a4d33b63598c7f751025b7a09851f8269e03e578" - ], - "66": [ - "a0a66c24ebc2e2caee0d7ed5c08043a438a47f93", - "d74fbead470798cfe6c8d10ae0bdb82375a9b62c" - ], - "67": [ - "5ef6bc365de87fee4ac23ebe98a9828f5e0ba85c", - "1ebf78b71fa1a6fa76b378e98c3202b39cbaa3a7" - ], - "68": [ - "3560857bbb8e89587835c803c728411f52b1e765", - "b5cc6f6f2724ad74c59444062b5c082ff50ddf54" - ], - "69": [ - "d949267661f5c7c4dc202709c6d9084bbefd66d2", - "9284032615881a9808e42fac9e9f7fe350ffab1c" - ], - "70": [ - "7f4e9e62ca955ab732434e818c99854f26e38df7", - "a08584eb1291dbf76357546051f98db1c05546dc" - ], - "71": [ - "fefccb067a5e01180548508b460cb4ad75763944", - "d74fbead470798cfe6c8d10ae0bdb82375a9b62c" - ], - "72": [ - "a42670f73dd7de4c47226483ca00439bd850c6b6", - "74d6eacde36197a50abc32b6dca14d1a8379e1f3" - ], - "73": [ - "7a015be57b1b37caa27e8573e24b8b1008925b1d", - "b6a4a91894877dc391a8aad3b29330a207cd159e" - ], - "74": [ - "18a0493930118faa147a693211d060bde19c0afd", - "d2c8efec3a05ef9f60912c2461f10379fb78e701" - ], - "75": [ - "a816e8438b22a67accce75d74fbf8ce5dd355f4c", - "edeb6d46889cf083fd2d95b931b548c9f7675d08" - ], - "76": [ - "110c092c3de91cf64ac0b6da8ea24b4ec854a118", - "df98149c1f80135f63c362a7489ef04370c4df27" - ], - "77": [ - "b15424de8737914bc9c65ae3f48e55f3fa38d900", - "a1311d7143dabe20cbe628eaf115ab8e4fa19193" - ], - "78": [ - "78c706ce7b0e613104d3f2b54bf2f3a9b7d6652b", - "e920f301e1846128da6881fe7cc204dc7f2b61d0" - ], - "79": [ - "919f0c983e5d1250d16bf7a4b4e7165dbda8a168", - "9c8a0330ebf25d112d35f3dfd49c78891074473a" - ], - "80": [ - "abc502d1b96213d5674cb60585312dd9852db1d6", - "2d3c8510928c6f313fe9eda920aaea7df15bac7c" - ], - "81": [ - "448a88cb0f240f2ca37a27b0b194657fa2d5cf69", - "eb61d95e62826fb66dcb83d5acf75ed7faa9d8a5" - ], - "82": [ - "6891bcf1fe5debb0d062662a49a00411e6ad4f16", - "966455963ee021c129bde160acc3f7291cf83611" - ], - "83": [ - "78f96e01815a501231d979295670ff64d94a3ddf", - "9284032615881a9808e42fac9e9f7fe350ffab1c" - ], - "84": [ - "abc2d37be4e874bf54f1adcabea273a5b7579e9e", - "103d2cbb46a3647a91ec72edd2a2b9845e27a1e7" - ], - "85": [ - "b82d88bca0951ab870bef58581c6d86c2336b9a9", - "9bee94fad48b1e43bd9a02851ba3ebf003659c7b" - ], - "86": [ - "8e029648f4aa949391a1468431d984422f0510d5", - "a02ef0d09412df3a0b6deb5387c9b14bc7077ef6" - ], - "87": [ - "344a8f167080aef03f1cf28fe4c2eaa89fd80fd6", - "60fd7f116cf7957305729f591522dc7c7e1d0d13" - ], - "88": [ - "e334fca098494b42662de552904c3c05aff6fcc9", - "d94f364f4e93238190ddc4f412a4a78b20de2e31" - ], - "89": [ - "ad09759dcd023c62d5e5b97d6b7306f9a40165ec", - "655548d8d2988f9a46115b09f3e5599436f981ce" - ], - "90": [ - "c0480bc6d7eb93abbd5accef2cd7758cf8f4c8ba", - "23677ba48f6c2eacb2483bc79b3cc42be81f5343" - ], - "91": [ - "048d4dfcf872e8c79b411728df27ecfed1a6d5ba", - "a171babf0fe45531278516512178bacf55d676a0" - ], - "92": [ - "543b4a51bb303edba0f7ecbfb631844199430899", - "544eab49b883a9e5ab4b3454e2163b2aa77a6cfe" - ], - "93": [ - "2ac1c745eab397d7d46cca715e64856bdec70ab6", - "a171babf0fe45531278516512178bacf55d676a0" - ], - "94": [ - "f5d0cd645c8673c345f70049541e18342bc90ca3", - "b744bc78636cf48fe6928d641c81adf82ca0d421" - ], - "95": [ - "be22cfa477329805208a78aa84a33d6596375720", - "b744bc78636cf48fe6928d641c81adf82ca0d421" - ], - "96": [ - "5682d8bef666942806d26239ba31f695944d6456", - "f6bcbd546bb265077fbc3af4e287a39d6a1f15bd" - ], - "97": [ - "0a5e3cc5968e25d9d7cf13126fe184747b8d4c12", - "69a9bd35e8e9e713162116d5b00215ea06997426" - ], - "98": [ - "9b236ee3cac6169e46614971cce59bfd31ddddaf", - "a04e1bc38bafcb13907fae92c11f2e25b6fa7e69" - ], - "99": [ - "1719ef93e9877a1ba580c07f7da68625deb82ee3", - "899c87f7981d371f77a68e723489bdd268f9b7d4" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-06cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-06cpp.json deleted file mode 100644 index d6f130d6c..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-06cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "9754c7325d9369fc974a22814b51f3695f4568e1", - "6da0a11dead6ca82a4946821c418b01b3008754f" - ], - "01": [ - "0b3fdf6f2fa69b795ad82164549a27b6c2841259", - "75e92744765e897fac25f374b8f20107a2149476" - ], - "02": [ - "e25b9e248809f273c4964a5551a76eeb7ceef1f1", - "12f931779a6fd323000bd930da48e562d407cb72" - ], - "03": [ - "d94a9bac46a7f01f89776eab9ff1d4869741abd7", - "43957670e2c6e50894a1d1f25c97a45f38980555" - ], - "04": [ - "88915231fcd0f510ed37f1ffa84cbd0334d18404", - "d2de0fc7c6263bc1302aa370ee8ae72e482efafd" - ], - "05": [ - "2daac7f616ad04a970aef83eb1933f2e2d3c1af5", - "ead69389bd624fb4a9629d6e60b5a9d41a14aaa1" - ], - "06": [ - "8a3a83237b6954e23ed0467e6e71e792c4b9f0c0", - "a6e6775a803cc0e5e837b30745844f630fdc197b" - ], - "07": [ - "914cbe8319b056800251b84b2df71ed3bbd9d606", - "71c9c1b715b3bb78c50505534b1cc23a98293312" - ], - "08": [ - "15eb92e62575e0ae53fa9ec445f066cb5a5e8116", - "e1bf3ceb8f7c8a29bcff09003b3dd7d399789714" - ], - "09": [ - "dee520fcb5848daa7767bf78a276fa4697cb77f1", - "f9b2406e5e4296e696985ac48f143ef51a088ba0" - ], - "10": [ - "aaa3d5f57d7d1f75472485312e05bf3b9cfe9a08", - "d0f0df774c6c9a9a058a63b88ed48393353ea4a5" - ], - "11": [ - "b67d9680da90b9b45ab60654c0e155c7686f4df7", - "748ad1667412d013b905a7e738a3a90950d73824" - ], - "12": [ - "1100ef270ddc1ba2e5a022326667cbe640340f0e", - "c58767796cf83150371370d9c13ae39179c9bf53" - ], - "13": [ - "396e1595ae0932995f3d91c7a65073ec50dfb3ad", - "0d27fa12aa2490f4d45d8f7f16151eaa64eeacb2" - ], - "14": [ - "38279d227268295a19bf14b22a6314ef454c83c2", - "81edbc320ba99935746b1965df7848a5ebeaf42c" - ], - "15": [ - "674b8bdb59c5c764fa5eb2eebf2b524aab054ba2", - "dcf019b222ba288b1902c92c7133684b66280eef" - ], - "16": [ - "0a9120959b976737e13d577b343d3073feff0de6", - "93ed9d1caca7ca0487f43bf33471d72485b5acb0" - ], - "17": [ - "0bdb7b32c022d9b9b7c8b9a183a52c5a62ddb7bb", - "94067574061655d14e6ae01ad406dc8f08ae9e4a" - ], - "18": [ - "6b41bf047fa664a6f31343763b4cba13f3615e28", - "875537563b1e50f26a1b80574a2e9c3245bb510e" - ], - "19": [ - "6b2df3102839328ed37a27674770462d3697adf7", - "915426695fbbf09a4e275dd2a9bc9079eeaa8e50" - ], - "20": [ - "800a55a8a8995184d760e1cbdc9d424f349b80be", - "5df3df308bb15e8c29fc2af02df7e6e0497050d9" - ], - "21": [ - "d3a5722ec552824e746720357b04c87af9b9d7f8", - "dd248b40cd2cd3282593122bdf4842f2476f9f15" - ], - "22": [ - "648c4005f0d30729e713b90a47757c0d4b635e22", - "9c3f733452ff9fa15dfab48aa87d374d9e8ae262" - ], - "23": [ - "238bb008926046c830c56b5bfcf1214fa3deec46", - "d1ae894ff9b96936479b1e7a928a4fc63a058642" - ], - "24": [ - "b1f66bbbe94d30c315ec496211fdb7d779f6d566", - "ddd16921620a21269299658bad6470c4f39ec6b4" - ], - "25": [ - "b67cc6ea3b834e911f5eec48ad05f82dd64b94af", - "aa44d652de9af382287e0e8c55ab7262acf17140" - ], - "26": [ - "50c73c1825719fd2b25e30229b2c0b3a9952cab2", - "592f61f72eafa4e4f8eee3fb250621f0ca9cf1cc" - ], - "27": [ - "e0084cfafe70d8c8c3872e2a92a2ebb2e89f2169", - "b00d3b6675f31b332a5caf34765f78a6519c6b74" - ], - "28": [ - "c786c9a172329a841417d94dc7a952468afc61d8", - "75f8317b265c549af12bb01f3c643e95046474f0" - ], - "29": [ - "bf9cd38ef5a54243fa980d16c938c545592ec1df", - "cc0750d2f406b973134cd542db9bfb50cdd72680" - ], - "30": [ - "38855a24be2e50d4aa61678195af87ff499e75ba", - "3b555210adb42301c8eea5fdf8e864ab42ac1694" - ], - "31": [ - "1fc751cc39bb438fdff160a649109fa5c2ea8e02", - "d05a9c76c9804375bf91a887d34d6db05bd2be5f" - ], - "32": [ - "223daa779eefa2ac497fd4843d8cf4c8b952d2b8", - "3b773d61f5e20a7da6f31d396a2cc0c4150ef6a2" - ], - "33": [ - "949bc722f7d126365af421ed73650d0a681a95aa", - "4675273400d986861893ba15fed317f5ce353f38" - ], - "34": [ - "1f2ce862750bffe3ff356b251787fb85abe59b8d", - "ec3475d07d815c3aa185db82546d77ad63d23c4a" - ], - "35": [ - "5a78312db3b23374b8aec3b76c321db703e8b1b1", - "cc0750d2f406b973134cd542db9bfb50cdd72680" - ], - "36": [ - "5572c816ca188892469321c26f4ce1adf3bb1589", - "d05a9c76c9804375bf91a887d34d6db05bd2be5f" - ], - "37": [ - "dbbff7c9b9b412be566ea1240040aff33fc05c6a", - "75f8317b265c549af12bb01f3c643e95046474f0" - ], - "38": [ - "c304880e70169c938222cb79196b12035ee7ecdc", - "37df6fc4db85a51c8d5845034d80a47e1fc7b6b7" - ], - "39": [ - "72d69ae9fc52a0f748a55049b885f57f59728d67", - "748ad1667412d013b905a7e738a3a90950d73824" - ], - "40": [ - "cc79c2ade8302638981367a09fc9f054b4b85953", - "142bc996cba9dc6037d193557c68db4c102984ea" - ], - "41": [ - "9689b64d42a31cf82d9f73a557908d32532d08a4", - "1ed4534d238eb7f60e68dae21cf8a13eac47cd07" - ], - "42": [ - "ec7565a6fc757f30675941ce11fba7b1283c1863", - "aa44d652de9af382287e0e8c55ab7262acf17140" - ], - "43": [ - "412170a8cadd502e1169607d371a51dbffc74d7b", - "ad75162100c15318cd28e1863b5822c83c655ed8" - ], - "44": [ - "1d978ad9039e011f6e38271fca51b8d8a44a5bf9", - "236fe915a095565f6a0b72a11661648c41a3dbaf" - ], - "45": [ - "e1579bc8ba5dbafb80b1a54f514dc9eaca75f899", - "5c3bf4b6cb80b90d18acd9cf8317ba91bfb830f8" - ], - "46": [ - "09f707906aa6e211fe700ed8806627326c17edbf", - "45642ea87b61d79bf8a8cd096100fc7a8aff49d1" - ], - "47": [ - "337c948b1d482069c8ab713b2790b5c1d70080d2", - "8667da0e8ca313d1c1703608e5f38882af4d4138" - ], - "48": [ - "71e89c1f14afafbb67f453ce9dc01ddbe38ce97c", - "b00d3b6675f31b332a5caf34765f78a6519c6b74" - ], - "49": [ - "b254a6188a82f55ecee018718b241e724af1ad2c", - "c8d199fbb56c371cc393aa56cff6e5d7da657bd3" - ], - "50": [ - "6e5fac6af1d8b4087fa3d4d75f3eded2e73987f9", - "b156e149e008c71e4a9be5c20dd7f6d9aa487e1d" - ], - "51": [ - "148143db97db467a45c900b749967d71a4715865", - "beeba977e768e023e19c8c6e8eac7a2cfd4f11cf" - ], - "52": [ - "d55f19990ac39d5dc9ff7864612c262665c308fa", - "d0504db42ed2038f30d859ebaf9329732da46f73" - ], - "53": [ - "9ca490b8744887177372b55904001187fd657a74", - "97fbf37f08ef35f4d8b9a7a65be644081a8a9a78" - ], - "54": [ - "32f2af5e18162e5761427d3ec97fb950a378bd31", - "0740dea50d8e756f0bc982e47ca235aecd1ee4e8" - ], - "55": [ - "048c7673bcc4f83ea8e8b419657db0de3b0b6a62", - "535f458915d90dd6d1519b8c6404e0094cea94e3" - ], - "56": [ - "ee8d14810e327644f32efcdae030ed94f9969453", - "4f527a1cad484123b176b194d691ab64d8404971" - ], - "57": [ - "e63aa3d8e9f8ff832181144370d37f80269d9201", - "e0a434162b3db12077b2baa51b0a3c20d1b28a12" - ], - "58": [ - "549f8c5889b31ddfb5460856976b7e2bd172b32d", - "9d3f14c12b8640701a86b78beee45583805b4014" - ], - "59": [ - "3b3c3f8b19cd0db23c7c9444bdf6e927a5b4cb32", - "c4ace5714e7c37327905e0ccfcf68ad2606c20a9" - ], - "60": [ - "d45a8de10adbb8150321c4dd19c20302cd4bcb87", - "3b555210adb42301c8eea5fdf8e864ab42ac1694" - ], - "61": [ - "3435c2b9ccd5225265853b5dd5a3e57145579fa4", - "80d9c34d0b5a12f1616158e3d2dba21e40b7bc34" - ], - "62": [ - "7c600a78f05487d708db269e1ac87e67f4a78001", - "8ab9462894be356dc4d44dec65ba8b5840a24597" - ], - "63": [ - "7deb8468d416506fd9a5cff115f2dcec1498bd8f", - "41ab036d173d998f643651f042cac735e2a06ea0" - ], - "64": [ - "f5ffbcd7e7e0e06084f8b1812b97ce646395e6e1", - "9da1cae571aa6079908c14fb0f9ff4935b9c12e5" - ], - "65": [ - "f91f56b50b41980d90d2188112258ace3b3d6927", - "399a0848376aaf2bbd63a0db352a149a39064ed6" - ], - "66": [ - "74d539192a51e53f810a5a06a01134f037ce8616", - "fd3adbb567f96ca9af693b9ea7ee146a38eaddf5" - ], - "67": [ - "d2b919f2774200d78b71fcb4ca5c0f517755c700", - "4651c769f5a4c39884073da7e2b2bcf11b4b20a5" - ], - "68": [ - "fad25f07d8fe3b94c97e000d141212b4d0253714", - "4547c997f959ebe4137f3ceaee6d3cd2b4dd27cd" - ], - "69": [ - "70ce213f73d88e1992af981cd5c0849438f96151", - "3628c8e8afbb1e4ef57bd532a6a0166d83d0bd39" - ], - "70": [ - "746e1a2f817c77faa1a12df7772b509610e8aa6b", - "3864d6d83ffd5377b2e00e996a8d6b98445f8803" - ], - "71": [ - "1af106737ea0f1b6fd908f0ac6ed8167623cabf0", - "982eec3fafe5a77d2e44ef57d3dc6cfff24a0972" - ], - "72": [ - "cb25eec1ee4e4dbfe367709c4ee5b03b6218b121", - "748ad1667412d013b905a7e738a3a90950d73824" - ], - "73": [ - "0eded9b1a6664bf38b555b27d0fe6932d1d2cec3", - "511f317f2ba3bde47a241bf6cf2da096573dff60" - ], - "74": [ - "a90fb1ef1ab3dc84ddc2dd03f89e2efb452917e5", - "e0db0a5754513d08d031759efed0dca442f97f13" - ], - "75": [ - "03fa9b866d63ed1c8c7dc27bb799ab29f2575d4d", - "72034a129013711c07fdbdfcd8b93b7c0b5e84a7" - ], - "76": [ - "059907c3391463f82ec6026ed1528d4b0f348eaa", - "4a9c1bbb88eab83419a0e9dda10bd795f503bdf1" - ], - "77": [ - "cdb8a205270b266dd9b56e6dae46168ca9aa3df1", - "b3c3a3854de8ee3db1830cf9d54b1ba170196773" - ], - "78": [ - "178e6332f784adc6d0e563e3f58f4f8403d54e0f", - "9da1cae571aa6079908c14fb0f9ff4935b9c12e5" - ], - "79": [ - "7bc5673030921336bfba3ad7ea3e927e8a5807c4", - "44b0e56a43862cd8545fd952509cfb1391bee4fb" - ], - "80": [ - "16cdb090c289927678ea85e0a49c5d7f1e0439b0", - "ec3582319e713cb0dbdd75c9f1efeb9d905d4f1f" - ], - "81": [ - "d5aff06e6be7a0f1a00a6dfa9848cfb555664bf4", - "84de2161e7699bf854bd015fb658f77c2eccac71" - ], - "82": [ - "1307ca60e07074c0e863d4d0473752892151bcb3", - "4bb6d8189949af8d6e964aa72bfd622582b99c26" - ], - "83": [ - "6314d882a056da85b470426c3853aa8226190d9d", - "b8c8e702c2411cb6b3474503009f3c726c5e8b9e" - ], - "84": [ - "c126b27684f67e2cb1e3c1c0404f609e3773ad92", - "1b7c199b37c1b0346196c98769bfa69f57e751aa" - ], - "85": [ - "6ed8d7a7b2083b02a24e8ca8bb0536b7c38e4f8d", - "09f33a06a733c2a60d1411baf755d08dc72171cc" - ], - "86": [ - "f2d8fcdeeb48cf16582799eab81e7c8e753a3a35", - "c76c0adff2c8ad9edec7707397a4b4d82364eb61" - ], - "87": [ - "24d8766ce79621a953d42a7eacae4ae080a73a22", - "a50a9f29e04697197bfa9a2cea1d86046057b232" - ], - "88": [ - "4849e33efd5d80a0422c884d80ff86046c2e3f42", - "3626ee7c0209fefac98fd487eff676f8d01cc4cc" - ], - "89": [ - "9b4f16fb2e6b073639cd305b94c308569ccfb815", - "2f082b03558fa4418c14cfbdf064bf6a10e2cee8" - ], - "90": [ - "ed5cc6983046168d106e94052c84f56ebfa881be", - "12f931779a6fd323000bd930da48e562d407cb72" - ], - "91": [ - "e88526e8c631fbc33c8c872b7214d097917cff9d", - "4a9c1bbb88eab83419a0e9dda10bd795f503bdf1" - ], - "92": [ - "959039d0c3e7a2acc19bfb7b57e4685673175c05", - "b8c8e702c2411cb6b3474503009f3c726c5e8b9e" - ], - "93": [ - "6ac2d029b51a6bd08af5a1d7152e8e3cda787bf6", - "1ed4534d238eb7f60e68dae21cf8a13eac47cd07" - ], - "94": [ - "128216b62f0112119b046aa6d2f9c5620383cf15", - "3ac4eadcb550589f382f300dcf0c2ae121b8cfb6" - ], - "95": [ - "2cf4ed5b5a8f9bacef38f3dad5d3f2fbcceb9278", - "3ac4eadcb550589f382f300dcf0c2ae121b8cfb6" - ], - "96": [ - "ef14319613723af7ef0d61e0e5f1c91160367255", - "3650d4c74f69cce7645500190803c6bfde07c214" - ], - "97": [ - "90f3835602cf2580c89d0f64dcaa0c41fb82d523", - "c76c0adff2c8ad9edec7707397a4b4d82364eb61" - ], - "98": [ - "f6fa1f97e3d27f38e4b86b82d6c229c014a60b29", - "9feb2813febb9114597f48296f7af863b9f198cf" - ], - "99": [ - "a82239e26e4e173d6321bfde415acf478baedf26", - "748ad1667412d013b905a7e738a3a90950d73824" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-07cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-07cpp.json deleted file mode 100644 index 24c3f6a78..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-07cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "8772216fa74f4a373e965cd5ad9c531c34656b50", - "63cff38f8612338db506d4bb6f79a46c70b7aec8" - ], - "01": [ - "eaee0ffe575d1d88475cc24171a1d26873a5b1f1", - "b022a3e8a2f2474c4d0b0ba187ac15ada5254fb0" - ], - "02": [ - "34e2bf9ddb475581d771bd16591b9e378bdc8950", - "4781c45bd76fb94cdb6130c5d3a8f8c394ab9823" - ], - "03": [ - "0811cce16fbeae3c3dbfbe9b7b4f95266c2576fe", - "97dd8bd629b8d433fc9552ca709304f7e780e307" - ], - "04": [ - "cf35e76d82ce96ddd3e97137bbd0b9729df8b817", - "04ccea99632a3352e69503d76e4e5d51f5e8c26f" - ], - "05": [ - "d4df66729c7af84e387e9943677bf35356f2610e", - "9de949006e4b398383ee12f27f32c4cdf925bd5d" - ], - "06": [ - "b7cdebeaa52c7475ee04ac6570747ab1f3c76694", - "71dad82836638e6b0f549f9f8a03847f6da642b6" - ], - "07": [ - "7ffdeff1ab9a4f05d0b1b8e05508f1144484069a", - "bb11928af3b3deccb0b8c4d18dbbe4d6b714a039" - ], - "08": [ - "5d5f1817773fb866fd75c4eb9eb977d437d592f6", - "1a27465387b27b128e61e4a3c1c286ff55a3217c" - ], - "09": [ - "ae344fe6200d6a9f83dd6c213899fd45948ed417", - "d65d8b15daffff93ecd7527e731edb5a335f055f" - ], - "10": [ - "028083a124d0e5744cd50a861a35bc63a6e8c5ac", - "4e132ac112fdb7a438769896d2189ebfd6e87272" - ], - "11": [ - "f54a13e8e3592b4c79c17ba4b63cfa3c03180049", - "c06c1a78725a31809aa0793f5875862b123a9a4b" - ], - "12": [ - "c5c5d2ffe5cd8f32fa30ba6ab38f8bb5c0d293cb", - "4377e1a7a6f9915bc4f2bc7cf95cbf19ceab0021" - ], - "13": [ - "62e47761ce479848b0d83def7ed09162ae2a63cb", - "9de949006e4b398383ee12f27f32c4cdf925bd5d" - ], - "14": [ - "6b2f4326e61145b8f280545c94391b0155b34917", - "09a895206deb5cd3d5130542a2011aa81ff6f1a1" - ], - "15": [ - "0a8b2f88813d9e566d299f8e76d20ad70049c650", - "627aae739b3964ede21c48a4beb8a933baf8c567" - ], - "16": [ - "8ec57f712e396b1d82a705969c441b0d144b0504", - "ae96e0b2cbcbdf667deec3d3a89d48d55e678761" - ], - "17": [ - "e94b23993e1790129b5840f388d7780c9555890f", - "56298b74c88ff03eeaef8c10f6caff0361e50ba1" - ], - "18": [ - "057bfc668c0fd3ab6a84f155b211ddb10892ff87", - "1d7d9cb0b7e9f290c6e21e63a8a0bdb9dc9fc507" - ], - "19": [ - "be0593bbdc072a26a277fa8d311c871a66613cc2", - "71cbaaf058603e92fcbbbfef24294ec00303e5e6" - ], - "20": [ - "6e569f80ad40ce5345cb1ec672c43a9bdb9ffecf", - "d6b6385c7d1e47b04cfbe53198670c7d0a1671f8" - ], - "21": [ - "0e1a80c58917736aeda45ad7e358e38fbf94d0ca", - "ecde14e12c3f2f0881f1f7a535c6478146b86b57" - ], - "22": [ - "83ce62079f274fb8b52c3b29bfed8263a91ce208", - "a051ac0b41fc8f08330fa2ac224f63ee3192bf4c" - ], - "23": [ - "611f727d46ae797fc2866bfc474974b1178de048", - "36ce247ecfd1e8dcd8ae5964d96d7f91da08d8af" - ], - "24": [ - "80b4c634041171c35e88693156ceb26bfca6ab7c", - "4b0d23e3a1765e4f9405c22fd50800be28b63b3d" - ], - "25": [ - "5d20090d5acc6cfcc696eeb63229e8087ec78152", - "ca847bcbe5fc0fcf40dbd8fb5dba06f582bdb826" - ], - "26": [ - "e0cfcf529631ed2eeaed93babbb59d270ab00654", - "ecde14e12c3f2f0881f1f7a535c6478146b86b57" - ], - "27": [ - "688c1841514fe5ec2a71f5e435b097511256ecee", - "f974c3d4a765b8069072416bf756cb3f977a2137" - ], - "28": [ - "faf1810e3cea72bd5dcdd9ac673541e157968a31", - "c79d968e81acf1a80e2bc399b7c2da5cd16b0b6f" - ], - "29": [ - "fcdbe1b1d4e73d62937e2f3c65bf560b9a59f520", - "d7d5d0fe60a722dbcdcec27fabc020f0e0023c91" - ], - "30": [ - "d924679f008a06f721c35a019f661bf997817758", - "93c3ac90090db1ef9946a97ed592c0202ae66726" - ], - "31": [ - "0392ccf590a07826626b46980c2fcd2f5ec32f10", - "b5f132d5c8fd9f6a00bb1e3fc08f745532c4421d" - ], - "32": [ - "69fdaf49d117af80eaf0f7b17444ad3cc5e176ca", - "c60e362bed264be116f3070a24566deea79ac97c" - ], - "33": [ - "19ad3735b25b46553b1d8b319e3526baff3d0d46", - "4e132ac112fdb7a438769896d2189ebfd6e87272" - ], - "34": [ - "26f574bfbd099da4176dfd49a0588e5b2b39dad7", - "019d70bd91609571e766b92f97ca205978d48cd7" - ], - "35": [ - "c02b2291d356a78c60ca0259bd9134622f47e059", - "a3cfed0a2f41490729d940b79b217dc9fc11a7b9" - ], - "36": [ - "23ea14e6465265b17cbe53aa708078e2f84841b0", - "c01dbfc45467ef6fe781deef6394d64136991b3d" - ], - "37": [ - "186d262b3805fa62ad6aaebdae7d8a31d60292b8", - "c79d968e81acf1a80e2bc399b7c2da5cd16b0b6f" - ], - "38": [ - "140d88a413f89a180fdcc311deccd34170cc8618", - "3b73c4ea6fef9dafff5a823bf491534d47317884" - ], - "39": [ - "bbea5f44ccaa35ae7183fb503dfcbdaa6e98c3a5", - "2efc702015bf876dd478375a212ba60f9fd07b0d" - ], - "40": [ - "5e0f01102df7c26a6ea66bab4111558e91505a1f", - "23193540f5504b2a65f15780ecf85d607fb51bd6" - ], - "41": [ - "c47d2eb0eef59da694ed3c18009e1275674fd105", - "919dd7d94f319272bc8488a0edfd34566a1b7a77" - ], - "42": [ - "e42267231b9cd6d62c3e255062861ef8e450cdb9", - "3de2c2213c0cfdf847d89eb586472de7699ea1d9" - ], - "43": [ - "8d4b8ad3a11cfb99de9507c795ee543b700b7599", - "a3cfed0a2f41490729d940b79b217dc9fc11a7b9" - ], - "44": [ - "744a9f15c91cf4bce894eac7361cfdc11daa76e8", - "23e788b44a8babc6cb69429273302f968bb7991a" - ], - "45": [ - "30ab36daf5482c124b332bf4f2ae43e26accc9d1", - "bb59e306f1b4f049482ea7010a7f9b0a2cf869f5" - ], - "46": [ - "21309c39695ad155915877e7d9148c1db7edb393", - "e381267f7254f0f50d1c8e347945a10dfe5e3ee2" - ], - "47": [ - "dd974c43e31c83d036f41e8d34bfef5058cc5cc9", - "f974c3d4a765b8069072416bf756cb3f977a2137" - ], - "48": [ - "f03804701b47bd7dbb4122adb7361042f51ec702", - "e42a47f317e8ba91f27e16545892c988ceabc35c" - ], - "49": [ - "1b6ed33db19665831e0ff1701dc9f66a58314ee7", - "56298b74c88ff03eeaef8c10f6caff0361e50ba1" - ], - "50": [ - "4091cd7c0c00b281dd5ead93875df3d12ce26aea", - "7e904e5d10a20eb21f42c725314d26cc07a6ff8d" - ], - "51": [ - "1b4937aab08c175596c437a733c2d9280ce2dd46", - "09a895206deb5cd3d5130542a2011aa81ff6f1a1" - ], - "52": [ - "ed9e78492af26a76c151208944b16aaa83ae0fa2", - "dc8d7cbf48edc16f90840addf51d91ce20ae35f8" - ], - "53": [ - "5ce4011f97077a0a5152992a4cc155d83f23074d", - "4e132ac112fdb7a438769896d2189ebfd6e87272" - ], - "54": [ - "132f3400cf855a8b777fff2dfe83d772d59e7c1d", - "23193540f5504b2a65f15780ecf85d607fb51bd6" - ], - "55": [ - "fab5a2ac77be66bd5bc0f82cda4bb9983aea73cd", - "a0e324b41d6978bb34f7e87269a1e6ddd6b1dabe" - ], - "56": [ - "61a1d782393d15a98205817b77c447a15f4fdc11", - "019d70bd91609571e766b92f97ca205978d48cd7" - ], - "57": [ - "8f1a32995a1bf0eeb89428badb344ac4aa411788", - "56298b74c88ff03eeaef8c10f6caff0361e50ba1" - ], - "58": [ - "65d55ec93f9637d2aadb2721cd667bb5e33b1931", - "aefe811466902f2fa3633f05aa29a8a381480aad" - ], - "59": [ - "8eb80dea0d77eac8c19f9dab5e0028ed38d9e610", - "8430bd9e3102fec90edb0de111896d12f3218a99" - ], - "60": [ - "2efd991cf2722dd0c6056067e198f90e2ec174f7", - "0211bff316d3f5cf96097b1b92fcef37c4c613e0" - ], - "61": [ - "4a2e623abcd85c3bab0622234ea6efc88e75c874", - "a57b0d7b0e11dde05deb9d531bbb533172859d8b" - ], - "62": [ - "83c41883c691c6433035608d6630fdf4585a3aa7", - "ed53a65937c95402ccb2651ce682337b667e2d36" - ], - "63": [ - "93fd1fc16e5817bd3e77453a179ad067d8ce5bd2", - "dca9f60fe6c488c5c9e2b8b6acdb97381f30acad" - ], - "64": [ - "03c7694178e6bfdf6c09ba14d2305911e14d3d6f", - "2efc702015bf876dd478375a212ba60f9fd07b0d" - ], - "65": [ - "33bc9e847a1b653f19df0abfd34587fa41a2ef4f", - "e8d49f5fb96c34d776ed6d7205d1eb25f649dbdc" - ], - "66": [ - "f25f21bca0a973b11574043da0166fbeee5352dd", - "63cff38f8612338db506d4bb6f79a46c70b7aec8" - ], - "67": [ - "59d67ba9bd6ba0b3d29f53491dcba883e0a26a8b", - "4781c45bd76fb94cdb6130c5d3a8f8c394ab9823" - ], - "68": [ - "598cb3a4b94e1bacab66113ab73a5e007980a775", - "56298b74c88ff03eeaef8c10f6caff0361e50ba1" - ], - "69": [ - "e2e47b8e693f14a03a77045dff9293caee2547c7", - "35535424469623035a3c96706d37d4957bea3811" - ], - "70": [ - "eaffd145b8005d02c2e851455801a821cd432948", - "f8729bf5f38d2272a039c7423a203f3efad414f8" - ], - "71": [ - "a8bf7826f5225acecc35c9c55d5c667e915d117f", - "b022a3e8a2f2474c4d0b0ba187ac15ada5254fb0" - ], - "72": [ - "0c535d9496c033f0b6e7edfe42cd222e0a3946c5", - "68830b034542f82a6b7e1ad3d91548934883a320" - ], - "73": [ - "efc1fea7d0932e14aa190a0822cda7bd7d1c12a0", - "edfc5dcb4f9d37152f3e238f68f2aae10e924b49" - ], - "74": [ - "f01b6a8ba76df6742ba5f4ae95390d9d2dac78a3", - "c06c1a78725a31809aa0793f5875862b123a9a4b" - ], - "75": [ - "b5cadb770c64283ea72e494ea827539a72b6af52", - "ac375369af220ba91a571c1724eec1430fabfcdb" - ], - "76": [ - "3eac7673588ff002ff4dfc4eb2c264fe5dcdc658", - "ccc7decf32337a9720a63b7f52922cfdfa631607" - ], - "77": [ - "15ccbcfbefdd4ea6a534f8400c671381fb490a4a", - "4377e1a7a6f9915bc4f2bc7cf95cbf19ceab0021" - ], - "78": [ - "0e9f6755397df2076e74f13bc45af69592f707ad", - "6e8b9caf806811c7906c71288284cd2f8979680a" - ], - "79": [ - "06e6fb5aed8e08949893b0be8156ba26b0b4abe3", - "1066dbdbb1f69ebe0e3d9c0a17284d4bc0b61e79" - ], - "80": [ - "8fa196c5b8a8c714bf33d10dc896e5de6ca89332", - "e7cf979f3d92e371348700da2f66645ad07ca5e0" - ], - "81": [ - "c6db0e2a5f0bcc8a3a63173bc1020835665e6c09", - "a3a12503999fe0a18f270ef6eda81b084fda3faf" - ], - "82": [ - "dfe4502ac85c7e4a758a64b60449373cf2bca2c0", - "4438c697f0fa0c09063f5858d471550802cb08b7" - ], - "83": [ - "4c7acd88416b15b173cb936afeeac88ed17852e7", - "f6bdfafb17dd1bf8df1f0736c7bcf57d680ce279" - ], - "84": [ - "6fa6b619c934c74945588dbf59fd5b6f1e91c633", - "a601fbc56002a96526283956ee4b40bd4e971982" - ], - "85": [ - "63acf79649cb5bc7cfde2d37b6bf9684801b8b84", - "61ad5ff73cb12163ff90d82ab702d678dadb3bf6" - ], - "86": [ - "65047351ae043d93df95d654011f13ed44743d09", - "8437386d8e4dbd8b74b0ae83a58ca3a4188caf09" - ], - "87": [ - "c0a0e81135804b2c19d70fa4fc83c997867eb323", - "e5eb1cbc1f952c45b63382ca1ec8d16a8dc008fa" - ], - "88": [ - "c823a55f1fec139c034be6a98798408df4638439", - "d4bb7bfae65e2b1c8a6056a24305938bf536b95b" - ], - "89": [ - "1944b1d91319a28ea69a1f37b0b88461866783fd", - "5888929e32cd6451acd47c74fbee382b3495c47d" - ], - "90": [ - "c0ad2ccd9aa54340fdfe35441b2c9c9b7848a96d", - "7226a0f357f114203c2e94e30f2bb5512c5dfe99" - ], - "91": [ - "792256d325f414d5cb744c59ccc1d4352abee328", - "2881977f8626cdf5181b8de14165da3803a68884" - ], - "92": [ - "a7b7b938695d1536feafacc3fcd52e3f6cf95c99", - "22d8b417942e1b949fb371b46559d021632aaf40" - ], - "93": [ - "56384df7f79d71420fbce5bc79bba807d55a5ace", - "919dd7d94f319272bc8488a0edfd34566a1b7a77" - ], - "94": [ - "af2acb3bd7b6daa91941d3189e8bd51b875452e7", - "0714954b9c18854a842a7cf5fbce9bfe63634be3" - ], - "95": [ - "f4d1ebb3e1cce44a893179ad309403cca968b975", - "df41d356eb496f52d71797877ece04b316762ec1" - ], - "96": [ - "c190593c601e2ad9a4c9d525f28b89facbcfa3d5", - "df41d356eb496f52d71797877ece04b316762ec1" - ], - "97": [ - "711bbc40d6634b07fc76ec43ff94f9e0bc8581a3", - "df41d356eb496f52d71797877ece04b316762ec1" - ], - "98": [ - "c7056b79024ca8d6b684813eef8798b9a93591d6", - "e5eb1cbc1f952c45b63382ca1ec8d16a8dc008fa" - ], - "99": [ - "2a441459358e5fa7add1ee1a1a77dcddad38229f", - "b5f132d5c8fd9f6a00bb1e3fc08f745532c4421d" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-08cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-08cpp.json deleted file mode 100644 index 95a7ea043..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-08cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "3d67a78e0688cdd22cb524beb18fc4e4a96c6625", - "5b4c66c4d33841c2131d08f57f99721ca470a9a0" - ], - "01": [ - "b656de01f15565c1d1c5947e2b561743d8a0ca3c", - "f6fc63790ddbf66818c26e81c29c580d276fb787" - ], - "02": [ - "beec1d5cfd9c1c2ff215800245c333ff6444fb78", - "400ca7599d762a0a3c7bc4ad76334c45c74b368a" - ], - "03": [ - "644f502eaacc042e0dc09608258e0a45c0386b76", - "8c1946105db291e04a13df3e869394324e4782b8" - ], - "04": [ - "edadeb6f7644461c1c57cd41d22e6d76c4f12871", - "85189548829b56d0c8e86653123a035631fb4ffc" - ], - "05": [ - "7be26ece9911900f3c584eb3d8f8023e05be07b5", - "239cceed1a8b1225066edbb8b94c228f0dde9d61" - ], - "06": [ - "1b4bc2f4f026492203c991d97c3d723b4bfb8b90", - "84c9681c601370dbf039ad190d13161cd850dc4b" - ], - "07": [ - "7269ed5142ef028e4f3bb56ceb051a938a2096e7", - "67364db3586966c6351a2037b241a50be9bdd93b" - ], - "08": [ - "564ee340b791c15f11268a6b067021fa6f011075", - "308c8b739438e8777b94323f1d4e525b84006d7f" - ], - "09": [ - "6fa5ca2fe6dba7e2e87a5fe2e43ac566c300a57c", - "ecf2e85e1e36ae44da94c13ea7fd6b37c8ab9e2d" - ], - "10": [ - "eece16cc7f436c4c1afc8346f4e49fab87ff05b3", - "5b4c66c4d33841c2131d08f57f99721ca470a9a0" - ], - "11": [ - "b32d49fe04d9641b40f2857e8ca1a88fea53baf0", - "5b4c66c4d33841c2131d08f57f99721ca470a9a0" - ], - "12": [ - "4b07a09759939af26d32755a5a1cb90712ea50c0", - "4215d10a6113b27c907041a69977a63947d4517b" - ], - "13": [ - "6ca5bf1e13f15fef5775c5f411f33e7dc1eacf5f", - "a29772e30d9766ac9d1ee86c1b1a1f493f665102" - ], - "14": [ - "a2998510e49efcecb46c4398d58b508540cac7e6", - "c7df7f36beedc6ab0ba3920ad4d34aa8ec4aec6c" - ], - "15": [ - "379b966ea744e7aaf726c1a30727d23dad7dfef8", - "f765976a3c0d51c993b6ac51ef3074865ec52cf3" - ], - "16": [ - "3d454bd653d17592b64c63810e28d416d030d797", - "2234931f2d2bff36d099df60f327775a142cab02" - ], - "17": [ - "c68d8c7e264f67926210dfaa5056c05ffee98f92", - "061e85399470ed509d30d0ad3091048aac6c3e65" - ], - "18": [ - "0de715f92610a27cd61f5cca16a679730665ce39", - "6c4fed5e874964014430766a668fd56d9384fd34" - ], - "19": [ - "bd94df8f9ba8f0b4c1e014e2387d9070eebe9440", - "c5fd758604351fe3854eb73f066181e0ac7033da" - ], - "20": [ - "ecc2645b7bdf0731bd25f27b1a16583795d0c61a", - "02e144c7c3cfb61eaab48dd1873415052e7cfde0" - ], - "21": [ - "70206df867b9f354dced6e56c87f3df76c358024", - "e4b1ffd6aa6cebb2a8033e10300e23d3b7d8e9b8" - ], - "22": [ - "c1a71f8001753b29d1dd161b8007e9f3d500d033", - "4dbbeb1e4b7c139b0258eb224fac39cecd560f79" - ], - "23": [ - "5684e401a1cdadc692e24bc8c3618cc86a81b91e", - "05b4c3c9344eaf90ec54b08cffc167e06958afd8" - ], - "24": [ - "c2fc5be8524f66d9561e9cd9d648d0c72b676f1b", - "061e85399470ed509d30d0ad3091048aac6c3e65" - ], - "25": [ - "8b1faac462c6e42d17be5e2bd2643eac912261e4", - "e620e3412849e965b584078be8bcdb911323db62" - ], - "26": [ - "9904dc914ff6238cbfcc258d5261bdc47a376a93", - "9a96397434145b8b7cc3595c96c0337487e1f95e" - ], - "27": [ - "eebed53ba1d4d8f2a4bcf21e471342aef87584ee", - "b0a26a5b7f0ed4ab0a31385b65e510c7516a51fe" - ], - "28": [ - "7ebba87103d5538f535ceecb2f8bf9753436ae8b", - "c5fd758604351fe3854eb73f066181e0ac7033da" - ], - "29": [ - "e1eefe434b95f70deee4c02dfee3583d5893e00d", - "c5fd758604351fe3854eb73f066181e0ac7033da" - ], - "30": [ - "b18279a6062ddf41d50b309a48958552cd76dc95", - "4dbbeb1e4b7c139b0258eb224fac39cecd560f79" - ], - "31": [ - "5d34a243060c9adeced7263a42744df7f13b223c", - "061e85399470ed509d30d0ad3091048aac6c3e65" - ], - "32": [ - "e705d2b8477e4dfe43f7f2bb9038ae95cf653a3c", - "7fc69b0249a7582043094c7228033b7aa7bfa17c" - ], - "33": [ - "63da55abfe6dcfaf4058027c7567e021130d1c10", - "b590a3350b084a4e75c5ecb5d8e60cd40ed613eb" - ], - "34": [ - "67db528688fdc1ab245662307136fdd9912cc303", - "9dccd40c73f5e5c1a03a42cd5c87815fb67e800d" - ], - "35": [ - "b1b9e0a7574df96b026504f01232a4c6ef520875", - "4215d10a6113b27c907041a69977a63947d4517b" - ], - "36": [ - "d08ced9f0d052611762ab0441df6cadd7fe43e7d", - "5b4c66c4d33841c2131d08f57f99721ca470a9a0" - ], - "37": [ - "e3b771782e30efc6889bcc2c6c9ea68e1e0539fe", - "c5fd758604351fe3854eb73f066181e0ac7033da" - ], - "38": [ - "215f6190503977f2d0b2a861ca876e05caed786f", - "b590a3350b084a4e75c5ecb5d8e60cd40ed613eb" - ], - "39": [ - "e06484ae6b6e5fe74a20815e80f407b984b1e354", - "b0a26a5b7f0ed4ab0a31385b65e510c7516a51fe" - ], - "40": [ - "d28f806519077ecf6c10b6ceb309135115d451b7", - "658d85279156d1b6b92716d4c96c4eda1b68611f" - ], - "41": [ - "87bf77d8a9cf22099554531b5b092aa36d0d1204", - "f765976a3c0d51c993b6ac51ef3074865ec52cf3" - ], - "42": [ - "ebb4cbe10498d7c8a00a6c14aecde6b62e7acca5", - "e620e3412849e965b584078be8bcdb911323db62" - ], - "43": [ - "7e562c3a836e727e47e29c1896612a749ea17819", - "5b4c66c4d33841c2131d08f57f99721ca470a9a0" - ], - "44": [ - "b8649508b4d5785db015545992d6749b7830c0db", - "593dac08dc777e000a28ea4d20f072e79daa288a" - ], - "45": [ - "e93b0ef470b5b0804073dcb5e76b84775e321d04", - "2dc2b5eba5e3c340290549a4e1274b21dae37328" - ], - "46": [ - "0a4ffc2cdc16fbdfb004112fc2eb0215eff88d0c", - "b0a26a5b7f0ed4ab0a31385b65e510c7516a51fe" - ], - "47": [ - "9adbd84ab338b87defb7e83fd2b4f1f4856ad572", - "f1b31364aee587ea6f72de7396455c5ca95709b6" - ], - "48": [ - "65f8538b08ffa28d5364c6ae15009a62d7144c5f", - "fb01f432e94543111bc62547e17e87af4f344366" - ], - "49": [ - "6046ad118f87344555dae1cd4a981458fb4f1bca", - "027da195e8fd3febe015ba62de6f0e36a8e85ec5" - ], - "50": [ - "d8607a3c881d0e8bce33ae5b503b4db2a11f05e1", - "235252fb20833f04ed55b59618eb926937343317" - ], - "51": [ - "4a6c074c308012305a59bd7a596b788c90fbeb40", - "809c052fe94f154bf9dff920ef76127f1bf5d772" - ], - "52": [ - "9cf04c3177266185da5b3ffaab6430ce3940da87", - "d985c31d851be52bc0de09ee194f0c363477ca82" - ], - "53": [ - "8a93c0247fe8241b3e5e58907e7e2bd124aee7fd", - "5b4c66c4d33841c2131d08f57f99721ca470a9a0" - ], - "54": [ - "0ce0e551b1fac2201911b3a5502f0db1e8a102f8", - "fb01f432e94543111bc62547e17e87af4f344366" - ], - "55": [ - "40688a4fc539c56e8ebd6b73bc0b0e1f14bb7c68", - "658d85279156d1b6b92716d4c96c4eda1b68611f" - ], - "56": [ - "7923b66a9298eafa7869d4eb4b957bfa8732b546", - "6c4fed5e874964014430766a668fd56d9384fd34" - ], - "57": [ - "76df84802d383bd49dbf992a6f759f7e10e5b3a8", - "658d85279156d1b6b92716d4c96c4eda1b68611f" - ], - "58": [ - "6862b3d04fb90accecb13a8672d993c18c4c9103", - "ecf2e85e1e36ae44da94c13ea7fd6b37c8ab9e2d" - ], - "59": [ - "e24a9f2e27176d92317aa5836844ae3824c9c2d0", - "a29772e30d9766ac9d1ee86c1b1a1f493f665102" - ], - "60": [ - "bf098b2c56d42cbb0b330fe7efe16b901b6b993c", - "84c9681c601370dbf039ad190d13161cd850dc4b" - ], - "61": [ - "46230779e3254d968aee286a3dcbf3a7fd3466b4", - "593dac08dc777e000a28ea4d20f072e79daa288a" - ], - "62": [ - "e2f200cb0d13fb94855b01114c79636f133885ce", - "061e85399470ed509d30d0ad3091048aac6c3e65" - ], - "63": [ - "40c0e86b2628de4c21165fbd161a8089a6395454", - "0ab6f67a1e0ed8b6d223552b705c65bab88f54fe" - ], - "64": [ - "d9ee347770c806d093ae3a100cbfdeef6f1e153f", - "b0a26a5b7f0ed4ab0a31385b65e510c7516a51fe" - ], - "65": [ - "30fa109a7f155737e3d09580a3b296170cc39323", - "b0a26a5b7f0ed4ab0a31385b65e510c7516a51fe" - ], - "66": [ - "5888111b66b0aa3b704d360653ad853ba071e114", - "17b843c9005ad7a6dfc14dd2b19d585ab2e3c510" - ], - "67": [ - "901bf7345a8e2e0c8c577fa22b54bc23ed0e82d5", - "4dbbeb1e4b7c139b0258eb224fac39cecd560f79" - ], - "68": [ - "b718ce65567c0591f84adc9197e6aea403a20015", - "ea360fc61fde47d11e70762a040da18cc12b8c1e" - ], - "69": [ - "530fbcf41abed4d13b59899039238a8266ee0075", - "e620e3412849e965b584078be8bcdb911323db62" - ], - "70": [ - "cc2f9a9c008dc2e69a8f965a9532d582eb1551f1", - "ecf2e85e1e36ae44da94c13ea7fd6b37c8ab9e2d" - ], - "71": [ - "78c19b0f64c4263fc43714f5d8560a77bd0dc13b", - "400ca7599d762a0a3c7bc4ad76334c45c74b368a" - ], - "72": [ - "000948849f2ee62442fe2e1428c33652b9c3d472", - "9a96397434145b8b7cc3595c96c0337487e1f95e" - ], - "73": [ - "a6b8202550f1643caf86e808a8ef8eeacc187275", - "061e85399470ed509d30d0ad3091048aac6c3e65" - ], - "74": [ - "c8414cd816eeb25994653e11f16d4fc48ed78176", - "b590a3350b084a4e75c5ecb5d8e60cd40ed613eb" - ], - "75": [ - "9e04b719f358aa1e9319a8a33c5ba843c7b6b376", - "ecf2e85e1e36ae44da94c13ea7fd6b37c8ab9e2d" - ], - "76": [ - "9cc67bd0673bd527cf50f43562ba772380663e12", - "17b843c9005ad7a6dfc14dd2b19d585ab2e3c510" - ], - "77": [ - "4ef3bf04dddbcd5231bd5639f22d8289b36ddb27", - "4215d10a6113b27c907041a69977a63947d4517b" - ], - "78": [ - "d7231713f0123c1d7889cf851dc8a428603149e5", - "2dc2b5eba5e3c340290549a4e1274b21dae37328" - ], - "79": [ - "f3aed565f6a1c1ab80ab80861d83137809b44ea9", - "7fc69b0249a7582043094c7228033b7aa7bfa17c" - ], - "80": [ - "4003e2756c0d9fa807c83c696ea856be9a39922a", - "061e85399470ed509d30d0ad3091048aac6c3e65" - ], - "81": [ - "f5ee52d27cf7d89428b5ce4aa78d45ab29a1de02", - "9dccd40c73f5e5c1a03a42cd5c87815fb67e800d" - ], - "82": [ - "7c4bf38c6fec218558894974caaa1721783fb2aa", - "2234931f2d2bff36d099df60f327775a142cab02" - ], - "83": [ - "88774727f80d4a12de8b3658df70594968c90d90", - "e620e3412849e965b584078be8bcdb911323db62" - ], - "84": [ - "1831d746b42d941c94418f1a41c5fcdc13181c97", - "ecf2e85e1e36ae44da94c13ea7fd6b37c8ab9e2d" - ], - "85": [ - "01e8ca13cb802038fd99a09d3f1b4241e4bf224f", - "e620e3412849e965b584078be8bcdb911323db62" - ], - "86": [ - "0a62d023566eb7e2731c69b3720292dfa21b8947", - "f1b31364aee587ea6f72de7396455c5ca95709b6" - ], - "87": [ - "26d4739e5003284ea6c005422d7bf15ebd026928", - "02e144c7c3cfb61eaab48dd1873415052e7cfde0" - ], - "88": [ - "8af9e6d623406750055bcca2f014353da84bb862", - "b0a26a5b7f0ed4ab0a31385b65e510c7516a51fe" - ], - "89": [ - "79942c3836f68008ce000ddb012e9f37c544d3a1", - "b0a26a5b7f0ed4ab0a31385b65e510c7516a51fe" - ], - "90": [ - "81210d6640fe47ea9599d7be59a71ca87bff78f0", - "400ca7599d762a0a3c7bc4ad76334c45c74b368a" - ], - "91": [ - "f5474a38ef84194d6c444e0929f03ad4fb7577d6", - "fb01f432e94543111bc62547e17e87af4f344366" - ], - "92": [ - "ca89d1c869617e3efe8e32b9d9d3d4771434b054", - "e620e3412849e965b584078be8bcdb911323db62" - ], - "93": [ - "cf3300a3756d9fbe4687f95d7d7647a9f0a22f54", - "061e85399470ed509d30d0ad3091048aac6c3e65" - ], - "94": [ - "14b927d1cbd1a853b8bb4c0d5dbf42a487f0c17e", - "400ca7599d762a0a3c7bc4ad76334c45c74b368a" - ], - "95": [ - "dcf91a508f3e9b0cab71ce2652a32a88a96414cd", - "d985c31d851be52bc0de09ee194f0c363477ca82" - ], - "96": [ - "fbb23b6b2c6cc0dc45f270c374946eb4db56c25c", - "c7df7f36beedc6ab0ba3920ad4d34aa8ec4aec6c" - ], - "97": [ - "79fd907487a9a434c2f98f3d68aabba3f270bbca", - "f765976a3c0d51c993b6ac51ef3074865ec52cf3" - ], - "98": [ - "cc2b5858be6a41781afbb4a632d2184210f180ff", - "ae856c64c373578ab8de5ce53cd26ea37585ae76" - ], - "99": [ - "c19c0b808c75b5a01a865b50e688e688ef7a5076", - "554228d3c268afec1eff7bb69a5a03fcd4bfb6b7" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-09cpp.json b/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-09cpp.json deleted file mode 100644 index 03e215451..000000000 --- a/xain_fl/datasets/hashes/fashion-mnist-100p-noniid-09cpp.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "00": [ - "e0feb17224e951656305cb6d372d79dacfcf3a0a", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "01": [ - "da0e6acb3f7003de129f7c0a260d4ef429470205", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "02": [ - "e77a8c90d6748cdcdbe9ff7fe9d56bfb9b56d9d3", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "03": [ - "53fde57604d34d2627a84c9788852fd2e212e0c2", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "04": [ - "e994b895473c9769c10623da45161b3049daf87a", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "05": [ - "7d6446f8a839e8cbf0dcb392bacd4aa20b2d387b", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "06": [ - "d41f9c5affb0c35d6af75d0d5910c06f31ad1d70", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "07": [ - "b6b0bae7003c7db1f15a12e88138f5f44c1a6df4", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "08": [ - "85b21d412aaceed794c3b8cd2b43a181443c79f5", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "09": [ - "1dec0b50d188679aab877ae93662fec62c80d169", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "10": [ - "d4e79a0672dd5058e03f826fab13410c0c34cc11", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "11": [ - "b793040f5789c162502925f9fadcdf8c69ad5155", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "12": [ - "a9dd42a264ac6d8f1f8bec560f52c963276a5e15", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "13": [ - "5f163a880c35edd089d64ff13e64e972ecf20649", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "14": [ - "9b340751a5249bb52eacacbf30706862157a62d2", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "15": [ - "fc19d2e87d8244f557c43e95a7423c75944429f5", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "16": [ - "9597d78b725bba6fb3d80a72cefe78198f44a123", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "17": [ - "a82a51e1257508aca09732cf1e4c4ffed9d8472d", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "18": [ - "6cc273f57e72ffc172d5e639508ab471d71158cf", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "19": [ - "a6a85c50fcac614d2e91e6f9d6d3adcad666a710", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "20": [ - "8d06dbd8206ebae3c9b79296b93f58986a8f930e", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "21": [ - "970d35b64755c48ce3f618c7be7e559f1470301b", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "22": [ - "6862341bf82a350c2bb177fec45b67d8b72de512", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "23": [ - "ac815507ce2f5642dce57c30d9076b0d4fa1dfa2", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "24": [ - "99cbcb2437a83612356f1adf4efd8c97d4a23583", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "25": [ - "7ca87c37af832a608bb8837f38fa3c7787402aee", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "26": [ - "78cba2323b19c464ee4944a69de4180d8093f9b7", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "27": [ - "fc87d4039cbbc522f13b2806d5daac315c201495", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "28": [ - "3a839b820bfe9e1835bb087129f25fb593d90ce0", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "29": [ - "684d5f5edf1314976a446356ede75cdc38da55af", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "30": [ - "dd5b409e481da3ad95b0f0a612ccae56c1cadd58", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "31": [ - "f991c4e8fcabfc6701760012830d701e6ce155ff", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "32": [ - "6f6edde51e67747be2f6d5c2ac8fbb0c64b12dc7", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "33": [ - "194e8d4de1d7ed7a2359442529191241d1e6953d", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "34": [ - "30c2a974a034f715481a36fdee6f068a7c8ab333", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "35": [ - "a8613d5b349df24ab941748bc6532fca777a5cda", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "36": [ - "c3be60770bf57cbfc16eb11bb2ad58f9c8e78cc0", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "37": [ - "a76a297e73a7f05e1f5dc92e90b25688965200b5", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "38": [ - "00dbd282e3cbcd6ec723f1b082b7e36927643f87", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "39": [ - "554b7cf6e9e9466c5e68673dc1e6ebdbadb22ad1", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "40": [ - "185f523cb3240c430ed77b5d4fad3d936e4410d7", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "41": [ - "80cecb2146c821d063ac5d14d046ef5782179a50", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "42": [ - "9aab806647a339dd275d7fb41fa290184b08c601", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "43": [ - "704cd37ebd3577b1c490e5c918d6e4cec91e37be", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "44": [ - "79004357ca04aa0acf5be39a1d6960041eb96f0d", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "45": [ - "4b55d3ba684f719c572a468e83d2eac1d73b9fd5", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "46": [ - "4f1a2927f21b3a522ddadfe7b39e22377cf44814", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "47": [ - "51ce2229d2836f346d4de7b8a5cd138cd21739ba", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "48": [ - "cb2caae8d1abc9452b80f4c05a469c8d92bc0ac4", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "49": [ - "30eac2894430b031308eff2dddfb1457dc937442", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "50": [ - "d44ac23548f5fdb40499d9750d47beae65e0bc33", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "51": [ - "4e0812c3ce17442738de5cc664a66247e55ddfbc", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "52": [ - "5bc9ad791463ec43e2c6f7b80ee0b4157ea74326", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "53": [ - "9f6ed57ab6159f94dc9b96ee016b2d70d2932134", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "54": [ - "ce64342f68016cc243dc26d3fa09970d51574c5f", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "55": [ - "9e9c4b17c9f93026aa68a353767dbd7274bb1db7", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "56": [ - "b2f2a4e2230ed4b8cd160c371cc1c2e3c29ad8e4", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "57": [ - "d88572467846e617889a6c04db9972ba40a2edcd", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "58": [ - "e0689710b8d44732a3527d025b4e203a0d1b9c5e", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "59": [ - "cdaa812cbdac43c9dfb07c786c8483fac984d094", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "60": [ - "8e22f64da6999eee0d5ab1c90c48378108b90fa2", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "61": [ - "7b5b9d524f043f96e98d21205834ef5019e3e454", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "62": [ - "04eca75328abbbf6deb60cfda5be256fae8b1f4c", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "63": [ - "01431e9d21ef3090920bf096f61ab608c9150258", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "64": [ - "97cc4063535cf18f73efc55fbeb6254b2185d257", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "65": [ - "0fcc6fc9a02ae3b8f2c8c175d2290ed96ce3133b", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "66": [ - "e5cfd3fd42b5a4d6e216b7b6e8ea4a542c7f4abd", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "67": [ - "eb31d7e2931a5df08be9eebe7adfa5bb53393c27", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "68": [ - "8867cda582a94381a3c4f24b417efd59138da4ce", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "69": [ - "9f81a6c52814ec74a8b94aed8270a328e1b17e95", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "70": [ - "708683fb8b5a856b118b52dc48ed4e6f6b6feb2a", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "71": [ - "1b88ac329fb1cd64a0a2dd4c03a0c74042b0d110", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "72": [ - "4921db7f7c8a1f5bc6d4df85e4c4d37789b04845", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "73": [ - "b6d06859dfedcbb4d7ca6a209876ea49c08453ce", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "74": [ - "90d2d38a1ea6d7b16004e237aa0fb9381e2b5ce5", - "4adfed9783185914e573f4c0f059a9adc6ab8cf0" - ], - "75": [ - "38bd96637543cf774909c4012fed4e894a04dc1b", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "76": [ - "7c128e8a7855f5613ac02bd61f92b490b685b8b0", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "77": [ - "c3ad3ec14f53de87f0592302e67b9e673dd2f3b9", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "78": [ - "f971a9f7364215c4dd1d81755f95fe0c917d3005", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "79": [ - "a2a0c32e855dcfca069b5218ea0dbe29c4ea1728", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "80": [ - "4b43ae58b7e868cb4bc7a39b4fb569ab461a9be7", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "81": [ - "86f75fa3387db6b50b6342be8759189d0d940ca5", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "82": [ - "feaff0f6c3a1f255f30237deaccd1ad094b54862", - "5a03738e7634b1e02dba87fa0d0ec862c95f4ea6" - ], - "83": [ - "bba3ced7c7ff5e143b58198cf55e42c66afa50b0", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "84": [ - "f58e61bdc3e6e15ebaf5b8c4e8830fc5358482f9", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "85": [ - "c3b866c33e06387958140eb9def5ade1f15fc546", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "86": [ - "cd777107e7d9848bfbaa6c728607b212e27ce045", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "87": [ - "7ac237da1102c9b1d733a6dc517e60c69157cbdb", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "88": [ - "eaca5dadcbdac2422d417c6ab35b68dc678a3f0a", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "89": [ - "53af32f87c277fec2ef1c2efe1dd0d229761b746", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "90": [ - "ad62c7f17b317d6c4c95d9ad9db721cd15a66827", - "2b8417ceaf08cc7e195de5ab7902cedbaef1a246" - ], - "91": [ - "064cf385927d7571606873f2daa36dc02316e102", - "37437d8270c737f355adbd3a5328f190f7525ec6" - ], - "92": [ - "a516a167ecba40568c138b7da1c40d79b1c9c469", - "b5a6ba17113e273091faf377ad53aabb78f6f845" - ], - "93": [ - "e718c439d35a7e61f195558a673d22346d0f12cd", - "899f4ef767ed15398328604c3e1fc29680947007" - ], - "94": [ - "ca68f6b9bc7f2a1d964c520ab9601d9cbef35248", - "ea3667d4ce4777fc80c52f59214f6a0f0fb07074" - ], - "95": [ - "8ebe3400240d32c4491d3cb7480a99062553caec", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "96": [ - "7bbd461b5bc0c043bd6bf30987610fd8a543734a", - "1e667f8aff944436242fcfcb842275117ccd0fd5" - ], - "97": [ - "2553bbdbd619be152e369f0eabe9c4c56addc313", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "98": [ - "6991068061aeac489dd1e1e55ca78e7c9b59b498", - "60eec0e26df7d5c9d13b40fd43180ba8d94ded11" - ], - "99": [ - "72037cf8a6f20a982f8d6aa20a16e1038706f2c6", - "10cf1fbe4065a470343b1efbccc402e4801fe834" - ], - "test": [ - "79e6584f3574e22e97dfe17ddf1b9856b3f2284f", - "b056ffe622e9a6cfb76862c5ecb120c73d4fd99e" - ], - "val": [ - "c008c5dcaf03d23962756f92e6cd09a902f20f8b", - "e67663f832358b645232f0d448d84e4d6e8c65cd" - ] -} \ No newline at end of file diff --git a/xain_fl/datasets/hashes/load.py b/xain_fl/datasets/hashes/load.py deleted file mode 100644 index 8ad462cfb..000000000 --- a/xain_fl/datasets/hashes/load.py +++ /dev/null @@ -1,18 +0,0 @@ -import glob -import json -import os - - -def load_hashes(): - hashes = {} - path = os.path.dirname(__file__) - - json_pattern = os.path.join(path, "*.json") - file_list = glob.glob(json_pattern) - - for fname in file_list: - with open(fname) as f: - dict_key = os.path.basename(fname)[0:-5] - hashes[dict_key] = json.loads(f.read()) - - return hashes diff --git a/xain_fl/datasets/hashes/load_test.py b/xain_fl/datasets/hashes/load_test.py deleted file mode 100644 index 483bc13a0..000000000 --- a/xain_fl/datasets/hashes/load_test.py +++ /dev/null @@ -1,11 +0,0 @@ -from xain_fl.datasets.hashes import load - - -def test_load_hashes(): - # Execute - dataset_hashes = load.load_hashes() - - # Prepare - assert isinstance(dataset_hashes, dict) - assert "fashion-mnist-100p-noniid-01cpp" in dataset_hashes.keys() - assert len(dataset_hashes["fashion-mnist-100p-noniid-01cpp"].keys()) == 102 diff --git a/xain_fl/datasets/prep.py b/xain_fl/datasets/prep.py deleted file mode 100644 index 05b599eb4..000000000 --- a/xain_fl/datasets/prep.py +++ /dev/null @@ -1,180 +0,0 @@ -import numpy as np -import tensorflow as tf -from tensorflow.data import Dataset - -from xain_fl.types import Partition - -AUTOTUNE = tf.data.experimental.AUTOTUNE -SEED = 2017 - - -def init_ds_train( - xy: Partition, num_classes=10, batch_size=32, augmentation=False -) -> Dataset: - """Initializes federated train dataset partition. Will return a TensorFlow dataset. - - Args: - xy (Partition): Tuple of two ndarrays corresponding to (examples, classes) - num_classes (int): Number of classes present in parition - batch_size (int): Number of examples in each batch - augmentation (bool): Enables automated augmentation of dataset e.g. random - cropping or random hue, saturation, brightness or contrast adjustment - - Returns: - Dataset: TensorFlow dataset - """ - return _init_ds(xy, num_classes, batch_size, augmentation, shuffle=True) - - -def init_ds_val(xy: Partition, num_classes=10) -> Dataset: - """Initializes validation partition. Will return a TensorFlow dataset. - - Args: - xy (Partition): Tuple of two ndarrays corresponding to (examples, classes) - num_classes (int): Number of classes present in federated dataset partition - - Returns: - Dataset: TensorFlow dataset - """ - batch_size = xy[0].shape[0] # Return full dataset as one large batch - return _init_ds(xy, num_classes, batch_size, augmentation=False, shuffle=False) - - -# pylint: disable-msg=too-many-arguments -def _init_ds( - xy: Partition, num_classes: int, batch_size: int, augmentation: bool, shuffle: bool -) -> Dataset: - (x, y) = xy - # Assume that each row in `x` corresponds to the same row in `y` - assert x.shape[0] == y.shape[0] - assert x.ndim == 3 or x.ndim == 4 # (Fashion-)MNIST: 3, CIFAR-10: 4 - assert y.ndim == 1 - # Add one dimension to grayscale-image datasets - grayscale = False - if x.ndim == 3: - grayscale = True - x = np.reshape(x, (x.shape[0], x.shape[1], x.shape[2], 1)) - # Create tf.data.Dataset from ndarrays - ds = to_dataset(x, y) - # Data preparation: - # - Cast color channel values to float, divide by 255 - # - One-hot encode labels - ds = prepare(ds, num_classes=num_classes) - # Data augmentation: - # - Randomize hue/saturation/brightness/contrast (CIFAR-10/non-grayscale only) - # - Take random 32x32 (or 28x28) crop (after padding to 40x40 (or 32x32)) - # - Random horizontal flip - if augmentation: - ds = _augment_ds(ds, grayscale) - return batch_and_repeat(ds, batch_size, shuffle=shuffle, repeat=True) - - -def to_dataset(x: np.ndarray, y: np.ndarray) -> Dataset: - """Creates a TensorFlow Dataset from two ndarrays - - Args: - x (np.ndarray) - y (np.ndarray) - - Returns: - Dataset - """ - return Dataset.from_tensor_slices((x, y)) - - -def prepare(ds: Dataset, num_classes: int) -> Dataset: - """Prepares dataset for training by - - Casting color channel values to float, divide by 255 - - One-hot encode labels - - Args: - ds (Dataset): TensorFlow Dataset - num_classes (int): Number of classes present in federated dataset partition - - Returns: - Dataset - """ - ds = ds.map(lambda x, y: (x, _prep_cast_label(y))) - ds = ds.map(lambda x, y: (_prep_cast_divide(x), y)) - ds = ds.map(lambda x, y: (x, _prep_one_hot(y, num_classes))) - return ds - - -def _augment_ds(ds: Dataset, grayscale: bool) -> Dataset: - if not grayscale: - ds = ds.map( - lambda x, y: (_random_hue_saturation_brightness_contrast(x), y), - num_parallel_calls=AUTOTUNE, - ) - if grayscale: - ds = ds.map( - lambda x, y: (_random_crop_mnist(x), y), num_parallel_calls=AUTOTUNE - ) - else: - ds = ds.map( - lambda x, y: (_random_crop_cifar(x), y), num_parallel_calls=AUTOTUNE - ) - ds = ds.map( - lambda x, y: (_random_horizontal_flip(x), y), num_parallel_calls=AUTOTUNE - ) - return ds - - -def batch_and_repeat( - ds: Dataset, batch_size: int, shuffle: bool, repeat: bool -) -> Dataset: - """Helper method for to apply tensorflow shuffle, repeat and - batch (in this order) - - Args: - ds (Dataset): Tensorflow Dataset - batch_size (int): Will call ds.batch(batch_size, drop_remainder=False) - if batch_size is greater zero - shuffle (int): Will call ds.shuffle(1024) - repeat (bool): Will call ds.repeat() - - Returns: - Dataset - """ - ds = ds.prefetch(buffer_size=AUTOTUNE) - if shuffle: - ds = ds.shuffle(1024, seed=SEED) - if repeat: - ds = ds.repeat() - if batch_size > 0: - ds = ds.batch(batch_size, drop_remainder=False) - return ds - - -def _prep_cast_label(y: tf.Tensor) -> tf.Tensor: - return tf.cast(y, tf.int64) - - -def _prep_cast_divide(x: tf.Tensor) -> tf.Tensor: - return tf.cast(x, tf.float32) / 255 - - -def _prep_one_hot(y: tf.Tensor, num_classes: int) -> tf.Tensor: - return tf.one_hot(y, num_classes) - - -def _random_crop_mnist(img: tf.Tensor) -> tf.Tensor: - img_padded = tf.image.pad_to_bounding_box(img, 2, 2, 32, 32) - return tf.image.random_crop(img_padded, size=[28, 28, 1], seed=SEED) - - -def _random_crop_cifar(img: tf.Tensor) -> tf.Tensor: - img_padded = tf.image.pad_to_bounding_box(img, 4, 4, 40, 40) - return tf.image.random_crop(img_padded, size=[32, 32, 3], seed=SEED) - - -def _random_horizontal_flip(img: tf.Tensor) -> tf.Tensor: - return tf.image.random_flip_left_right(img, seed=SEED) - - -def _random_hue_saturation_brightness_contrast(img: tf.Tensor) -> tf.Tensor: - img = tf.image.random_hue(img, 0.08, seed=SEED) - img = tf.image.random_saturation(img, 0.6, 1.6, seed=SEED) - img = tf.image.random_brightness(img, 0.05, seed=SEED) - img = tf.image.random_contrast(img, 0.7, 1.3, seed=SEED) - return img diff --git a/xain_fl/datasets/prep_test.py b/xain_fl/datasets/prep_test.py deleted file mode 100644 index ce284dcca..000000000 --- a/xain_fl/datasets/prep_test.py +++ /dev/null @@ -1,17 +0,0 @@ -import tensorflow as tf - -from . import prep - - -def test_init_dataset(mock_keras_dataset): - # Prepare - xy, _ = mock_keras_dataset - # Execute - ds = prep.init_ds_train(xy) - # Assert - assert ds.output_types == (tf.float32, tf.float32) - assert len(ds.output_shapes) == 2 - shape_x = ds.output_shapes[0] - assert len(shape_x) == 4 - shape_y = ds.output_shapes[1] - assert len(shape_y) == 2 diff --git a/xain_fl/datasets/stats/__init__.py b/xain_fl/datasets/stats/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/xain_fl/datasets/stats/__main__.py b/xain_fl/datasets/stats/__main__.py deleted file mode 100644 index dada552b4..000000000 --- a/xain_fl/datasets/stats/__main__.py +++ /dev/null @@ -1,26 +0,0 @@ -import os - -from absl import app - -from xain_fl.datasets.dataset import config, load_splits - -from .stats import DSStats - -module_dir = os.path.dirname(__file__) # directory in which this module resides -stats_dir = os.path.abspath(os.path.join(module_dir, "datasets")) # project root dir - - -def main(_): - for dataset_name in config: - fname = os.path.join(stats_dir, f"{dataset_name}.txt") - with open(fname, "w") as f: - s = DSStats(name=dataset_name, ds=load_splits(dataset_name)).__repr__() - - # Don't log with xain_fl.logger as repl in DSStats expects to - # be printed with print - print(s) - - f.write(s) - - -app.run(main=main) diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_000.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_000.txt deleted file mode 100644 index 9552a872b..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_000.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_000 -number_of_examples_per_label_per_shard -partition: 0000 total: 450 per_label: 48 42 35 52 47 55 43 42 38 48 -partition: 0001 total: 450 per_label: 42 43 48 47 55 41 40 41 44 49 -partition: 0002 total: 450 per_label: 55 50 43 45 43 43 42 43 41 45 -partition: 0003 total: 450 per_label: 46 53 49 42 38 35 45 50 42 50 -partition: 0004 total: 450 per_label: 33 52 53 57 41 40 35 44 57 38 -partition: 0005 total: 450 per_label: 45 48 57 38 47 42 39 40 56 38 -partition: 0006 total: 450 per_label: 55 36 56 47 39 45 48 47 35 42 -partition: 0007 total: 450 per_label: 48 31 54 38 44 52 50 45 41 47 -partition: 0008 total: 450 per_label: 49 45 51 45 34 50 50 45 29 52 -partition: 0009 total: 450 per_label: 49 38 42 55 36 40 39 58 42 51 -partition: 0010 total: 450 per_label: 35 54 44 41 48 41 40 44 59 44 -partition: 0011 total: 450 per_label: 49 40 39 41 42 40 37 59 52 51 -partition: 0012 total: 450 per_label: 34 38 51 45 39 45 39 55 48 56 -partition: 0013 total: 450 per_label: 49 48 33 37 44 42 60 47 54 36 -partition: 0014 total: 450 per_label: 45 41 46 41 55 55 53 27 46 41 -partition: 0015 total: 450 per_label: 66 40 36 40 52 48 37 40 42 49 -partition: 0016 total: 450 per_label: 46 38 44 47 39 43 53 37 48 55 -partition: 0017 total: 450 per_label: 47 31 53 48 39 56 53 41 44 38 -partition: 0018 total: 450 per_label: 51 49 53 55 56 34 42 26 39 45 -partition: 0019 total: 450 per_label: 42 49 44 39 56 46 39 40 43 52 -partition: 0020 total: 450 per_label: 37 41 44 45 54 33 52 51 44 49 -partition: 0021 total: 450 per_label: 54 47 30 46 44 41 57 40 47 44 -partition: 0022 total: 450 per_label: 49 54 46 42 53 48 43 32 33 50 -partition: 0023 total: 450 per_label: 43 45 52 34 46 43 50 37 52 48 -partition: 0024 total: 450 per_label: 57 41 43 34 46 55 42 43 40 49 -partition: 0025 total: 450 per_label: 46 53 47 40 45 43 49 45 40 42 -partition: 0026 total: 450 per_label: 43 43 56 46 46 44 45 38 39 50 -partition: 0027 total: 450 per_label: 34 47 48 46 44 41 49 58 44 39 -partition: 0028 total: 450 per_label: 45 48 47 31 40 42 50 49 51 47 -partition: 0029 total: 450 per_label: 44 51 46 41 50 35 55 43 44 41 -partition: 0030 total: 450 per_label: 56 45 49 47 45 48 34 36 42 48 -partition: 0031 total: 450 per_label: 49 46 47 46 45 52 47 34 40 44 -partition: 0032 total: 450 per_label: 52 28 39 46 52 43 55 42 50 43 -partition: 0033 total: 450 per_label: 46 43 35 64 40 41 52 41 40 48 -partition: 0034 total: 450 per_label: 47 46 51 41 43 57 37 40 49 39 -partition: 0035 total: 450 per_label: 40 61 45 44 40 40 31 42 47 60 -partition: 0036 total: 450 per_label: 45 66 30 52 34 45 45 49 42 42 -partition: 0037 total: 450 per_label: 44 37 37 42 50 56 49 45 41 49 -partition: 0038 total: 450 per_label: 42 59 38 47 56 44 42 48 39 35 -partition: 0039 total: 450 per_label: 50 48 32 52 43 48 50 48 44 35 -partition: 0040 total: 450 per_label: 35 48 39 49 50 45 52 50 43 39 -partition: 0041 total: 450 per_label: 39 49 46 41 40 48 37 50 48 52 -partition: 0042 total: 450 per_label: 48 54 33 40 44 46 47 43 57 38 -partition: 0043 total: 450 per_label: 36 47 42 44 44 46 42 40 59 50 -partition: 0044 total: 450 per_label: 45 47 54 41 54 40 47 34 47 41 -partition: 0045 total: 450 per_label: 51 50 48 47 41 48 35 43 40 47 -partition: 0046 total: 450 per_label: 43 39 47 44 45 40 58 44 43 47 -partition: 0047 total: 450 per_label: 51 45 44 49 36 46 53 45 41 40 -partition: 0048 total: 450 per_label: 29 40 41 57 50 47 47 52 34 53 -partition: 0049 total: 450 per_label: 41 51 32 41 48 51 60 49 35 42 -partition: 0050 total: 450 per_label: 51 38 36 47 44 43 46 53 46 46 -partition: 0051 total: 450 per_label: 42 54 48 37 43 45 46 36 50 49 -partition: 0052 total: 450 per_label: 44 40 44 41 43 50 42 41 50 55 -partition: 0053 total: 450 per_label: 44 61 41 47 43 42 37 49 41 45 -partition: 0054 total: 450 per_label: 48 45 43 52 54 45 32 47 53 31 -partition: 0055 total: 450 per_label: 46 35 57 44 46 54 36 51 41 40 -partition: 0056 total: 450 per_label: 35 45 43 36 35 50 63 42 49 52 -partition: 0057 total: 450 per_label: 39 41 55 45 55 43 44 49 44 35 -partition: 0058 total: 450 per_label: 42 37 51 49 41 38 46 55 49 42 -partition: 0059 total: 450 per_label: 48 45 35 42 46 52 40 44 37 61 -partition: 0060 total: 450 per_label: 52 45 52 36 48 52 36 50 38 41 -partition: 0061 total: 450 per_label: 56 44 52 53 36 46 42 39 41 41 -partition: 0062 total: 450 per_label: 42 46 40 29 52 41 52 67 38 43 -partition: 0063 total: 450 per_label: 44 35 58 48 40 47 36 52 46 44 -partition: 0064 total: 450 per_label: 48 48 54 38 46 42 34 41 55 44 -partition: 0065 total: 450 per_label: 40 41 43 39 51 56 38 50 51 41 -partition: 0066 total: 450 per_label: 61 42 51 33 55 37 42 39 42 48 -partition: 0067 total: 450 per_label: 39 40 37 43 52 53 43 58 36 49 -partition: 0068 total: 450 per_label: 45 62 46 42 39 48 42 37 49 40 -partition: 0069 total: 450 per_label: 41 48 40 49 51 51 46 34 50 40 -partition: 0070 total: 450 per_label: 48 45 49 32 47 40 40 52 50 47 -partition: 0071 total: 450 per_label: 57 40 38 38 46 57 49 37 52 36 -partition: 0072 total: 450 per_label: 43 38 46 49 50 36 46 38 53 51 -partition: 0073 total: 450 per_label: 49 43 40 48 48 34 54 55 40 39 -partition: 0074 total: 450 per_label: 52 43 45 48 45 33 47 44 47 46 -partition: 0075 total: 450 per_label: 39 42 56 46 35 49 48 50 46 39 -partition: 0076 total: 450 per_label: 42 57 38 44 42 45 43 34 51 54 -partition: 0077 total: 450 per_label: 35 50 55 44 44 45 51 40 41 45 -partition: 0078 total: 450 per_label: 37 39 41 54 46 50 51 36 47 49 -partition: 0079 total: 450 per_label: 46 48 52 47 52 39 41 40 38 47 -partition: 0080 total: 450 per_label: 38 44 45 45 36 42 53 65 39 43 -partition: 0081 total: 450 per_label: 44 46 41 52 50 44 38 48 43 44 -partition: 0082 total: 450 per_label: 44 47 49 47 40 36 56 41 49 41 -partition: 0083 total: 450 per_label: 56 30 40 49 41 49 36 61 43 45 -partition: 0084 total: 450 per_label: 37 46 45 43 44 52 39 50 48 46 -partition: 0085 total: 450 per_label: 42 39 46 40 56 45 44 43 45 50 -partition: 0086 total: 450 per_label: 46 41 46 50 62 38 36 56 40 35 -partition: 0087 total: 450 per_label: 48 47 38 48 35 55 43 48 45 43 -partition: 0088 total: 450 per_label: 41 42 42 52 36 55 38 36 62 46 -partition: 0089 total: 450 per_label: 34 42 53 43 48 36 51 54 51 38 -partition: 0090 total: 450 per_label: 47 52 48 50 38 38 30 56 41 50 -partition: 0091 total: 450 per_label: 45 48 45 55 47 34 50 43 40 43 -partition: 0092 total: 450 per_label: 42 55 30 48 38 53 50 50 40 44 -partition: 0093 total: 450 per_label: 43 39 49 47 34 47 40 43 62 46 -partition: 0094 total: 450 per_label: 33 39 46 42 42 47 59 49 46 47 -partition: 0095 total: 450 per_label: 50 35 55 47 41 37 49 49 41 46 -partition: 0096 total: 450 per_label: 50 43 48 60 33 44 43 46 40 43 -partition: 0097 total: 450 per_label: 35 49 42 47 48 41 53 38 51 46 -partition: 0098 total: 450 per_label: 50 51 40 48 52 48 44 37 40 40 -partition: 0099 total: 450 per_label: 45 43 47 48 42 47 39 45 48 46 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_005.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_005.txt deleted file mode 100644 index 5fd8da4cb..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_005.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_005 -number_of_examples_per_label_per_shard -partition: 0000 total: 348 per_label: 37 30 29 41 38 40 31 31 35 36 -partition: 0001 total: 350 per_label: 37 33 31 37 42 40 37 33 23 37 -partition: 0002 total: 351 per_label: 34 45 37 40 36 27 25 34 37 36 -partition: 0003 total: 353 per_label: 44 35 35 29 33 40 35 32 31 39 -partition: 0004 total: 355 per_label: 35 41 39 36 28 25 37 43 35 36 -partition: 0005 total: 357 per_label: 26 39 41 44 30 31 28 37 46 35 -partition: 0006 total: 358 per_label: 31 43 42 33 44 37 27 30 40 31 -partition: 0007 total: 360 per_label: 34 35 41 32 36 28 41 35 44 34 -partition: 0008 total: 362 per_label: 52 26 52 39 27 37 37 39 25 28 -partition: 0009 total: 364 per_label: 38 27 46 31 34 42 40 38 30 38 -partition: 0010 total: 366 per_label: 35 35 39 38 33 40 43 30 30 43 -partition: 0011 total: 367 per_label: 44 31 33 41 26 38 27 49 29 49 -partition: 0012 total: 369 per_label: 34 39 31 37 30 38 40 39 44 37 -partition: 0013 total: 371 per_label: 35 38 41 33 41 30 31 40 43 39 -partition: 0014 total: 373 per_label: 38 35 35 38 37 32 29 48 44 37 -partition: 0015 total: 375 per_label: 28 37 39 33 32 36 33 44 44 49 -partition: 0016 total: 377 per_label: 43 37 32 38 35 34 50 36 42 30 -partition: 0017 total: 379 per_label: 35 32 40 34 47 43 45 36 37 30 -partition: 0018 total: 381 per_label: 44 36 34 35 41 43 33 30 44 41 -partition: 0019 total: 382 per_label: 54 34 26 37 42 41 39 29 34 46 -partition: 0020 total: 384 per_label: 40 33 40 36 33 36 50 32 41 43 -partition: 0021 total: 386 per_label: 41 26 47 41 33 52 40 38 36 32 -partition: 0022 total: 388 per_label: 46 41 47 45 45 27 38 26 34 39 -partition: 0023 total: 390 per_label: 40 38 38 38 54 41 35 27 33 46 -partition: 0024 total: 392 per_label: 33 40 37 39 41 32 41 43 40 46 -partition: 0025 total: 394 per_label: 37 37 38 36 52 40 44 35 44 31 -partition: 0026 total: 396 per_label: 41 52 22 44 33 26 50 39 36 53 -partition: 0027 total: 398 per_label: 43 41 53 33 52 48 38 25 29 36 -partition: 0028 total: 400 per_label: 42 37 41 31 38 36 44 37 50 44 -partition: 0029 total: 402 per_label: 49 37 39 31 43 50 39 34 35 45 -partition: 0030 total: 404 per_label: 43 48 42 38 41 41 39 41 34 37 -partition: 0031 total: 406 per_label: 38 44 47 34 45 38 49 40 35 36 -partition: 0032 total: 408 per_label: 36 36 43 53 38 36 38 41 41 46 -partition: 0033 total: 410 per_label: 44 46 47 23 32 35 48 55 38 42 -partition: 0034 total: 412 per_label: 35 42 44 40 46 37 46 37 45 40 -partition: 0035 total: 414 per_label: 50 48 45 36 40 48 44 35 33 35 -partition: 0036 total: 416 per_label: 40 40 43 43 41 43 35 39 45 47 -partition: 0037 total: 418 per_label: 52 38 41 45 46 46 36 31 48 35 -partition: 0038 total: 421 per_label: 41 32 33 46 49 33 60 40 40 47 -partition: 0039 total: 423 per_label: 45 38 41 52 39 45 48 36 39 40 -partition: 0040 total: 425 per_label: 46 46 42 44 39 49 32 39 47 41 -partition: 0041 total: 427 per_label: 38 57 43 39 35 40 33 41 43 58 -partition: 0042 total: 429 per_label: 42 64 30 52 33 41 42 45 41 39 -partition: 0043 total: 431 per_label: 41 34 37 41 47 53 48 45 39 46 -partition: 0044 total: 433 per_label: 44 56 35 45 51 46 39 46 37 34 -partition: 0045 total: 436 per_label: 46 48 34 51 44 43 48 47 41 34 -partition: 0046 total: 438 per_label: 36 50 34 46 50 42 46 46 47 41 -partition: 0047 total: 440 per_label: 35 45 46 42 39 52 44 51 43 43 -partition: 0048 total: 442 per_label: 51 47 37 38 41 47 45 40 53 43 -partition: 0049 total: 444 per_label: 35 58 34 45 47 41 38 41 59 46 -partition: 0050 total: 447 per_label: 41 46 53 38 53 41 45 39 51 40 -partition: 0051 total: 449 per_label: 53 48 47 47 41 49 40 41 36 47 -partition: 0052 total: 451 per_label: 41 42 49 44 46 42 48 42 42 55 -partition: 0053 total: 453 per_label: 52 46 48 48 39 43 59 42 40 36 -partition: 0054 total: 456 per_label: 36 41 35 56 48 45 53 47 43 52 -partition: 0055 total: 458 per_label: 34 47 36 43 48 56 57 51 38 48 -partition: 0056 total: 460 per_label: 51 38 39 49 47 45 44 62 41 44 -partition: 0057 total: 462 per_label: 48 55 42 42 40 46 51 39 50 49 -partition: 0058 total: 465 per_label: 42 45 51 41 47 48 45 41 52 53 -partition: 0059 total: 467 per_label: 49 58 42 45 47 45 40 50 42 49 -partition: 0060 total: 469 per_label: 47 47 45 56 54 47 32 49 57 35 -partition: 0061 total: 472 per_label: 49 40 58 45 46 58 38 53 44 41 -partition: 0062 total: 474 per_label: 38 45 46 40 39 51 65 45 50 55 -partition: 0063 total: 476 per_label: 40 43 62 47 58 45 50 49 45 37 -partition: 0064 total: 479 per_label: 41 42 46 53 49 40 44 62 55 47 -partition: 0065 total: 481 per_label: 61 49 39 43 49 58 41 44 41 56 -partition: 0066 total: 484 per_label: 51 45 66 47 43 53 39 52 41 47 -partition: 0067 total: 486 per_label: 53 54 45 48 45 47 51 54 42 47 -partition: 0068 total: 489 per_label: 48 43 60 34 54 44 54 63 38 51 -partition: 0069 total: 491 per_label: 52 37 57 55 50 49 34 50 59 48 -partition: 0070 total: 493 per_label: 47 59 52 35 42 60 44 48 61 45 -partition: 0071 total: 496 per_label: 65 34 52 42 67 44 40 54 46 52 -partition: 0072 total: 498 per_label: 44 53 43 44 55 59 51 57 42 50 -partition: 0073 total: 501 per_label: 51 66 52 46 47 52 43 44 54 46 -partition: 0074 total: 503 per_label: 47 53 41 57 57 56 55 40 53 44 -partition: 0075 total: 506 per_label: 53 53 55 33 51 52 47 55 57 50 -partition: 0076 total: 508 per_label: 61 43 46 45 57 62 47 40 59 48 -partition: 0077 total: 511 per_label: 49 47 49 57 48 34 66 54 56 51 -partition: 0078 total: 514 per_label: 60 48 55 51 56 35 58 56 48 47 -partition: 0079 total: 516 per_label: 51 45 56 60 45 52 48 54 54 51 -partition: 0080 total: 519 per_label: 48 64 47 46 48 53 52 43 59 59 -partition: 0081 total: 521 per_label: 40 59 59 54 51 52 60 46 46 54 -partition: 0082 total: 524 per_label: 47 45 46 65 55 58 58 43 55 52 -partition: 0083 total: 526 per_label: 52 53 61 51 49 50 48 63 43 56 -partition: 0084 total: 529 per_label: 44 55 47 55 59 47 52 64 52 54 -partition: 0085 total: 532 per_label: 53 56 62 58 46 44 64 47 54 48 -partition: 0086 total: 534 per_label: 66 39 49 59 50 55 45 69 51 51 -partition: 0087 total: 537 per_label: 48 50 52 55 51 62 44 58 59 58 -partition: 0088 total: 540 per_label: 46 53 55 46 74 55 50 55 49 57 -partition: 0089 total: 542 per_label: 53 54 53 55 59 49 50 70 56 43 -partition: 0090 total: 545 per_label: 54 52 49 65 41 67 52 44 65 56 -partition: 0091 total: 548 per_label: 47 49 60 56 56 52 56 64 62 46 -partition: 0092 total: 551 per_label: 54 63 55 64 49 46 43 65 55 57 -partition: 0093 total: 553 per_label: 56 70 53 61 51 45 51 62 46 58 -partition: 0094 total: 556 per_label: 51 51 44 64 46 64 61 52 65 58 -partition: 0095 total: 559 per_label: 48 47 66 49 49 59 69 56 61 55 -partition: 0096 total: 562 per_label: 59 44 65 62 53 46 63 61 51 58 -partition: 0097 total: 565 per_label: 60 54 60 63 49 59 62 52 48 58 -partition: 0098 total: 567 per_label: 50 63 48 71 63 51 56 49 69 47 -partition: 0099 total: 570 per_label: 61 60 59 57 54 62 50 55 54 58 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_010.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_010.txt deleted file mode 100644 index 17bcb2a92..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_010.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_010 -number_of_examples_per_label_per_shard -partition: 0000 total: 264 per_label: 29 24 24 30 28 31 23 27 23 25 -partition: 0001 total: 266 per_label: 30 25 16 30 28 35 29 23 20 30 -partition: 0002 total: 269 per_label: 23 29 30 31 34 21 23 22 24 32 -partition: 0003 total: 272 per_label: 29 33 31 28 28 22 20 27 29 25 -partition: 0004 total: 275 per_label: 34 24 25 23 27 30 29 27 26 30 -partition: 0005 total: 277 per_label: 27 30 31 26 18 24 29 34 26 32 -partition: 0006 total: 280 per_label: 25 37 34 28 31 21 25 25 28 26 -partition: 0007 total: 283 per_label: 23 30 28 42 22 23 23 30 40 22 -partition: 0008 total: 286 per_label: 24 34 35 22 35 33 19 25 31 28 -partition: 0009 total: 289 per_label: 30 31 35 26 26 22 30 29 34 26 -partition: 0010 total: 291 per_label: 30 22 42 31 29 28 34 21 28 26 -partition: 0011 total: 294 per_label: 43 16 35 23 21 38 34 40 16 28 -partition: 0012 total: 297 per_label: 31 26 32 28 34 32 28 23 30 33 -partition: 0013 total: 300 per_label: 28 30 36 34 20 28 37 29 23 35 -partition: 0014 total: 303 per_label: 34 26 29 33 24 30 25 42 23 37 -partition: 0015 total: 306 per_label: 37 31 27 35 24 29 29 32 33 29 -partition: 0016 total: 309 per_label: 21 35 35 27 29 35 27 34 38 28 -partition: 0017 total: 312 per_label: 30 24 20 29 36 24 26 43 40 40 -partition: 0018 total: 316 per_label: 29 31 40 35 29 25 23 37 33 34 -partition: 0019 total: 319 per_label: 26 32 32 23 27 35 31 37 37 39 -partition: 0020 total: 322 per_label: 41 32 24 34 30 26 44 29 35 27 -partition: 0021 total: 325 per_label: 28 29 27 29 42 35 39 33 35 28 -partition: 0022 total: 328 per_label: 36 33 34 25 36 42 34 22 36 30 -partition: 0023 total: 332 per_label: 51 26 29 34 34 33 27 31 30 37 -partition: 0024 total: 335 per_label: 39 26 26 34 33 41 39 21 33 43 -partition: 0025 total: 338 per_label: 30 32 41 36 30 26 44 26 38 35 -partition: 0026 total: 342 per_label: 38 24 38 35 30 45 33 37 33 29 -partition: 0027 total: 345 per_label: 41 38 43 40 41 25 35 24 27 31 -partition: 0028 total: 349 per_label: 37 33 35 31 49 36 29 26 31 42 -partition: 0029 total: 352 per_label: 25 34 33 40 36 32 33 39 38 42 -partition: 0030 total: 356 per_label: 35 38 35 31 49 28 45 31 34 30 -partition: 0031 total: 359 per_label: 39 38 23 37 31 32 45 35 38 41 -partition: 0032 total: 363 per_label: 38 47 32 35 41 34 36 28 27 45 -partition: 0033 total: 367 per_label: 39 29 46 28 45 40 40 27 40 33 -partition: 0034 total: 370 per_label: 41 37 44 29 32 46 37 29 38 37 -partition: 0035 total: 374 per_label: 43 38 30 29 44 38 38 41 30 43 -partition: 0036 total: 378 per_label: 44 45 43 33 33 37 38 37 36 32 -partition: 0037 total: 381 per_label: 32 37 47 42 37 36 41 32 30 47 -partition: 0038 total: 385 per_label: 31 38 43 41 43 32 40 47 39 31 -partition: 0039 total: 389 per_label: 43 44 38 27 29 34 47 47 36 44 -partition: 0040 total: 393 per_label: 35 43 42 36 44 33 43 38 42 37 -partition: 0041 total: 397 per_label: 48 43 44 34 41 49 40 31 33 34 -partition: 0042 total: 401 per_label: 39 39 42 41 39 41 34 38 45 43 -partition: 0043 total: 405 per_label: 50 38 41 43 43 42 36 32 44 36 -partition: 0044 total: 409 per_label: 42 29 30 44 47 35 59 37 38 48 -partition: 0045 total: 413 per_label: 42 38 35 57 40 41 45 35 41 39 -partition: 0046 total: 417 per_label: 46 43 46 38 38 53 36 37 45 35 -partition: 0047 total: 421 per_label: 37 59 41 40 37 39 29 43 39 57 -partition: 0048 total: 426 per_label: 42 57 33 51 30 37 40 42 47 47 -partition: 0049 total: 430 per_label: 39 40 37 46 41 52 52 47 34 42 -partition: 0050 total: 434 per_label: 45 55 33 40 54 51 39 46 39 32 -partition: 0051 total: 438 per_label: 43 44 38 51 50 41 45 41 45 40 -partition: 0052 total: 443 per_label: 43 55 33 51 48 40 46 54 41 32 -partition: 0053 total: 447 per_label: 31 44 45 41 41 56 45 48 47 49 -partition: 0054 total: 452 per_label: 54 51 38 38 43 44 44 41 56 43 -partition: 0055 total: 456 per_label: 36 57 35 47 46 47 40 44 56 48 -partition: 0056 total: 461 per_label: 43 49 52 39 54 39 48 41 54 42 -partition: 0057 total: 465 per_label: 53 49 52 47 42 52 41 42 39 48 -partition: 0058 total: 470 per_label: 43 42 51 47 50 43 52 41 45 56 -partition: 0059 total: 475 per_label: 54 48 47 49 39 48 63 46 43 38 -partition: 0060 total: 480 per_label: 35 40 42 61 50 49 51 57 39 56 -partition: 0061 total: 484 per_label: 41 54 35 45 53 56 61 54 38 47 -partition: 0062 total: 489 per_label: 58 44 45 50 45 45 49 55 54 44 -partition: 0063 total: 494 per_label: 44 60 47 42 50 47 50 47 49 58 -partition: 0064 total: 499 per_label: 52 45 51 42 46 55 51 42 53 62 -partition: 0065 total: 504 per_label: 51 63 41 57 54 51 34 55 55 43 -partition: 0066 total: 509 per_label: 54 48 61 57 53 56 37 57 47 39 -partition: 0067 total: 514 per_label: 45 46 55 43 50 59 61 47 55 53 -partition: 0068 total: 519 per_label: 40 48 59 51 55 53 56 56 52 49 -partition: 0069 total: 525 per_label: 47 42 59 57 54 42 55 64 58 47 -partition: 0070 total: 530 per_label: 59 55 41 50 55 64 46 51 47 62 -partition: 0071 total: 535 per_label: 59 51 72 52 46 56 43 59 46 51 -partition: 0072 total: 541 per_label: 59 59 47 47 52 55 56 65 48 53 -partition: 0073 total: 546 per_label: 57 44 69 49 57 54 52 61 48 55 -partition: 0074 total: 551 per_label: 57 57 66 49 52 54 42 56 67 51 -partition: 0075 total: 557 per_label: 55 48 55 46 68 57 49 60 59 60 -partition: 0076 total: 562 per_label: 65 49 55 49 66 53 55 62 54 54 -partition: 0077 total: 568 per_label: 54 71 50 50 58 69 57 55 53 51 -partition: 0078 total: 574 per_label: 54 65 54 63 59 65 53 43 64 54 -partition: 0079 total: 580 per_label: 63 60 61 40 59 59 56 62 64 56 -partition: 0080 total: 585 per_label: 65 49 55 55 72 60 54 48 68 59 -partition: 0081 total: 591 per_label: 64 54 55 66 57 45 73 66 56 55 -partition: 0082 total: 597 per_label: 68 55 65 61 56 45 60 67 63 57 -partition: 0083 total: 603 per_label: 56 64 62 57 50 70 62 49 65 68 -partition: 0084 total: 609 per_label: 46 73 66 65 60 57 69 54 60 59 -partition: 0085 total: 615 per_label: 53 55 54 74 64 67 71 51 61 65 -partition: 0086 total: 621 per_label: 59 66 74 60 58 53 57 76 55 63 -partition: 0087 total: 628 per_label: 62 61 59 72 66 60 62 68 58 60 -partition: 0088 total: 634 per_label: 59 56 62 67 63 55 69 74 68 61 -partition: 0089 total: 640 per_label: 68 60 63 61 58 74 54 72 65 65 -partition: 0090 total: 647 per_label: 59 60 65 61 82 68 57 64 60 71 -partition: 0091 total: 653 per_label: 68 62 62 72 69 63 63 78 62 54 -partition: 0092 total: 660 per_label: 64 62 63 78 61 74 57 56 83 62 -partition: 0093 total: 666 per_label: 60 74 74 58 59 59 62 87 70 63 -partition: 0094 total: 673 per_label: 65 71 62 82 61 57 64 74 67 70 -partition: 0095 total: 680 per_label: 63 74 61 78 55 75 68 64 72 70 -partition: 0096 total: 686 per_label: 65 51 78 57 68 64 89 72 73 69 -partition: 0097 total: 693 per_label: 69 66 78 95 51 67 68 66 62 71 -partition: 0098 total: 700 per_label: 63 74 58 75 75 62 80 66 76 71 -partition: 0099 total: 707 per_label: 76 73 76 72 71 79 62 67 67 64 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_015.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_015.txt deleted file mode 100644 index 9bda3b73e..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_015.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_015 -number_of_examples_per_label_per_shard -partition: 0000 total: 196 per_label: 20 19 20 26 21 26 17 16 15 16 -partition: 0001 total: 199 per_label: 20 16 13 19 20 20 21 23 21 26 -partition: 0002 total: 202 per_label: 24 19 13 23 22 29 19 18 14 21 -partition: 0003 total: 205 per_label: 18 24 25 23 28 12 19 15 17 24 -partition: 0004 total: 208 per_label: 22 27 22 19 23 15 13 23 27 17 -partition: 0005 total: 212 per_label: 27 18 20 20 18 27 18 20 18 26 -partition: 0006 total: 215 per_label: 25 22 23 20 18 20 26 19 19 23 -partition: 0007 total: 218 per_label: 20 24 25 21 17 15 23 29 20 24 -partition: 0008 total: 221 per_label: 21 29 24 23 26 17 19 18 23 21 -partition: 0009 total: 225 per_label: 15 25 24 30 13 20 16 29 33 20 -partition: 0010 total: 228 per_label: 19 28 26 25 29 24 18 16 22 21 -partition: 0011 total: 231 per_label: 22 20 31 20 28 20 23 21 27 19 -partition: 0012 total: 235 per_label: 21 27 26 18 20 23 25 27 28 20 -partition: 0013 total: 238 per_label: 29 18 34 27 23 21 26 15 21 24 -partition: 0014 total: 242 per_label: 40 15 29 22 12 27 22 37 16 22 -partition: 0015 total: 246 per_label: 21 18 35 23 24 28 30 21 22 24 -partition: 0016 total: 249 per_label: 27 25 22 23 27 31 29 18 22 25 -partition: 0017 total: 253 per_label: 23 26 32 28 19 23 25 28 18 31 -partition: 0018 total: 257 per_label: 32 20 21 29 18 23 19 37 22 36 -partition: 0019 total: 261 per_label: 30 26 25 31 22 25 25 26 27 24 -partition: 0020 total: 265 per_label: 17 30 31 25 24 31 25 29 31 22 -partition: 0021 total: 269 per_label: 27 22 20 21 31 18 24 36 33 37 -partition: 0022 total: 273 per_label: 32 30 24 28 27 22 25 27 35 23 -partition: 0023 total: 277 per_label: 14 23 33 29 26 27 17 36 31 41 -partition: 0024 total: 281 per_label: 27 22 29 26 25 30 33 33 27 29 -partition: 0025 total: 285 per_label: 35 36 18 25 24 24 38 28 38 19 -partition: 0026 total: 289 per_label: 27 24 25 23 40 34 35 26 28 27 -partition: 0027 total: 294 per_label: 31 30 32 25 31 36 31 19 32 27 -partition: 0028 total: 298 per_label: 48 24 25 30 34 28 25 26 28 30 -partition: 0029 total: 303 per_label: 31 25 20 29 32 35 30 26 29 46 -partition: 0030 total: 307 per_label: 33 29 36 31 23 27 42 23 34 29 -partition: 0031 total: 312 per_label: 33 22 37 38 28 36 34 27 29 28 -partition: 0032 total: 317 per_label: 40 28 42 28 33 34 28 28 26 30 -partition: 0033 total: 321 per_label: 33 33 37 42 42 24 34 16 28 32 -partition: 0034 total: 326 per_label: 28 39 26 26 39 38 26 29 34 41 -partition: 0035 total: 331 per_label: 28 26 32 36 38 27 38 40 30 36 -partition: 0036 total: 336 per_label: 35 34 33 28 44 32 37 28 38 27 -partition: 0037 total: 341 per_label: 37 38 18 39 30 24 44 37 31 43 -partition: 0038 total: 346 per_label: 37 43 37 33 40 37 36 23 25 35 -partition: 0039 total: 351 per_label: 36 29 43 24 41 40 36 26 42 34 -partition: 0040 total: 357 per_label: 40 37 43 29 31 39 34 31 37 36 -partition: 0041 total: 362 per_label: 43 35 30 27 42 37 37 38 29 44 -partition: 0042 total: 367 per_label: 40 44 40 33 34 36 39 37 34 30 -partition: 0043 total: 373 per_label: 32 37 45 41 36 35 40 30 30 47 -partition: 0044 total: 379 per_label: 30 38 41 40 43 32 40 46 38 31 -partition: 0045 total: 384 per_label: 44 43 40 26 28 33 44 48 36 42 -partition: 0046 total: 390 per_label: 32 43 43 36 44 35 42 34 43 38 -partition: 0047 total: 396 per_label: 47 41 42 35 39 46 44 35 33 34 -partition: 0048 total: 402 per_label: 43 42 41 41 39 42 33 35 45 41 -partition: 0049 total: 408 per_label: 49 38 40 42 45 42 37 34 42 39 -partition: 0050 total: 414 per_label: 41 29 34 43 47 37 57 38 40 48 -partition: 0051 total: 420 per_label: 44 38 35 60 40 41 47 35 41 39 -partition: 0052 total: 427 per_label: 46 44 48 40 39 53 36 39 45 37 -partition: 0053 total: 433 per_label: 38 60 44 42 37 39 30 41 43 59 -partition: 0054 total: 439 per_label: 43 61 30 50 32 40 45 48 47 43 -partition: 0055 total: 446 per_label: 44 39 38 45 48 57 48 44 37 46 -partition: 0056 total: 453 per_label: 44 59 37 45 55 48 41 48 40 36 -partition: 0057 total: 460 per_label: 50 48 33 55 46 47 52 48 43 38 -partition: 0058 total: 466 per_label: 37 54 38 47 54 48 51 51 46 40 -partition: 0059 total: 473 per_label: 41 51 48 45 42 48 39 54 51 54 -partition: 0060 total: 481 per_label: 48 59 36 43 47 49 50 49 61 39 -partition: 0061 total: 488 per_label: 40 50 46 43 47 56 46 40 63 57 -partition: 0062 total: 495 per_label: 53 50 67 54 57 40 48 35 47 44 -partition: 0063 total: 503 per_label: 57 59 46 48 41 53 47 49 50 53 -partition: 0064 total: 510 per_label: 53 44 58 45 56 43 67 52 41 51 -partition: 0065 total: 518 per_label: 41 47 40 68 47 56 61 52 48 58 -partition: 0066 total: 526 per_label: 40 56 43 52 58 61 62 60 43 51 -partition: 0067 total: 533 per_label: 63 46 44 56 52 51 57 66 48 50 -partition: 0068 total: 541 per_label: 50 66 54 45 55 53 52 50 57 59 -partition: 0069 total: 550 per_label: 54 56 55 47 53 57 54 46 59 69 -partition: 0070 total: 558 per_label: 61 61 49 64 59 54 41 62 64 43 -partition: 0071 total: 566 per_label: 57 49 70 62 61 66 43 61 50 47 -partition: 0072 total: 575 per_label: 48 56 66 44 44 65 73 58 63 58 -partition: 0073 total: 583 per_label: 48 53 60 64 66 52 60 66 60 54 -partition: 0074 total: 592 per_label: 61 53 54 58 62 61 53 63 52 75 -partition: 0075 total: 601 per_label: 70 59 70 56 58 68 50 64 55 51 -partition: 0076 total: 610 per_label: 62 66 59 60 56 63 62 68 55 59 -partition: 0077 total: 619 per_label: 66 49 76 53 67 59 55 77 57 60 -partition: 0078 total: 628 per_label: 62 64 72 56 61 69 53 62 73 56 -partition: 0079 total: 638 per_label: 76 50 66 51 80 56 57 63 67 72 -partition: 0080 total: 647 per_label: 62 71 54 60 72 72 63 76 56 61 -partition: 0081 total: 657 per_label: 62 79 64 65 62 75 62 56 71 61 -partition: 0082 total: 667 per_label: 66 71 72 52 73 66 63 64 76 64 -partition: 0083 total: 677 per_label: 77 59 63 62 75 76 64 56 79 66 -partition: 0084 total: 687 per_label: 78 67 62 77 71 49 84 76 61 62 -partition: 0085 total: 698 per_label: 71 62 77 74 60 61 73 73 76 71 -partition: 0086 total: 708 per_label: 64 81 66 67 64 77 72 60 80 77 -partition: 0087 total: 719 per_label: 55 72 81 80 74 71 82 58 72 74 -partition: 0088 total: 729 per_label: 73 71 76 77 71 74 71 83 59 74 -partition: 0089 total: 740 per_label: 68 77 74 83 77 65 75 81 70 70 -partition: 0090 total: 751 per_label: 77 65 73 80 69 67 78 87 80 75 -partition: 0091 total: 763 per_label: 77 73 76 71 72 86 67 78 77 86 -partition: 0092 total: 774 per_label: 71 69 82 77 107 75 67 94 69 63 -partition: 0093 total: 786 per_label: 79 79 65 89 60 95 73 72 96 78 -partition: 0094 total: 798 per_label: 74 84 89 76 80 67 75 95 85 73 -partition: 0095 total: 810 per_label: 78 94 77 99 73 68 74 90 72 85 -partition: 0096 total: 822 per_label: 70 72 78 85 66 90 101 78 101 81 -partition: 0097 total: 834 per_label: 84 69 95 87 80 77 90 91 74 87 -partition: 0098 total: 847 per_label: 82 88 80 101 78 81 90 81 84 82 -partition: 0099 total: 859 per_label: 89 90 87 91 88 91 78 75 88 82 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_020.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_020.txt deleted file mode 100644 index a224d688c..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_020.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_020 -number_of_examples_per_label_per_shard -partition: 0000 total: 144 per_label: 16 16 15 17 18 17 12 13 8 12 -partition: 0001 total: 147 per_label: 16 12 12 14 12 16 14 15 18 18 -partition: 0002 total: 150 per_label: 15 13 8 19 16 21 17 14 11 16 -partition: 0003 total: 153 per_label: 16 13 11 18 17 21 14 13 13 17 -partition: 0004 total: 156 per_label: 17 17 20 15 22 9 18 12 13 13 -partition: 0005 total: 159 per_label: 11 15 17 18 18 13 9 16 21 21 -partition: 0006 total: 162 per_label: 20 25 18 18 15 12 11 16 12 15 -partition: 0007 total: 165 per_label: 20 13 13 14 15 22 12 17 19 20 -partition: 0008 total: 169 per_label: 22 19 18 15 16 16 22 14 11 16 -partition: 0009 total: 172 per_label: 14 13 21 18 9 11 23 26 20 17 -partition: 0010 total: 175 per_label: 18 28 18 16 17 14 13 17 15 19 -partition: 0011 total: 179 per_label: 13 22 22 21 20 13 15 14 21 18 -partition: 0012 total: 182 per_label: 15 17 18 24 12 18 13 23 25 17 -partition: 0013 total: 186 per_label: 15 24 22 21 22 17 13 13 21 18 -partition: 0014 total: 190 per_label: 18 21 24 12 23 22 15 17 23 15 -partition: 0015 total: 194 per_label: 21 18 26 21 19 11 23 18 22 15 -partition: 0016 total: 198 per_label: 17 23 18 15 22 20 20 22 21 20 -partition: 0017 total: 202 per_label: 26 12 33 24 14 20 21 17 16 19 -partition: 0018 total: 206 per_label: 33 10 23 17 13 26 22 29 14 19 -partition: 0019 total: 210 per_label: 18 16 28 18 20 24 26 19 19 22 -partition: 0020 total: 214 per_label: 26 24 22 16 26 25 25 11 16 23 -partition: 0021 total: 218 per_label: 17 19 26 30 15 20 24 26 17 24 -partition: 0022 total: 223 per_label: 25 16 24 21 17 21 19 35 17 28 -partition: 0023 total: 227 per_label: 30 19 16 31 16 24 13 26 21 31 -partition: 0024 total: 232 per_label: 20 28 20 22 19 23 29 19 31 21 -partition: 0025 total: 236 per_label: 19 26 32 22 22 24 20 28 26 17 -partition: 0026 total: 241 per_label: 23 21 17 20 28 19 20 33 27 33 -partition: 0027 total: 246 per_label: 30 27 21 24 26 17 24 23 33 21 -partition: 0028 total: 251 per_label: 12 19 31 28 24 26 14 36 26 35 -partition: 0029 total: 256 per_label: 24 24 27 23 19 27 26 31 26 29 -partition: 0030 total: 261 per_label: 36 29 18 26 26 20 34 21 30 21 -partition: 0031 total: 266 per_label: 20 24 23 19 31 29 32 34 32 22 -partition: 0032 total: 271 per_label: 27 22 31 27 31 34 35 9 30 25 -partition: 0033 total: 277 per_label: 34 29 24 25 30 30 21 27 28 29 -partition: 0034 total: 282 per_label: 44 25 20 22 34 32 28 23 23 31 -partition: 0035 total: 288 per_label: 32 21 25 31 24 32 33 22 30 38 -partition: 0036 total: 294 per_label: 28 28 36 34 27 22 40 20 31 28 -partition: 0037 total: 300 per_label: 32 20 33 28 24 43 33 35 27 25 -partition: 0038 total: 306 per_label: 37 28 41 35 34 22 26 21 29 33 -partition: 0039 total: 312 per_label: 36 33 34 35 43 23 32 20 25 31 -partition: 0040 total: 318 per_label: 22 39 27 31 38 38 24 28 35 36 -partition: 0041 total: 324 per_label: 29 29 31 30 36 26 37 41 28 37 -partition: 0042 total: 331 per_label: 36 32 27 31 43 35 39 25 37 26 -partition: 0043 total: 338 per_label: 33 42 20 35 30 21 44 33 31 49 -partition: 0044 total: 344 per_label: 41 39 40 33 43 39 32 22 25 30 -partition: 0045 total: 351 per_label: 35 31 40 28 37 36 40 28 40 36 -partition: 0046 total: 358 per_label: 41 34 41 26 31 44 35 31 40 35 -partition: 0047 total: 365 per_label: 43 33 36 28 45 35 36 41 27 41 -partition: 0048 total: 373 per_label: 40 44 39 34 38 36 37 36 35 34 -partition: 0049 total: 380 per_label: 32 41 44 40 36 37 42 28 33 47 -partition: 0050 total: 388 per_label: 30 37 45 41 36 33 41 55 37 33 -partition: 0051 total: 396 per_label: 42 46 40 28 33 36 47 43 40 41 -partition: 0052 total: 403 per_label: 38 43 41 35 50 33 48 38 40 37 -partition: 0053 total: 412 per_label: 53 46 44 43 35 50 34 33 37 37 -partition: 0054 total: 420 per_label: 40 39 42 41 44 45 45 36 40 48 -partition: 0055 total: 428 per_label: 52 37 45 40 48 40 36 38 54 38 -partition: 0056 total: 437 per_label: 41 35 32 60 48 41 59 41 39 41 -partition: 0057 total: 446 per_label: 48 46 48 46 39 52 46 34 43 44 -partition: 0058 total: 454 per_label: 51 47 46 45 44 45 32 44 48 52 -partition: 0059 total: 464 per_label: 42 63 37 55 35 34 41 44 50 63 -partition: 0060 total: 473 per_label: 40 53 37 50 45 57 54 56 35 46 -partition: 0061 total: 482 per_label: 50 62 40 42 55 62 43 48 45 35 -partition: 0062 total: 492 per_label: 50 48 41 59 52 47 53 47 51 44 -partition: 0063 total: 502 per_label: 45 62 37 53 55 48 52 58 50 42 -partition: 0064 total: 512 per_label: 43 52 52 47 47 59 48 59 51 54 -partition: 0065 total: 522 per_label: 52 65 36 49 50 51 52 51 71 45 -partition: 0066 total: 533 per_label: 46 57 52 47 61 58 49 42 62 59 -partition: 0067 total: 543 per_label: 56 52 71 57 54 52 54 41 51 55 -partition: 0068 total: 554 per_label: 59 59 55 52 53 52 55 61 47 61 -partition: 0069 total: 565 per_label: 63 53 55 62 48 53 73 54 57 47 -partition: 0070 total: 576 per_label: 36 54 45 68 64 66 70 68 42 63 -partition: 0071 total: 588 per_label: 62 56 52 61 61 57 61 62 57 59 -partition: 0072 total: 600 per_label: 62 69 53 50 55 59 68 59 62 63 -partition: 0073 total: 612 per_label: 63 60 64 53 60 63 56 57 64 72 -partition: 0074 total: 624 per_label: 64 74 53 69 68 62 45 66 69 54 -partition: 0075 total: 637 per_label: 60 55 76 65 67 75 52 72 59 56 -partition: 0076 total: 649 per_label: 57 65 76 52 60 68 80 59 71 61 -partition: 0077 total: 662 per_label: 56 53 72 77 68 58 68 82 67 61 -partition: 0078 total: 676 per_label: 79 70 54 61 71 79 61 66 59 76 -partition: 0079 total: 689 per_label: 80 69 86 72 57 71 58 68 61 67 -partition: 0080 total: 703 per_label: 65 64 80 55 79 62 76 92 58 72 -partition: 0081 total: 717 per_label: 73 69 81 67 69 83 51 75 86 63 -partition: 0082 total: 731 per_label: 85 58 74 60 88 69 64 77 76 80 -partition: 0083 total: 746 per_label: 70 88 64 67 78 82 79 82 67 69 -partition: 0084 total: 761 per_label: 74 86 72 80 81 86 71 58 82 71 -partition: 0085 total: 776 per_label: 88 75 79 55 79 84 75 76 90 75 -partition: 0086 total: 792 per_label: 80 71 75 83 82 66 92 77 87 79 -partition: 0087 total: 807 per_label: 89 73 88 86 82 64 77 89 83 76 -partition: 0088 total: 824 per_label: 76 93 78 81 71 89 88 72 87 89 -partition: 0089 total: 840 per_label: 67 82 87 99 86 86 97 70 78 88 -partition: 0090 total: 857 per_label: 79 91 94 87 89 74 85 102 73 83 -partition: 0091 total: 874 per_label: 85 89 90 93 83 79 93 86 92 84 -partition: 0092 total: 891 per_label: 92 75 83 90 85 101 75 110 91 89 -partition: 0093 total: 909 per_label: 89 81 94 92 117 84 80 100 85 87 -partition: 0094 total: 928 per_label: 90 91 85 103 77 112 83 85 111 91 -partition: 0095 total: 946 per_label: 84 99 98 98 91 81 90 117 96 92 -partition: 0096 total: 965 per_label: 99 112 87 106 82 87 101 102 90 99 -partition: 0097 total: 984 per_label: 88 77 113 99 93 99 111 100 110 94 -partition: 0098 total: 1004 per_label: 97 99 107 112 87 98 108 96 94 106 -partition: 0099 total: 1024 per_label: 105 107 93 117 105 105 96 94 106 96 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_025.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_025.txt deleted file mode 100644 index 0d7a3d270..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_025.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_025 -number_of_examples_per_label_per_shard -partition: 0000 total: 104 per_label: 14 13 11 10 12 12 7 10 5 10 -partition: 0001 total: 106 per_label: 8 7 11 18 10 16 12 7 11 6 -partition: 0002 total: 109 per_label: 11 9 6 7 11 8 10 12 17 18 -partition: 0003 total: 112 per_label: 12 11 7 15 11 17 12 11 4 12 -partition: 0004 total: 114 per_label: 16 10 6 10 16 15 12 10 9 10 -partition: 0005 total: 117 per_label: 8 11 13 16 17 10 10 10 10 12 -partition: 0006 total: 120 per_label: 13 13 14 12 11 8 12 11 10 16 -partition: 0007 total: 123 per_label: 9 11 15 12 14 11 8 12 18 13 -partition: 0008 total: 126 per_label: 15 23 12 16 13 7 7 13 10 10 -partition: 0009 total: 130 per_label: 16 8 11 7 12 19 14 11 14 18 -partition: 0010 total: 133 per_label: 18 10 16 14 12 13 11 17 10 12 -partition: 0011 total: 136 per_label: 15 19 13 13 11 12 18 8 12 15 -partition: 0012 total: 140 per_label: 12 10 18 15 7 10 18 22 15 13 -partition: 0013 total: 143 per_label: 13 24 13 9 14 13 10 16 13 18 -partition: 0014 total: 147 per_label: 16 17 18 18 22 7 11 10 14 14 -partition: 0015 total: 150 per_label: 7 18 19 17 7 14 14 18 23 13 -partition: 0016 total: 154 per_label: 14 16 16 27 15 12 10 16 18 10 -partition: 0017 total: 158 per_label: 14 19 16 12 19 20 12 12 16 18 -partition: 0018 total: 162 per_label: 14 19 22 12 17 18 13 14 20 13 -partition: 0019 total: 166 per_label: 17 13 23 18 18 11 21 16 16 13 -partition: 0020 total: 170 per_label: 14 17 14 12 17 15 18 19 26 18 -partition: 0021 total: 174 per_label: 23 17 28 19 16 17 15 13 11 15 -partition: 0022 total: 179 per_label: 28 11 23 20 8 19 21 24 11 14 -partition: 0023 total: 183 per_label: 22 10 22 11 18 24 24 19 12 21 -partition: 0024 total: 188 per_label: 18 17 24 20 18 19 16 20 19 17 -partition: 0025 total: 193 per_label: 21 20 18 17 20 23 24 9 18 23 -partition: 0026 total: 197 per_label: 16 17 24 25 15 18 22 22 15 23 -partition: 0027 total: 202 per_label: 23 15 22 18 17 20 17 31 15 24 -partition: 0028 total: 207 per_label: 30 18 17 26 14 21 11 27 16 27 -partition: 0029 total: 213 per_label: 21 25 18 25 17 18 27 16 28 18 -partition: 0030 total: 218 per_label: 13 27 22 20 20 28 19 27 22 20 -partition: 0031 total: 223 per_label: 20 20 22 20 28 14 17 22 32 28 -partition: 0032 total: 229 per_label: 22 21 18 20 21 20 20 32 28 27 -partition: 0033 total: 235 per_label: 22 21 29 26 24 19 18 26 25 25 -partition: 0034 total: 241 per_label: 18 26 23 21 20 28 22 28 30 25 -partition: 0035 total: 247 per_label: 30 13 26 26 23 21 29 30 20 29 -partition: 0036 total: 253 per_label: 27 35 15 21 21 22 35 25 35 17 -partition: 0037 total: 259 per_label: 23 20 25 22 37 29 31 23 24 25 -partition: 0038 total: 266 per_label: 26 24 31 22 27 35 27 17 31 26 -partition: 0039 total: 272 per_label: 39 22 21 30 31 29 23 27 22 28 -partition: 0040 total: 279 per_label: 38 30 21 21 28 28 29 20 30 34 -partition: 0041 total: 286 per_label: 29 20 28 28 25 31 32 24 34 35 -partition: 0042 total: 293 per_label: 31 26 36 37 28 25 36 21 28 25 -partition: 0043 total: 301 per_label: 36 21 33 29 27 41 32 29 25 28 -partition: 0044 total: 308 per_label: 33 35 37 36 36 22 30 23 27 29 -partition: 0045 total: 316 per_label: 32 30 35 28 44 30 29 23 28 37 -partition: 0046 total: 324 per_label: 26 36 26 34 37 33 30 30 31 41 -partition: 0047 total: 332 per_label: 28 29 37 30 42 23 38 38 35 32 -partition: 0048 total: 340 per_label: 39 35 26 33 34 38 40 32 33 30 -partition: 0049 total: 349 per_label: 36 47 23 39 35 23 38 29 30 49 -partition: 0050 total: 357 per_label: 40 38 45 28 44 43 38 19 33 29 -partition: 0051 total: 366 per_label: 37 32 40 27 36 35 42 34 44 39 -partition: 0052 total: 376 per_label: 47 34 36 31 38 45 35 34 32 44 -partition: 0053 total: 385 per_label: 40 46 41 36 41 35 39 40 31 36 -partition: 0054 total: 395 per_label: 40 40 45 31 45 40 47 38 36 33 -partition: 0055 total: 405 per_label: 34 41 41 50 36 39 38 40 39 47 -partition: 0056 total: 415 per_label: 42 45 49 30 34 35 45 53 39 43 -partition: 0057 total: 425 per_label: 39 44 45 39 45 37 51 40 47 38 -partition: 0058 total: 436 per_label: 52 48 47 38 44 51 44 38 34 40 -partition: 0059 total: 447 per_label: 42 41 46 46 44 49 40 41 47 51 -partition: 0060 total: 458 per_label: 56 45 45 46 52 41 42 39 54 38 -partition: 0061 total: 469 per_label: 45 36 36 61 50 43 64 44 44 46 -partition: 0062 total: 481 per_label: 54 48 51 51 42 55 50 38 46 46 -partition: 0063 total: 493 per_label: 54 56 48 46 47 50 35 50 48 59 -partition: 0064 total: 505 per_label: 42 69 40 59 37 43 45 50 56 64 -partition: 0065 total: 518 per_label: 51 53 43 53 52 67 57 51 44 47 -partition: 0066 total: 531 per_label: 49 70 40 53 70 57 45 57 48 42 -partition: 0067 total: 544 per_label: 56 59 39 65 49 51 67 60 54 44 -partition: 0068 total: 558 per_label: 42 57 58 53 58 66 54 60 57 53 -partition: 0069 total: 572 per_label: 65 61 50 51 51 57 57 58 65 57 -partition: 0070 total: 586 per_label: 46 71 47 56 60 60 54 54 75 63 -partition: 0071 total: 601 per_label: 61 59 79 60 69 54 54 44 62 59 -partition: 0072 total: 616 per_label: 65 64 59 59 60 60 65 63 53 68 -partition: 0073 total: 631 per_label: 65 60 60 68 51 62 79 66 67 53 -partition: 0074 total: 647 per_label: 48 65 51 73 74 71 74 72 43 76 -partition: 0075 total: 663 per_label: 76 61 60 66 65 65 74 74 66 56 -partition: 0076 total: 680 per_label: 65 75 60 65 66 72 66 60 70 81 -partition: 0077 total: 697 per_label: 66 86 71 64 67 67 59 69 75 73 -partition: 0078 total: 714 per_label: 74 62 84 78 81 77 56 80 68 54 -partition: 0079 total: 732 per_label: 66 69 79 61 64 82 84 70 83 74 -partition: 0080 total: 750 per_label: 61 62 79 82 87 66 79 90 73 71 -partition: 0081 total: 769 per_label: 88 78 74 68 72 93 67 77 66 86 -partition: 0082 total: 788 per_label: 85 81 83 79 72 78 75 88 71 76 -partition: 0083 total: 808 per_label: 82 64 97 71 87 77 72 97 78 83 -partition: 0084 total: 828 per_label: 84 85 93 70 91 89 63 84 96 73 -partition: 0085 total: 849 per_label: 95 81 76 73 97 88 86 91 72 90 -partition: 0086 total: 870 per_label: 82 104 82 87 86 96 85 71 99 78 -partition: 0087 total: 892 per_label: 103 85 89 69 92 96 88 86 100 84 -partition: 0088 total: 914 per_label: 93 82 86 99 100 73 101 96 94 90 -partition: 0089 total: 937 per_label: 94 92 105 96 83 84 99 96 101 87 -partition: 0090 total: 961 per_label: 84 111 98 96 93 97 102 81 90 109 -partition: 0091 total: 985 per_label: 91 94 96 109 98 102 102 98 95 100 -partition: 0092 total: 1009 per_label: 94 102 106 109 101 88 102 112 97 98 -partition: 0093 total: 1035 per_label: 106 91 99 106 99 108 96 119 108 103 -partition: 0094 total: 1061 per_label: 102 97 110 106 130 107 93 116 100 100 -partition: 0095 total: 1087 per_label: 103 105 98 116 96 117 108 109 133 102 -partition: 0096 total: 1114 per_label: 109 120 119 125 100 96 96 131 102 116 -partition: 0097 total: 1142 per_label: 101 111 112 118 97 117 130 113 131 112 -partition: 0098 total: 1171 per_label: 121 104 123 133 101 116 127 116 103 127 -partition: 0099 total: 1200 per_label: 117 130 116 130 129 117 117 111 125 108 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_030.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_030.txt deleted file mode 100644 index 39054dd51..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_030.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_030 -number_of_examples_per_label_per_shard -partition: 0000 total: 74 per_label: 11 7 8 7 12 6 5 8 4 6 -partition: 0001 total: 76 per_label: 6 9 7 12 6 11 7 6 5 7 -partition: 0002 total: 78 per_label: 6 4 7 10 7 12 9 6 9 8 -partition: 0003 total: 81 per_label: 10 9 5 4 7 7 8 8 12 11 -partition: 0004 total: 83 per_label: 7 6 6 12 9 10 9 9 6 9 -partition: 0005 total: 86 per_label: 12 10 5 10 9 13 9 7 3 8 -partition: 0006 total: 88 per_label: 9 8 5 8 12 10 7 6 10 13 -partition: 0007 total: 91 per_label: 7 8 10 13 14 9 9 10 6 5 -partition: 0008 total: 93 per_label: 12 10 13 7 9 6 12 7 8 9 -partition: 0009 total: 96 per_label: 5 8 8 11 12 6 3 16 10 17 -partition: 0010 total: 99 per_label: 10 13 12 10 12 7 8 6 15 6 -partition: 0011 total: 102 per_label: 13 16 11 14 7 9 7 8 7 10 -partition: 0012 total: 105 per_label: 14 7 9 4 11 15 10 8 11 16 -partition: 0013 total: 108 per_label: 11 9 13 12 9 13 6 14 11 10 -partition: 0014 total: 112 per_label: 18 13 8 12 10 8 16 8 7 12 -partition: 0015 total: 115 per_label: 9 15 14 10 6 9 15 17 11 9 -partition: 0016 total: 119 per_label: 9 10 14 12 10 9 13 16 12 14 -partition: 0017 total: 122 per_label: 13 20 13 10 11 11 9 10 12 13 -partition: 0018 total: 126 per_label: 14 13 15 14 19 7 10 9 12 13 -partition: 0019 total: 130 per_label: 5 17 19 15 7 12 9 15 19 12 -partition: 0020 total: 133 per_label: 13 12 10 20 9 13 12 16 17 11 -partition: 0021 total: 138 per_label: 10 16 17 17 17 11 12 10 15 13 -partition: 0022 total: 142 per_label: 13 16 17 8 18 21 12 8 16 13 -partition: 0023 total: 146 per_label: 15 13 18 14 17 10 14 16 16 13 -partition: 0024 total: 150 per_label: 16 19 19 15 11 9 13 14 24 10 -partition: 0025 total: 155 per_label: 10 15 14 11 17 17 19 19 14 19 -partition: 0026 total: 159 per_label: 21 13 28 20 17 15 13 11 10 11 -partition: 0027 total: 164 per_label: 27 10 20 17 5 18 19 24 11 13 -partition: 0028 total: 169 per_label: 21 9 21 11 15 23 21 18 12 18 -partition: 0029 total: 174 per_label: 16 13 23 17 16 17 18 17 18 19 -partition: 0030 total: 180 per_label: 23 20 15 14 25 20 20 8 14 21 -partition: 0031 total: 185 per_label: 14 15 23 23 11 17 22 25 16 19 -partition: 0032 total: 191 per_label: 22 20 19 18 15 23 16 22 12 24 -partition: 0033 total: 196 per_label: 22 17 18 25 13 15 16 25 18 27 -partition: 0034 total: 202 per_label: 23 15 20 27 17 18 15 27 20 20 -partition: 0035 total: 208 per_label: 15 25 17 15 18 27 26 17 27 21 -partition: 0036 total: 215 per_label: 17 27 27 19 21 19 18 24 27 16 -partition: 0037 total: 221 per_label: 24 15 15 20 25 20 16 31 24 31 -partition: 0038 total: 228 per_label: 29 25 21 24 23 13 24 21 30 18 -partition: 0039 total: 234 per_label: 10 19 29 26 22 24 14 34 25 31 -partition: 0040 total: 241 per_label: 22 24 24 18 19 27 23 28 26 30 -partition: 0041 total: 249 per_label: 32 20 22 29 25 19 34 20 27 21 -partition: 0042 total: 256 per_label: 22 29 19 16 24 29 31 34 31 21 -partition: 0043 total: 264 per_label: 26 23 29 27 35 31 34 12 26 21 -partition: 0044 total: 272 per_label: 34 26 23 26 31 32 21 24 26 29 -partition: 0045 total: 280 per_label: 42 23 22 24 28 27 28 24 30 32 -partition: 0046 total: 288 per_label: 35 24 21 29 30 32 31 19 29 38 -partition: 0047 total: 297 per_label: 27 29 33 31 27 24 40 23 32 31 -partition: 0048 total: 306 per_label: 33 21 37 34 27 39 32 32 26 25 -partition: 0049 total: 315 per_label: 37 28 45 28 32 30 31 27 27 30 -partition: 0050 total: 325 per_label: 37 35 32 44 44 24 30 17 29 33 -partition: 0051 total: 334 per_label: 25 38 31 27 41 39 28 30 35 40 -partition: 0052 total: 345 per_label: 30 32 33 34 37 27 38 43 33 38 -partition: 0053 total: 355 per_label: 37 35 29 34 46 38 42 30 36 28 -partition: 0054 total: 366 per_label: 39 46 25 41 34 21 44 30 34 52 -partition: 0055 total: 377 per_label: 44 39 48 29 46 46 38 24 28 35 -partition: 0056 total: 388 per_label: 38 35 41 30 37 36 43 37 49 42 -partition: 0057 total: 399 per_label: 48 38 38 31 43 50 38 34 35 44 -partition: 0058 total: 411 per_label: 44 50 44 38 41 40 40 42 35 37 -partition: 0059 total: 424 per_label: 37 41 51 37 44 41 50 40 37 46 -partition: 0060 total: 437 per_label: 39 42 48 51 44 37 44 51 42 39 -partition: 0061 total: 450 per_label: 46 51 47 32 34 43 53 53 44 47 -partition: 0062 total: 463 per_label: 43 52 45 41 57 38 56 43 47 41 -partition: 0063 total: 477 per_label: 60 44 54 50 44 52 35 39 48 51 -partition: 0064 total: 491 per_label: 51 54 49 49 48 56 49 39 46 50 -partition: 0065 total: 506 per_label: 55 34 43 51 57 46 64 49 54 53 -partition: 0066 total: 521 per_label: 55 48 49 64 51 55 57 45 52 45 -partition: 0067 total: 537 per_label: 57 60 56 54 51 57 39 49 57 57 -partition: 0068 total: 553 per_label: 48 79 46 63 42 46 46 53 57 73 -partition: 0069 total: 570 per_label: 56 57 46 56 57 73 65 62 48 50 -partition: 0070 total: 587 per_label: 59 77 41 63 72 62 49 61 54 49 -partition: 0071 total: 604 per_label: 62 66 54 71 58 52 70 68 58 45 -partition: 0072 total: 623 per_label: 48 63 60 53 62 76 62 68 63 68 -partition: 0073 total: 641 per_label: 64 80 46 63 57 61 61 61 87 61 -partition: 0074 total: 661 per_label: 60 68 75 57 78 64 68 53 73 65 -partition: 0075 total: 680 per_label: 76 74 71 72 57 73 61 60 65 71 -partition: 0076 total: 701 per_label: 70 61 75 72 73 65 90 71 58 66 -partition: 0077 total: 722 per_label: 52 74 58 83 73 80 78 84 59 81 -partition: 0078 total: 744 per_label: 84 68 64 71 76 71 88 81 75 66 -partition: 0079 total: 766 per_label: 70 81 75 69 75 81 74 67 81 93 -partition: 0080 total: 789 per_label: 85 92 71 79 80 78 62 82 85 75 -partition: 0081 total: 813 per_label: 77 69 90 86 88 94 76 87 74 72 -partition: 0082 total: 837 per_label: 68 77 100 79 84 83 95 86 88 77 -partition: 0083 total: 862 per_label: 89 83 76 86 88 89 77 95 84 95 -partition: 0084 total: 888 per_label: 106 91 105 83 73 90 79 94 80 87 -partition: 0085 total: 915 per_label: 89 78 101 79 101 92 88 112 80 95 -partition: 0086 total: 942 per_label: 97 90 104 81 101 95 79 95 110 90 -partition: 0087 total: 970 per_label: 101 104 88 85 107 103 96 107 89 90 -partition: 0088 total: 999 per_label: 101 108 101 97 107 107 90 87 108 93 -partition: 0089 total: 1029 per_label: 109 93 100 92 108 106 105 90 121 105 -partition: 0090 total: 1060 per_label: 119 100 108 109 105 81 115 121 103 99 -partition: 0091 total: 1092 per_label: 90 121 112 110 99 117 121 92 115 115 -partition: 0092 total: 1125 per_label: 106 113 117 123 115 117 114 103 103 114 -partition: 0093 total: 1159 per_label: 106 118 118 125 111 98 125 130 115 113 -partition: 0094 total: 1194 per_label: 124 103 114 121 114 127 104 136 121 130 -partition: 0095 total: 1229 per_label: 124 116 119 131 139 128 110 139 120 103 -partition: 0096 total: 1266 per_label: 110 128 132 135 117 121 115 137 142 129 -partition: 0097 total: 1304 per_label: 129 140 121 144 114 128 132 131 138 127 -partition: 0098 total: 1343 per_label: 131 116 148 150 116 127 150 140 129 136 -partition: 0099 total: 1384 per_label: 133 145 133 145 145 139 141 128 140 135 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_035.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_035.txt deleted file mode 100644 index b8a5dc001..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_035.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_035 -number_of_examples_per_label_per_shard -partition: 0000 total: 52 per_label: 7 6 4 4 11 4 2 6 4 4 -partition: 0001 total: 54 per_label: 7 7 8 7 1 8 5 4 1 6 -partition: 0002 total: 55 per_label: 3 3 5 10 7 6 8 4 6 3 -partition: 0003 total: 57 per_label: 5 4 5 8 4 11 5 3 7 5 -partition: 0004 total: 59 per_label: 10 5 3 2 6 2 4 11 6 10 -partition: 0005 total: 62 per_label: 3 5 4 7 8 8 6 3 11 7 -partition: 0006 total: 64 per_label: 5 5 5 9 6 8 9 8 1 8 -partition: 0007 total: 66 per_label: 10 9 4 7 7 10 6 5 3 5 -partition: 0008 total: 68 per_label: 11 5 2 6 8 10 7 6 6 7 -partition: 0009 total: 71 per_label: 4 7 6 10 7 10 6 8 5 8 -partition: 0010 total: 73 per_label: 6 5 10 8 13 1 9 6 8 7 -partition: 0011 total: 76 per_label: 10 10 12 6 7 6 8 4 5 8 -partition: 0012 total: 78 per_label: 4 7 5 10 10 6 1 13 8 14 -partition: 0013 total: 81 per_label: 8 8 10 7 8 7 10 3 14 6 -partition: 0014 total: 84 per_label: 10 18 7 7 9 5 3 11 9 5 -partition: 0015 total: 87 per_label: 10 7 11 13 6 11 7 5 5 12 -partition: 0016 total: 90 per_label: 10 8 8 5 11 11 8 9 10 10 -partition: 0017 total: 93 per_label: 12 5 11 10 8 11 6 11 9 10 -partition: 0018 total: 97 per_label: 14 12 7 9 9 7 15 7 5 12 -partition: 0019 total: 100 per_label: 10 13 12 9 6 7 13 12 10 8 -partition: 0020 total: 103 per_label: 8 6 14 11 5 9 13 15 12 10 -partition: 0021 total: 107 per_label: 11 19 9 8 13 8 6 10 8 15 -partition: 0022 total: 111 per_label: 13 12 13 12 11 7 12 10 12 9 -partition: 0023 total: 115 per_label: 6 16 16 11 13 11 9 11 11 11 -partition: 0024 total: 119 per_label: 8 14 12 16 7 9 8 13 22 10 -partition: 0025 total: 123 per_label: 10 12 14 23 12 10 7 14 11 10 -partition: 0026 total: 127 per_label: 11 15 14 9 13 14 13 9 16 13 -partition: 0027 total: 132 per_label: 11 16 16 10 18 18 11 7 13 12 -partition: 0028 total: 136 per_label: 15 10 16 12 15 10 14 15 16 13 -partition: 0029 total: 141 per_label: 15 16 20 15 11 8 13 15 19 9 -partition: 0030 total: 146 per_label: 10 15 11 10 17 15 17 17 18 16 -partition: 0031 total: 151 per_label: 20 14 26 17 12 14 13 12 10 13 -partition: 0032 total: 157 per_label: 25 9 19 18 11 15 16 19 11 14 -partition: 0033 total: 162 per_label: 22 8 20 11 11 23 20 20 12 15 -partition: 0034 total: 168 per_label: 15 11 21 15 17 21 20 17 12 19 -partition: 0035 total: 174 per_label: 19 18 18 16 23 19 16 10 19 16 -partition: 0036 total: 180 per_label: 15 18 19 21 12 19 23 20 12 21 -partition: 0037 total: 186 per_label: 19 20 22 20 13 18 20 17 15 22 -partition: 0038 total: 193 per_label: 25 15 20 19 14 15 16 29 15 25 -partition: 0039 total: 199 per_label: 24 16 15 28 15 21 9 24 19 28 -partition: 0040 total: 206 per_label: 18 23 18 18 17 22 27 18 28 17 -partition: 0041 total: 213 per_label: 17 24 30 21 20 23 19 25 21 13 -partition: 0042 total: 221 per_label: 21 21 15 18 26 15 19 25 28 33 -partition: 0043 total: 229 per_label: 24 22 20 23 23 20 19 28 27 23 -partition: 0044 total: 237 per_label: 16 20 30 25 24 18 17 34 27 26 -partition: 0045 total: 245 per_label: 21 28 20 20 20 28 22 25 31 30 -partition: 0046 total: 254 per_label: 30 19 26 29 25 23 31 26 21 24 -partition: 0047 total: 263 per_label: 28 30 18 18 21 25 38 32 33 20 -partition: 0048 total: 272 per_label: 24 22 32 26 38 31 31 18 28 22 -partition: 0049 total: 281 per_label: 32 28 21 23 33 35 27 22 30 30 -partition: 0050 total: 291 per_label: 47 24 27 28 30 27 24 24 28 32 -partition: 0051 total: 301 per_label: 31 25 22 31 31 34 34 22 30 41 -partition: 0052 total: 312 per_label: 32 29 33 32 27 27 41 23 36 32 -partition: 0053 total: 323 per_label: 33 22 40 34 28 42 33 34 30 27 -partition: 0054 total: 334 per_label: 42 29 45 35 35 29 33 26 26 34 -partition: 0055 total: 346 per_label: 38 38 37 37 47 27 35 23 29 35 -partition: 0056 total: 358 per_label: 27 41 30 35 44 41 28 33 37 42 -partition: 0057 total: 371 per_label: 30 33 37 36 44 28 44 41 39 39 -partition: 0058 total: 384 per_label: 45 38 29 37 39 38 45 35 41 37 -partition: 0059 total: 397 per_label: 43 53 32 41 43 32 45 30 26 52 -partition: 0060 total: 411 per_label: 44 34 50 32 50 48 41 31 47 34 -partition: 0061 total: 425 per_label: 48 47 46 34 34 49 45 35 45 42 -partition: 0062 total: 440 per_label: 49 42 42 33 56 42 46 47 32 51 -partition: 0063 total: 456 per_label: 43 49 53 40 49 44 51 46 43 38 -partition: 0064 total: 472 per_label: 43 47 47 62 40 43 44 45 46 55 -partition: 0065 total: 488 per_label: 49 55 58 32 38 44 57 62 45 48 -partition: 0066 total: 505 per_label: 45 58 49 46 61 42 61 46 51 46 -partition: 0067 total: 523 per_label: 61 51 58 51 50 56 41 44 56 55 -partition: 0068 total: 541 per_label: 65 50 58 55 54 64 49 45 53 48 -partition: 0069 total: 560 per_label: 53 44 43 69 63 48 75 53 56 56 -partition: 0070 total: 580 per_label: 64 58 61 60 52 66 57 43 62 57 -partition: 0071 total: 600 per_label: 56 77 55 59 52 58 47 62 58 76 -partition: 0072 total: 621 per_label: 59 74 49 72 58 61 62 69 53 64 -partition: 0073 total: 643 per_label: 64 75 52 63 70 77 62 65 61 54 -partition: 0074 total: 665 per_label: 69 75 47 77 72 63 75 70 63 54 -partition: 0075 total: 689 per_label: 54 73 71 65 65 79 66 76 72 68 -partition: 0076 total: 713 per_label: 72 85 53 69 66 70 67 67 92 72 -partition: 0077 total: 738 per_label: 69 71 87 68 84 73 74 58 80 74 -partition: 0078 total: 764 per_label: 78 80 79 74 78 74 74 76 68 83 -partition: 0079 total: 790 per_label: 75 74 71 90 71 78 99 80 72 80 -partition: 0080 total: 818 per_label: 72 80 71 84 90 91 88 96 69 77 -partition: 0081 total: 847 per_label: 87 94 78 76 79 83 93 84 84 89 -partition: 0082 total: 876 per_label: 87 102 83 87 84 87 74 81 97 94 -partition: 0083 total: 907 per_label: 93 75 96 94 103 103 75 100 89 79 -partition: 0084 total: 939 per_label: 77 87 111 90 91 94 110 96 97 86 -partition: 0085 total: 972 per_label: 106 95 87 91 99 102 91 106 92 103 -partition: 0086 total: 1006 per_label: 105 99 110 92 96 103 94 119 88 100 -partition: 0087 total: 1041 per_label: 110 97 130 97 99 102 85 110 111 100 -partition: 0088 total: 1077 per_label: 116 93 107 93 128 103 98 119 110 110 -partition: 0089 total: 1115 per_label: 104 130 101 109 114 134 109 94 115 105 -partition: 0090 total: 1154 per_label: 126 113 115 93 126 125 111 110 127 108 -partition: 0091 total: 1195 per_label: 135 109 120 127 120 83 133 131 120 117 -partition: 0092 total: 1237 per_label: 104 135 127 124 111 134 134 110 130 128 -partition: 0093 total: 1280 per_label: 117 129 135 140 128 121 129 129 119 133 -partition: 0094 total: 1325 per_label: 127 122 131 147 132 122 135 144 136 129 -partition: 0095 total: 1371 per_label: 134 130 138 133 155 146 121 151 129 134 -partition: 0096 total: 1419 per_label: 136 134 135 155 132 149 139 147 160 132 -partition: 0097 total: 1469 per_label: 145 166 137 161 132 135 141 165 138 149 -partition: 0098 total: 1520 per_label: 141 127 175 159 132 148 163 159 164 152 -partition: 0099 total: 1573 per_label: 158 166 148 174 156 158 158 142 158 155 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_040.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_040.txt deleted file mode 100644 index 604570640..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_040.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_040 -number_of_examples_per_label_per_shard -partition: 0000 total: 36 per_label: 5 4 3 2 9 3 1 3 3 3 -partition: 0001 total: 37 per_label: 6 3 5 5 3 3 4 5 1 2 -partition: 0002 total: 39 per_label: 4 6 4 4 1 7 2 3 2 6 -partition: 0003 total: 40 per_label: 2 3 4 8 5 4 6 3 3 2 -partition: 0004 total: 42 per_label: 3 2 4 7 2 9 4 2 6 3 -partition: 0005 total: 44 per_label: 5 5 3 3 5 4 4 6 4 5 -partition: 0006 total: 46 per_label: 7 3 4 2 4 2 3 6 6 9 -partition: 0007 total: 47 per_label: 2 4 2 4 7 6 6 2 10 4 -partition: 0008 total: 49 per_label: 5 4 3 9 5 5 6 4 1 7 -partition: 0009 total: 51 per_label: 6 6 3 6 3 10 5 6 1 5 -partition: 0010 total: 53 per_label: 9 5 3 6 7 6 7 5 2 3 -partition: 0011 total: 56 per_label: 7 4 2 4 7 9 4 5 7 7 -partition: 0012 total: 58 per_label: 3 5 6 8 5 8 5 7 4 7 -partition: 0013 total: 60 per_label: 4 7 8 8 13 2 6 3 5 4 -partition: 0014 total: 63 per_label: 9 6 9 5 5 5 7 5 4 8 -partition: 0015 total: 65 per_label: 5 9 6 7 7 3 5 7 7 9 -partition: 0016 total: 68 per_label: 3 3 6 7 10 6 4 11 8 10 -partition: 0017 total: 70 per_label: 10 8 8 6 6 5 7 3 12 5 -partition: 0018 total: 73 per_label: 8 16 7 7 8 3 3 9 8 4 -partition: 0019 total: 76 per_label: 9 8 11 11 6 10 6 4 2 9 -partition: 0020 total: 79 per_label: 10 4 5 3 9 11 8 6 10 13 -partition: 0021 total: 82 per_label: 9 9 8 10 6 9 4 11 9 7 -partition: 0022 total: 86 per_label: 9 9 10 8 10 8 13 9 5 5 -partition: 0023 total: 89 per_label: 13 10 10 8 6 9 9 6 6 12 -partition: 0024 total: 93 per_label: 7 9 8 11 3 4 13 16 10 12 -partition: 0025 total: 97 per_label: 9 8 13 8 10 8 11 10 11 9 -partition: 0026 total: 100 per_label: 10 18 8 7 9 11 6 10 9 12 -partition: 0027 total: 104 per_label: 12 11 12 12 12 4 11 10 10 10 -partition: 0028 total: 109 per_label: 7 16 16 12 12 11 8 8 11 8 -partition: 0029 total: 113 per_label: 7 11 12 14 7 8 8 13 21 12 -partition: 0030 total: 118 per_label: 10 11 14 23 11 10 7 13 11 8 -partition: 0031 total: 122 per_label: 10 14 14 9 13 12 13 10 15 12 -partition: 0032 total: 127 per_label: 10 15 15 8 16 18 11 7 14 13 -partition: 0033 total: 132 per_label: 15 12 15 12 16 10 11 13 15 13 -partition: 0034 total: 138 per_label: 14 15 21 14 11 10 14 17 14 8 -partition: 0035 total: 143 per_label: 12 15 10 9 16 15 16 16 21 13 -partition: 0036 total: 149 per_label: 19 15 23 18 13 14 10 11 11 15 -partition: 0037 total: 155 per_label: 20 9 22 18 11 14 19 16 12 14 -partition: 0038 total: 161 per_label: 28 8 18 13 8 19 16 25 10 16 -partition: 0039 total: 168 per_label: 15 10 19 13 21 22 25 14 12 17 -partition: 0040 total: 174 per_label: 15 18 21 17 20 18 14 12 22 17 -partition: 0041 total: 181 per_label: 18 18 19 18 12 21 25 19 11 20 -partition: 0042 total: 189 per_label: 19 17 24 23 13 20 20 15 14 24 -partition: 0043 total: 196 per_label: 24 19 20 18 15 15 16 31 15 23 -partition: 0044 total: 204 per_label: 25 13 15 28 16 22 11 26 19 29 -partition: 0045 total: 212 per_label: 20 25 19 21 17 18 27 18 29 18 -partition: 0046 total: 221 per_label: 17 26 30 21 21 27 19 25 21 14 -partition: 0047 total: 229 per_label: 22 21 16 18 26 15 21 26 29 35 -partition: 0048 total: 239 per_label: 25 23 21 23 26 21 22 29 27 22 -partition: 0049 total: 248 per_label: 15 21 31 28 22 19 16 35 32 29 -partition: 0050 total: 258 per_label: 25 29 21 20 23 29 22 28 28 33 -partition: 0051 total: 269 per_label: 32 20 28 31 24 24 36 25 27 22 -partition: 0052 total: 279 per_label: 25 30 21 18 28 29 32 36 37 23 -partition: 0053 total: 290 per_label: 29 23 31 30 39 36 37 12 28 25 -partition: 0054 total: 302 per_label: 36 32 27 28 31 31 26 29 31 31 -partition: 0055 total: 314 per_label: 47 28 23 25 34 37 30 23 27 40 -partition: 0056 total: 327 per_label: 33 26 30 32 29 33 38 29 40 37 -partition: 0057 total: 340 per_label: 41 27 42 43 30 33 39 25 29 31 -partition: 0058 total: 354 per_label: 40 29 41 31 38 40 37 32 32 34 -partition: 0059 total: 368 per_label: 38 39 45 48 46 27 38 21 30 36 -partition: 0060 total: 382 per_label: 31 44 34 34 46 42 30 36 41 44 -partition: 0061 total: 398 per_label: 34 34 39 37 49 30 49 45 38 43 -partition: 0062 total: 414 per_label: 46 41 32 40 41 42 48 39 46 39 -partition: 0063 total: 430 per_label: 46 57 33 44 48 36 47 33 31 55 -partition: 0064 total: 447 per_label: 48 41 53 37 51 49 49 32 47 40 -partition: 0065 total: 465 per_label: 54 46 52 30 43 56 42 40 47 55 -partition: 0066 total: 484 per_label: 51 55 47 47 53 45 49 52 42 43 -partition: 0067 total: 503 per_label: 50 48 60 49 50 49 55 44 42 56 -partition: 0068 total: 524 per_label: 43 54 57 49 49 47 57 65 50 53 -partition: 0069 total: 545 per_label: 56 56 60 49 54 45 62 56 61 46 -partition: 0070 total: 566 per_label: 66 67 56 52 56 62 55 49 49 54 -partition: 0071 total: 589 per_label: 61 58 60 60 61 62 56 48 59 64 -partition: 0072 total: 613 per_label: 65 46 52 67 71 53 75 58 66 60 -partition: 0073 total: 637 per_label: 69 61 66 72 56 72 65 50 67 59 -partition: 0074 total: 663 per_label: 59 82 61 66 59 65 50 69 67 85 -partition: 0075 total: 689 per_label: 65 81 54 80 58 73 78 74 58 68 -partition: 0076 total: 717 per_label: 76 88 55 70 89 82 60 71 68 58 -partition: 0077 total: 745 per_label: 68 80 61 81 77 75 87 84 70 62 -partition: 0078 total: 775 per_label: 77 81 75 70 71 81 72 78 92 78 -partition: 0079 total: 806 per_label: 69 98 69 72 91 79 75 74 98 81 -partition: 0080 total: 839 per_label: 92 89 93 89 69 85 81 72 82 87 -partition: 0081 total: 872 per_label: 81 79 89 90 87 81 109 92 80 84 -partition: 0082 total: 907 per_label: 77 85 73 98 102 102 101 101 70 98 -partition: 0083 total: 943 per_label: 98 102 87 88 89 93 100 95 96 95 -partition: 0084 total: 981 per_label: 102 107 92 96 98 98 82 96 108 102 -partition: 0085 total: 1020 per_label: 95 95 116 100 102 112 98 105 104 93 -partition: 0086 total: 1061 per_label: 89 92 117 110 114 99 110 123 109 98 -partition: 0087 total: 1104 per_label: 125 108 121 104 106 122 97 110 92 119 -partition: 0088 total: 1148 per_label: 121 106 122 100 114 117 110 136 105 117 -partition: 0089 total: 1194 per_label: 131 111 130 103 132 121 97 122 134 113 -partition: 0090 total: 1242 per_label: 119 142 113 118 128 138 123 123 121 117 -partition: 0091 total: 1291 per_label: 139 125 128 108 141 140 124 115 148 123 -partition: 0092 total: 1343 per_label: 142 121 137 147 132 102 148 145 139 130 -partition: 0093 total: 1397 per_label: 120 155 145 146 133 148 147 113 140 150 -partition: 0094 total: 1452 per_label: 133 145 140 154 149 137 151 166 134 143 -partition: 0095 total: 1511 per_label: 157 136 154 158 138 152 144 165 155 152 -partition: 0096 total: 1571 per_label: 151 155 152 160 167 165 146 167 162 146 -partition: 0097 total: 1634 per_label: 154 167 165 178 158 144 150 186 171 161 -partition: 0098 total: 1699 per_label: 163 155 175 178 148 168 194 173 173 172 -partition: 0099 total: 1767 per_label: 173 183 176 199 172 179 173 162 177 173 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_045.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_045.txt deleted file mode 100644 index d50f5e5a4..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-b1_045.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-b1_045 -number_of_examples_per_label_per_shard -partition: 0000 total: 25 per_label: 4 3 3 1 9 1 0 1 1 2 -partition: 0001 total: 26 per_label: 3 3 1 2 2 3 2 5 3 2 -partition: 0002 total: 27 per_label: 5 2 5 4 1 3 3 2 0 2 -partition: 0003 total: 28 per_label: 2 5 3 4 0 5 2 2 1 4 -partition: 0004 total: 29 per_label: 2 3 3 3 5 5 2 3 2 1 -partition: 0005 total: 31 per_label: 1 0 2 8 2 2 6 2 4 4 -partition: 0006 total: 32 per_label: 3 3 4 5 2 7 2 1 4 1 -partition: 0007 total: 34 per_label: 4 2 2 2 4 4 4 4 3 5 -partition: 0008 total: 35 per_label: 6 3 1 2 3 1 2 7 6 4 -partition: 0009 total: 37 per_label: 3 4 3 2 3 5 6 1 4 6 -partition: 0010 total: 39 per_label: 2 2 2 6 6 4 2 3 7 5 -partition: 0011 total: 40 per_label: 4 4 4 6 4 3 5 4 1 5 -partition: 0012 total: 42 per_label: 4 5 2 5 3 10 4 5 1 3 -partition: 0013 total: 44 per_label: 7 5 3 4 6 4 5 4 2 4 -partition: 0014 total: 46 per_label: 7 5 2 4 3 7 6 4 2 6 -partition: 0015 total: 48 per_label: 4 4 3 4 9 5 3 2 7 7 -partition: 0016 total: 50 per_label: 4 3 4 8 5 8 4 8 3 3 -partition: 0017 total: 53 per_label: 4 5 7 6 11 1 6 4 5 4 -partition: 0018 total: 55 per_label: 8 6 9 5 3 5 6 3 3 7 -partition: 0019 total: 58 per_label: 5 6 5 7 7 3 5 5 7 8 -partition: 0020 total: 60 per_label: 3 6 5 6 8 4 1 13 5 9 -partition: 0021 total: 63 per_label: 6 6 10 5 6 7 7 0 11 5 -partition: 0022 total: 66 per_label: 7 12 6 6 8 0 5 9 8 5 -partition: 0023 total: 69 per_label: 8 11 7 11 5 8 4 5 4 6 -partition: 0024 total: 72 per_label: 13 5 5 5 4 12 8 4 7 9 -partition: 0025 total: 75 per_label: 6 7 10 5 10 7 4 10 8 8 -partition: 0026 total: 79 per_label: 9 4 9 8 7 11 5 8 8 10 -partition: 0027 total: 82 per_label: 10 11 6 8 9 4 15 7 5 7 -partition: 0028 total: 86 per_label: 12 10 9 8 5 9 9 6 8 10 -partition: 0029 total: 90 per_label: 5 7 10 10 7 4 10 18 9 10 -partition: 0030 total: 94 per_label: 10 12 11 8 5 8 10 10 9 11 -partition: 0031 total: 98 per_label: 9 15 10 6 9 11 8 10 10 10 -partition: 0032 total: 102 per_label: 13 11 11 13 16 3 10 7 9 9 -partition: 0033 total: 107 per_label: 5 15 15 14 8 11 9 9 12 9 -partition: 0034 total: 112 per_label: 8 13 12 12 7 9 6 13 19 13 -partition: 0035 total: 117 per_label: 9 11 14 23 12 9 8 14 11 6 -partition: 0036 total: 122 per_label: 11 14 14 8 12 14 12 8 16 13 -partition: 0037 total: 128 per_label: 11 14 15 9 18 18 11 7 13 12 -partition: 0038 total: 133 per_label: 15 12 14 12 15 10 12 14 16 13 -partition: 0039 total: 140 per_label: 14 16 21 13 10 8 14 16 19 9 -partition: 0040 total: 146 per_label: 10 13 12 12 17 15 17 17 18 15 -partition: 0041 total: 152 per_label: 21 16 25 18 13 14 10 12 9 14 -partition: 0042 total: 159 per_label: 25 8 20 17 11 15 20 18 11 14 -partition: 0043 total: 166 per_label: 22 9 20 12 11 23 20 21 13 15 -partition: 0044 total: 174 per_label: 15 11 23 16 18 21 21 17 13 19 -partition: 0045 total: 182 per_label: 21 21 17 16 24 19 16 10 18 20 -partition: 0046 total: 190 per_label: 15 17 25 20 12 19 25 23 15 19 -partition: 0047 total: 199 per_label: 26 20 22 21 13 21 18 20 13 25 -partition: 0048 total: 208 per_label: 20 19 17 25 17 18 18 28 19 27 -partition: 0049 total: 217 per_label: 26 16 20 29 17 19 15 30 21 24 -partition: 0050 total: 227 per_label: 17 29 19 17 20 30 28 18 28 21 -partition: 0051 total: 237 per_label: 19 27 27 23 28 17 19 24 32 21 -partition: 0052 total: 248 per_label: 25 18 16 22 25 22 20 39 30 31 -partition: 0053 total: 259 per_label: 27 26 34 30 23 20 21 25 26 27 -partition: 0054 total: 270 per_label: 18 29 25 23 24 30 23 31 36 31 -partition: 0055 total: 283 per_label: 35 21 28 30 26 26 32 32 22 31 -partition: 0056 total: 295 per_label: 29 31 21 21 27 27 40 36 38 25 -partition: 0057 total: 309 per_label: 27 27 35 29 40 39 38 17 31 26 -partition: 0058 total: 323 per_label: 40 31 29 30 35 34 25 28 37 34 -partition: 0059 total: 337 per_label: 50 29 24 30 36 37 34 26 31 40 -partition: 0060 total: 352 per_label: 33 32 35 34 32 35 42 30 39 40 -partition: 0061 total: 368 per_label: 42 27 43 44 33 37 43 32 33 34 -partition: 0062 total: 385 per_label: 44 32 49 36 39 40 40 32 34 39 -partition: 0063 total: 402 per_label: 44 44 42 44 56 33 38 26 34 41 -partition: 0064 total: 420 per_label: 32 41 37 45 46 43 36 45 44 51 -partition: 0065 total: 439 per_label: 46 43 43 37 57 40 53 38 45 37 -partition: 0066 total: 459 per_label: 46 58 31 52 42 33 54 44 40 59 -partition: 0067 total: 480 per_label: 54 46 56 37 61 58 52 29 44 43 -partition: 0068 total: 501 per_label: 55 49 55 40 41 57 51 45 57 51 -partition: 0069 total: 524 per_label: 56 56 53 44 58 47 52 57 41 60 -partition: 0070 total: 547 per_label: 55 59 62 54 52 58 57 47 47 56 -partition: 0071 total: 572 per_label: 49 58 63 54 56 48 61 69 57 57 -partition: 0072 total: 598 per_label: 60 66 62 51 62 49 69 63 61 55 -partition: 0073 total: 625 per_label: 70 63 66 61 63 67 56 54 62 63 -partition: 0074 total: 653 per_label: 73 63 63 63 70 72 65 56 69 59 -partition: 0075 total: 682 per_label: 75 55 56 86 64 64 91 59 60 72 -partition: 0076 total: 713 per_label: 73 76 78 69 72 78 52 66 77 72 -partition: 0077 total: 745 per_label: 67 107 62 82 56 72 71 72 73 83 -partition: 0078 total: 779 per_label: 75 81 60 79 91 90 78 86 68 71 -partition: 0079 total: 814 per_label: 81 91 65 95 89 76 85 89 79 64 -partition: 0080 total: 850 per_label: 81 87 82 73 78 98 83 85 94 89 -partition: 0081 total: 889 per_label: 77 107 76 80 99 84 86 83 110 87 -partition: 0082 total: 929 per_label: 97 96 106 95 81 96 93 78 87 100 -partition: 0083 total: 971 per_label: 92 89 88 110 100 91 119 100 86 96 -partition: 0084 total: 1014 per_label: 97 96 84 103 102 109 115 121 87 100 -partition: 0085 total: 1060 per_label: 102 116 107 89 106 107 103 96 113 121 -partition: 0086 total: 1108 per_label: 112 114 116 123 116 118 86 120 110 93 -partition: 0087 total: 1158 per_label: 98 108 124 108 114 122 129 118 124 113 -partition: 0088 total: 1210 per_label: 131 114 126 115 121 127 105 133 111 127 -partition: 0089 total: 1264 per_label: 135 116 140 119 124 125 121 149 114 121 -partition: 0090 total: 1321 per_label: 143 121 144 112 146 134 110 133 145 133 -partition: 0091 total: 1381 per_label: 130 157 125 135 144 153 137 129 141 130 -partition: 0092 total: 1443 per_label: 157 136 144 128 150 145 144 136 160 143 -partition: 0093 total: 1508 per_label: 158 146 157 149 144 136 164 155 154 145 -partition: 0094 total: 1575 per_label: 136 169 162 173 166 151 163 137 151 167 -partition: 0095 total: 1646 per_label: 154 154 162 180 156 150 171 194 166 159 -partition: 0096 total: 1720 per_label: 170 163 171 163 191 182 158 194 165 163 -partition: 0097 total: 1798 per_label: 169 181 178 206 161 175 160 189 195 184 -partition: 0098 total: 1879 per_label: 185 178 192 191 170 183 205 197 195 183 -partition: 0099 total: 1963 per_label: 192 202 194 222 185 198 199 184 194 193 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-iid-balanced.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-iid-balanced.txt deleted file mode 100644 index f1f5beffc..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-iid-balanced.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-iid-balanced -number_of_examples_per_label_per_shard -partition: 0000 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0001 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0002 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0003 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0004 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0005 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0006 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0007 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0008 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0009 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0010 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0011 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0012 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0013 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0014 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0015 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0016 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0017 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0018 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0019 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0020 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0021 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0022 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0023 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0024 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0025 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0026 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0027 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0028 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0029 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0030 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0031 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0032 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0033 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0034 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0035 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0036 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0037 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0038 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0039 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0040 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0041 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0042 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0043 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0044 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0045 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0046 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0047 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0048 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0049 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0050 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0051 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0052 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0053 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0054 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0055 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0056 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0057 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0058 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0059 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0060 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0061 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0062 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0063 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0064 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0065 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0066 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0067 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0068 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0069 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0070 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0071 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0072 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0073 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0074 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0075 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0076 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0077 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0078 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0079 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0080 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0081 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0082 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0083 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0084 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0085 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0086 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0087 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0088 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0089 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0090 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0091 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0092 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0093 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0094 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0095 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0096 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0097 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0098 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: 0099 total: 450 per_label: 45 45 45 45 45 45 45 45 45 45 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-01cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-01cpp.txt deleted file mode 100644 index 71d577f92..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-01cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-01cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0001 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0002 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0003 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0004 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0005 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0006 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0007 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0008 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0009 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0010 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0011 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0012 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0013 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0014 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0015 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0016 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0017 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0018 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0019 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0020 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0021 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0022 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0023 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0024 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0025 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0026 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0027 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0028 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0029 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0030 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0031 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0032 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0033 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0034 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0035 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0036 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0037 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0038 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0039 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0040 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0041 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0042 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0043 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0044 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0045 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0046 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0047 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0048 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0049 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0050 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0051 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0052 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0053 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0054 total: 450 per_label: 0 0 450 0 0 0 0 0 0 0 -partition: 0055 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0056 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0057 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0058 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0059 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0060 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0061 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0062 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0063 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0064 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0065 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0066 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0067 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0068 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0069 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0070 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0071 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0072 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0073 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0074 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0075 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0076 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0077 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0078 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0079 total: 450 per_label: 0 0 0 0 0 0 0 0 0 450 -partition: 0080 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0081 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0082 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0083 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0084 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0085 total: 450 per_label: 450 0 0 0 0 0 0 0 0 0 -partition: 0086 total: 450 per_label: 0 450 0 0 0 0 0 0 0 0 -partition: 0087 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0088 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: 0089 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0090 total: 450 per_label: 0 0 0 0 0 450 0 0 0 0 -partition: 0091 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0092 total: 450 per_label: 0 0 0 0 450 0 0 0 0 0 -partition: 0093 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0094 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0095 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0096 total: 450 per_label: 0 0 0 0 0 0 450 0 0 0 -partition: 0097 total: 450 per_label: 0 0 0 0 0 0 0 450 0 0 -partition: 0098 total: 450 per_label: 0 0 0 450 0 0 0 0 0 0 -partition: 0099 total: 450 per_label: 0 0 0 0 0 0 0 0 450 0 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-02cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-02cpp.txt deleted file mode 100644 index 52edd723c..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-02cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-02cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 450 per_label: 0 0 0 0 225 0 0 0 0 225 -partition: 0001 total: 450 per_label: 0 225 0 0 0 0 225 0 0 0 -partition: 0002 total: 450 per_label: 0 0 225 0 0 0 225 0 0 0 -partition: 0003 total: 450 per_label: 225 0 0 0 0 0 225 0 0 0 -partition: 0004 total: 450 per_label: 0 0 0 225 0 225 0 0 0 0 -partition: 0005 total: 450 per_label: 0 225 0 0 225 0 0 0 0 0 -partition: 0006 total: 450 per_label: 0 0 0 0 225 0 0 0 0 225 -partition: 0007 total: 450 per_label: 0 0 225 0 0 225 0 0 0 0 -partition: 0008 total: 450 per_label: 0 225 0 0 0 0 0 0 0 225 -partition: 0009 total: 450 per_label: 0 0 225 0 0 0 0 0 225 0 -partition: 0010 total: 450 per_label: 0 0 225 0 0 225 0 0 0 0 -partition: 0011 total: 450 per_label: 0 0 0 0 0 0 0 225 0 225 -partition: 0012 total: 450 per_label: 0 0 0 0 225 0 225 0 0 0 -partition: 0013 total: 450 per_label: 0 0 0 225 0 0 0 225 0 0 -partition: 0014 total: 450 per_label: 0 0 225 0 225 0 0 0 0 0 -partition: 0015 total: 450 per_label: 225 0 0 225 0 0 0 0 0 0 -partition: 0016 total: 450 per_label: 0 0 225 0 0 0 0 0 225 0 -partition: 0017 total: 450 per_label: 225 225 0 0 0 0 0 0 0 0 -partition: 0018 total: 450 per_label: 0 225 0 0 0 0 0 0 0 225 -partition: 0019 total: 450 per_label: 0 0 0 0 225 0 0 0 225 0 -partition: 0020 total: 450 per_label: 225 0 0 0 0 0 0 0 225 0 -partition: 0021 total: 450 per_label: 0 225 0 225 0 0 0 0 0 0 -partition: 0022 total: 450 per_label: 0 0 0 0 0 225 225 0 0 0 -partition: 0023 total: 450 per_label: 0 0 225 0 0 0 0 225 0 0 -partition: 0024 total: 450 per_label: 0 225 0 0 0 0 0 0 225 0 -partition: 0025 total: 450 per_label: 0 0 225 0 0 225 0 0 0 0 -partition: 0026 total: 450 per_label: 0 225 0 0 225 0 0 0 0 0 -partition: 0027 total: 450 per_label: 0 225 0 0 0 0 0 225 0 0 -partition: 0028 total: 450 per_label: 0 0 225 0 0 225 0 0 0 0 -partition: 0029 total: 450 per_label: 0 0 0 0 0 225 0 225 0 0 -partition: 0030 total: 450 per_label: 0 225 0 0 0 0 0 0 225 0 -partition: 0031 total: 450 per_label: 225 0 225 0 0 0 0 0 0 0 -partition: 0032 total: 450 per_label: 0 0 225 0 0 225 0 0 0 0 -partition: 0033 total: 450 per_label: 0 0 225 0 0 0 0 0 225 0 -partition: 0034 total: 450 per_label: 0 0 0 225 0 0 225 0 0 0 -partition: 0035 total: 450 per_label: 0 0 225 0 0 0 0 225 0 0 -partition: 0036 total: 450 per_label: 225 0 0 0 0 0 0 225 0 0 -partition: 0037 total: 450 per_label: 0 0 225 225 0 0 0 0 0 0 -partition: 0038 total: 450 per_label: 0 0 0 0 225 0 0 225 0 0 -partition: 0039 total: 450 per_label: 225 0 0 0 225 0 0 0 0 0 -partition: 0040 total: 450 per_label: 0 0 0 225 0 0 0 0 0 225 -partition: 0041 total: 450 per_label: 0 0 225 0 0 0 0 0 0 225 -partition: 0042 total: 450 per_label: 0 225 225 0 0 0 0 0 0 0 -partition: 0043 total: 450 per_label: 0 0 0 0 0 225 0 0 0 225 -partition: 0044 total: 450 per_label: 0 0 0 0 0 225 0 0 0 225 -partition: 0045 total: 450 per_label: 0 0 0 0 0 0 225 0 0 225 -partition: 0046 total: 450 per_label: 225 0 0 225 0 0 0 0 0 0 -partition: 0047 total: 450 per_label: 225 0 0 0 0 0 0 0 0 225 -partition: 0048 total: 450 per_label: 225 0 0 225 0 0 0 0 0 0 -partition: 0049 total: 450 per_label: 225 0 0 0 0 0 225 0 0 0 -partition: 0050 total: 450 per_label: 0 0 0 225 0 225 0 0 0 0 -partition: 0051 total: 450 per_label: 0 0 0 0 0 0 225 0 225 0 -partition: 0052 total: 450 per_label: 0 225 0 0 0 225 0 0 0 0 -partition: 0053 total: 450 per_label: 225 0 0 0 0 0 0 0 225 0 -partition: 0054 total: 450 per_label: 0 225 225 0 0 0 0 0 0 0 -partition: 0055 total: 450 per_label: 0 225 0 0 0 225 0 0 0 0 -partition: 0056 total: 450 per_label: 0 0 0 0 0 0 0 0 225 225 -partition: 0057 total: 450 per_label: 0 225 225 0 0 0 0 0 0 0 -partition: 0058 total: 450 per_label: 0 0 0 0 0 225 0 0 225 0 -partition: 0059 total: 450 per_label: 225 0 0 0 0 0 225 0 0 0 -partition: 0060 total: 450 per_label: 0 225 0 0 225 0 0 0 0 0 -partition: 0061 total: 450 per_label: 225 0 0 0 225 0 0 0 0 0 -partition: 0062 total: 450 per_label: 0 0 0 0 225 0 0 0 0 225 -partition: 0063 total: 450 per_label: 0 225 0 0 225 0 0 0 0 0 -partition: 0064 total: 450 per_label: 225 0 0 0 225 0 0 0 0 0 -partition: 0065 total: 450 per_label: 0 0 0 0 0 225 0 225 0 0 -partition: 0066 total: 450 per_label: 225 0 225 0 0 0 0 0 0 0 -partition: 0067 total: 450 per_label: 0 0 225 225 0 0 0 0 0 0 -partition: 0068 total: 450 per_label: 0 225 0 225 0 0 0 0 0 0 -partition: 0069 total: 450 per_label: 0 0 0 0 0 0 0 0 225 225 -partition: 0070 total: 450 per_label: 0 0 0 0 0 0 225 0 0 225 -partition: 0071 total: 450 per_label: 0 225 0 0 0 0 0 0 0 225 -partition: 0072 total: 450 per_label: 0 0 0 0 225 225 0 0 0 0 -partition: 0073 total: 450 per_label: 0 0 0 0 0 0 225 0 0 225 -partition: 0074 total: 450 per_label: 225 0 0 0 0 0 0 0 0 225 -partition: 0075 total: 450 per_label: 0 0 0 225 0 0 0 0 0 225 -partition: 0076 total: 450 per_label: 0 0 0 0 225 0 0 0 225 0 -partition: 0077 total: 450 per_label: 225 0 0 0 0 0 0 0 0 225 -partition: 0078 total: 450 per_label: 225 0 0 225 0 0 0 0 0 0 -partition: 0079 total: 450 per_label: 0 0 0 0 0 0 225 0 225 0 -partition: 0080 total: 450 per_label: 225 225 0 0 0 0 0 0 0 0 -partition: 0081 total: 450 per_label: 0 0 0 0 225 0 0 225 0 0 -partition: 0082 total: 450 per_label: 0 0 0 0 0 225 225 0 0 0 -partition: 0083 total: 450 per_label: 0 0 0 0 225 0 0 0 225 0 -partition: 0084 total: 450 per_label: 0 0 0 225 225 0 0 0 0 0 -partition: 0085 total: 450 per_label: 0 0 0 225 0 225 0 0 0 0 -partition: 0086 total: 450 per_label: 0 0 0 225 225 0 0 0 0 0 -partition: 0087 total: 450 per_label: 0 0 0 0 0 225 0 0 225 0 -partition: 0088 total: 450 per_label: 0 0 0 225 0 0 0 225 0 0 -partition: 0089 total: 450 per_label: 0 0 0 0 0 225 0 0 225 0 -partition: 0090 total: 450 per_label: 0 0 0 0 0 0 225 0 225 0 -partition: 0091 total: 450 per_label: 0 0 0 225 0 0 0 225 0 0 -partition: 0092 total: 450 per_label: 0 0 0 225 0 0 0 225 0 0 -partition: 0093 total: 450 per_label: 0 0 0 0 0 0 0 225 225 0 -partition: 0094 total: 450 per_label: 0 0 0 0 0 0 0 225 225 0 -partition: 0095 total: 450 per_label: 0 0 0 0 0 0 225 225 0 0 -partition: 0096 total: 450 per_label: 0 0 0 0 0 0 225 225 0 0 -partition: 0097 total: 450 per_label: 0 0 0 0 0 0 225 225 0 0 -partition: 0098 total: 450 per_label: 0 0 0 0 0 0 225 225 0 0 -partition: 0099 total: 450 per_label: 0 0 0 0 0 0 225 225 0 0 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-03cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-03cpp.txt deleted file mode 100644 index a0159675b..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-03cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-03cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 450 per_label: 0 0 0 150 150 0 0 0 0 150 -partition: 0001 total: 450 per_label: 0 150 0 0 0 150 150 0 0 0 -partition: 0002 total: 450 per_label: 0 0 150 0 0 150 150 0 0 0 -partition: 0003 total: 450 per_label: 150 0 0 0 150 0 150 0 0 0 -partition: 0004 total: 450 per_label: 0 0 0 150 0 150 0 150 0 0 -partition: 0005 total: 450 per_label: 0 150 150 0 150 0 0 0 0 0 -partition: 0006 total: 450 per_label: 0 0 0 0 150 150 0 0 0 150 -partition: 0007 total: 450 per_label: 0 0 150 0 0 150 0 0 0 150 -partition: 0008 total: 450 per_label: 0 150 0 0 0 0 0 0 150 150 -partition: 0009 total: 450 per_label: 0 0 150 0 0 0 0 0 150 150 -partition: 0010 total: 450 per_label: 150 0 150 0 0 150 0 0 0 0 -partition: 0011 total: 450 per_label: 0 0 0 0 0 150 0 150 0 150 -partition: 0012 total: 450 per_label: 0 0 0 0 150 150 150 0 0 0 -partition: 0013 total: 450 per_label: 0 150 0 150 0 0 0 150 0 0 -partition: 0014 total: 450 per_label: 0 0 150 0 150 0 0 150 0 0 -partition: 0015 total: 450 per_label: 150 150 0 150 0 0 0 0 0 0 -partition: 0016 total: 450 per_label: 0 0 150 0 0 150 0 0 150 0 -partition: 0017 total: 450 per_label: 150 150 0 0 0 0 0 0 0 150 -partition: 0018 total: 450 per_label: 0 150 150 0 0 0 0 0 0 150 -partition: 0019 total: 450 per_label: 150 0 0 0 150 0 0 0 150 0 -partition: 0020 total: 450 per_label: 150 0 0 0 150 0 0 0 150 0 -partition: 0021 total: 450 per_label: 0 150 0 150 0 150 0 0 0 0 -partition: 0022 total: 450 per_label: 0 150 0 0 0 150 150 0 0 0 -partition: 0023 total: 450 per_label: 150 0 150 0 0 0 0 150 0 0 -partition: 0024 total: 450 per_label: 0 150 0 0 0 0 150 0 150 0 -partition: 0025 total: 450 per_label: 0 0 150 0 0 150 0 150 0 0 -partition: 0026 total: 450 per_label: 0 150 0 0 150 150 0 0 0 0 -partition: 0027 total: 450 per_label: 0 150 0 150 0 0 0 150 0 0 -partition: 0028 total: 450 per_label: 0 0 150 0 150 150 0 0 0 0 -partition: 0029 total: 450 per_label: 0 0 150 0 0 150 0 150 0 0 -partition: 0030 total: 450 per_label: 0 150 0 0 0 0 150 0 150 0 -partition: 0031 total: 450 per_label: 150 0 150 0 0 0 0 0 150 0 -partition: 0032 total: 450 per_label: 150 0 150 0 0 150 0 0 0 0 -partition: 0033 total: 450 per_label: 0 0 150 150 0 0 0 0 150 0 -partition: 0034 total: 450 per_label: 0 0 0 150 0 0 150 0 150 0 -partition: 0035 total: 450 per_label: 0 0 150 150 0 0 0 150 0 0 -partition: 0036 total: 450 per_label: 150 0 0 0 150 0 0 150 0 0 -partition: 0037 total: 450 per_label: 0 0 150 150 0 0 0 0 150 0 -partition: 0038 total: 450 per_label: 0 0 0 0 150 0 150 150 0 0 -partition: 0039 total: 450 per_label: 150 0 0 0 150 0 0 150 0 0 -partition: 0040 total: 450 per_label: 0 0 0 150 0 0 150 0 0 150 -partition: 0041 total: 450 per_label: 150 0 150 0 0 0 0 0 0 150 -partition: 0042 total: 450 per_label: 0 150 150 0 0 0 0 150 0 0 -partition: 0043 total: 450 per_label: 0 0 0 0 0 150 0 0 150 150 -partition: 0044 total: 450 per_label: 0 150 0 0 0 150 0 0 0 150 -partition: 0045 total: 450 per_label: 0 150 0 0 0 0 150 0 0 150 -partition: 0046 total: 450 per_label: 150 0 150 150 0 0 0 0 0 0 -partition: 0047 total: 450 per_label: 150 0 0 150 0 0 0 0 0 150 -partition: 0048 total: 450 per_label: 150 0 0 150 0 0 0 0 0 150 -partition: 0049 total: 450 per_label: 150 150 0 0 0 0 150 0 0 0 -partition: 0050 total: 450 per_label: 0 150 0 150 0 150 0 0 0 0 -partition: 0051 total: 450 per_label: 0 0 0 0 0 0 150 0 150 150 -partition: 0052 total: 450 per_label: 150 150 0 0 0 150 0 0 0 0 -partition: 0053 total: 450 per_label: 150 0 0 0 0 0 0 150 150 0 -partition: 0054 total: 450 per_label: 0 150 150 150 0 0 0 0 0 0 -partition: 0055 total: 450 per_label: 150 150 0 0 0 150 0 0 0 0 -partition: 0056 total: 450 per_label: 150 0 0 0 0 0 0 0 150 150 -partition: 0057 total: 450 per_label: 0 150 150 0 0 0 0 0 150 0 -partition: 0058 total: 450 per_label: 0 0 0 0 0 150 150 0 150 0 -partition: 0059 total: 450 per_label: 150 0 150 0 0 0 150 0 0 0 -partition: 0060 total: 450 per_label: 0 150 0 0 150 0 0 150 0 0 -partition: 0061 total: 450 per_label: 150 0 0 0 150 0 0 150 0 0 -partition: 0062 total: 450 per_label: 0 150 0 0 150 0 0 0 0 150 -partition: 0063 total: 450 per_label: 0 150 0 150 150 0 0 0 0 0 -partition: 0064 total: 450 per_label: 150 0 0 0 150 0 0 150 0 0 -partition: 0065 total: 450 per_label: 0 150 0 0 0 150 0 150 0 0 -partition: 0066 total: 450 per_label: 150 0 150 0 150 0 0 0 0 0 -partition: 0067 total: 450 per_label: 0 0 150 150 150 0 0 0 0 0 -partition: 0068 total: 450 per_label: 0 150 150 0 0 0 150 0 0 0 -partition: 0069 total: 450 per_label: 0 0 0 0 0 0 150 150 150 0 -partition: 0070 total: 450 per_label: 0 0 0 0 0 0 150 0 150 150 -partition: 0071 total: 450 per_label: 150 0 150 150 0 0 0 0 0 0 -partition: 0072 total: 450 per_label: 0 0 0 150 0 0 0 150 0 150 -partition: 0073 total: 450 per_label: 0 150 0 0 150 0 150 0 0 0 -partition: 0074 total: 450 per_label: 0 0 0 0 150 150 0 150 0 0 -partition: 0075 total: 450 per_label: 0 0 0 150 0 0 0 150 150 0 -partition: 0076 total: 450 per_label: 150 150 150 0 0 0 0 0 0 0 -partition: 0077 total: 450 per_label: 0 0 0 0 0 150 0 0 150 150 -partition: 0078 total: 450 per_label: 150 0 0 150 0 0 0 0 0 150 -partition: 0079 total: 450 per_label: 0 150 0 0 0 0 150 0 0 150 -partition: 0080 total: 450 per_label: 150 0 0 150 0 0 0 150 0 0 -partition: 0081 total: 450 per_label: 0 0 0 0 0 150 0 0 150 150 -partition: 0082 total: 450 per_label: 0 0 150 0 0 150 0 150 0 0 -partition: 0083 total: 450 per_label: 0 0 0 150 0 0 0 150 0 150 -partition: 0084 total: 450 per_label: 150 0 0 0 150 0 0 150 0 0 -partition: 0085 total: 450 per_label: 150 0 150 0 0 0 0 0 150 0 -partition: 0086 total: 450 per_label: 0 0 0 0 0 150 150 0 150 0 -partition: 0087 total: 450 per_label: 0 0 0 150 0 0 150 0 150 0 -partition: 0088 total: 450 per_label: 0 0 0 0 0 150 150 0 0 150 -partition: 0089 total: 450 per_label: 0 0 0 150 150 0 0 0 150 0 -partition: 0090 total: 450 per_label: 0 0 0 0 0 150 0 150 150 0 -partition: 0091 total: 450 per_label: 0 0 0 0 0 0 150 150 0 150 -partition: 0092 total: 450 per_label: 0 0 0 150 150 0 0 0 0 150 -partition: 0093 total: 450 per_label: 0 0 0 0 150 0 0 0 150 150 -partition: 0094 total: 450 per_label: 0 0 0 0 150 0 150 150 0 0 -partition: 0095 total: 450 per_label: 0 0 0 150 150 0 150 0 0 0 -partition: 0096 total: 450 per_label: 0 0 0 0 150 0 150 0 0 150 -partition: 0097 total: 450 per_label: 0 0 0 150 150 0 150 0 0 0 -partition: 0098 total: 450 per_label: 0 0 0 150 0 0 150 0 150 0 -partition: 0099 total: 450 per_label: 0 0 0 0 0 0 150 150 150 0 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-04cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-04cpp.txt deleted file mode 100644 index 7870dbd99..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-04cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-04cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 448 per_label: 0 112 0 112 112 0 0 0 0 112 -partition: 0001 total: 448 per_label: 0 112 112 0 0 112 112 0 0 0 -partition: 0002 total: 448 per_label: 0 0 112 0 0 112 112 112 0 0 -partition: 0003 total: 448 per_label: 112 0 0 0 112 0 112 0 0 112 -partition: 0004 total: 448 per_label: 0 0 0 112 0 112 0 112 0 112 -partition: 0005 total: 448 per_label: 0 112 112 0 112 0 0 112 0 0 -partition: 0006 total: 448 per_label: 0 0 0 0 112 112 0 112 0 112 -partition: 0007 total: 448 per_label: 0 0 112 0 112 112 0 0 0 112 -partition: 0008 total: 448 per_label: 0 112 0 0 0 0 112 0 112 112 -partition: 0009 total: 448 per_label: 0 0 112 0 0 112 0 0 112 112 -partition: 0010 total: 448 per_label: 112 0 112 112 0 112 0 0 0 0 -partition: 0011 total: 448 per_label: 0 0 0 0 112 112 0 112 0 112 -partition: 0012 total: 448 per_label: 0 0 0 0 112 112 112 0 0 112 -partition: 0013 total: 448 per_label: 112 112 0 112 0 0 0 112 0 0 -partition: 0014 total: 448 per_label: 0 0 112 112 112 0 0 112 0 0 -partition: 0015 total: 448 per_label: 112 112 0 112 0 0 112 0 0 0 -partition: 0016 total: 448 per_label: 0 112 112 0 0 112 0 0 112 0 -partition: 0017 total: 448 per_label: 112 112 0 0 0 0 112 0 0 112 -partition: 0018 total: 448 per_label: 0 112 112 0 0 112 0 0 0 112 -partition: 0019 total: 448 per_label: 112 0 112 0 112 0 0 0 112 0 -partition: 0020 total: 448 per_label: 112 0 0 0 112 112 0 0 112 0 -partition: 0021 total: 448 per_label: 0 112 0 112 0 112 0 0 112 0 -partition: 0022 total: 448 per_label: 0 112 0 0 0 112 112 0 112 0 -partition: 0023 total: 448 per_label: 112 0 112 112 0 0 0 112 0 0 -partition: 0024 total: 448 per_label: 0 112 0 0 0 0 112 0 112 112 -partition: 0025 total: 448 per_label: 0 112 112 0 0 112 0 112 0 0 -partition: 0026 total: 448 per_label: 0 112 0 112 112 112 0 0 0 0 -partition: 0027 total: 448 per_label: 0 112 0 112 0 0 112 112 0 0 -partition: 0028 total: 448 per_label: 0 0 112 112 112 112 0 0 0 0 -partition: 0029 total: 448 per_label: 0 0 112 0 0 112 0 112 0 112 -partition: 0030 total: 448 per_label: 0 112 112 0 0 0 0 112 112 0 -partition: 0031 total: 448 per_label: 112 0 112 0 112 0 0 0 112 0 -partition: 0032 total: 448 per_label: 112 0 112 0 0 112 0 0 112 0 -partition: 0033 total: 448 per_label: 0 0 112 112 0 0 0 112 112 0 -partition: 0034 total: 448 per_label: 0 0 0 112 112 0 112 0 112 0 -partition: 0035 total: 448 per_label: 0 0 112 112 0 112 0 112 0 0 -partition: 0036 total: 448 per_label: 112 0 0 0 112 0 112 112 0 0 -partition: 0037 total: 448 per_label: 0 112 112 112 0 0 0 0 112 0 -partition: 0038 total: 448 per_label: 0 0 0 0 112 0 112 112 112 0 -partition: 0039 total: 448 per_label: 112 0 0 0 112 112 0 112 0 0 -partition: 0040 total: 448 per_label: 112 0 0 112 0 0 112 0 0 112 -partition: 0041 total: 448 per_label: 112 112 112 0 0 0 0 0 0 112 -partition: 0042 total: 448 per_label: 0 112 112 0 0 0 0 112 112 0 -partition: 0043 total: 448 per_label: 0 0 0 112 0 112 0 0 112 112 -partition: 0044 total: 448 per_label: 0 112 0 0 0 112 0 0 112 112 -partition: 0045 total: 448 per_label: 0 112 0 0 0 0 112 0 112 112 -partition: 0046 total: 448 per_label: 112 0 112 112 0 112 0 0 0 0 -partition: 0047 total: 448 per_label: 112 0 0 112 112 0 0 0 0 112 -partition: 0048 total: 448 per_label: 112 0 0 112 0 0 0 112 0 112 -partition: 0049 total: 448 per_label: 112 112 0 0 0 0 112 0 0 112 -partition: 0050 total: 448 per_label: 0 112 0 112 0 112 0 0 0 112 -partition: 0051 total: 448 per_label: 0 0 0 0 112 0 112 0 112 112 -partition: 0052 total: 448 per_label: 112 112 0 0 112 112 0 0 0 0 -partition: 0053 total: 448 per_label: 112 0 0 0 0 112 0 112 112 0 -partition: 0054 total: 448 per_label: 0 112 112 112 0 112 0 0 0 0 -partition: 0055 total: 448 per_label: 112 112 0 0 0 112 112 0 0 0 -partition: 0056 total: 448 per_label: 112 0 0 0 0 0 112 0 112 112 -partition: 0057 total: 448 per_label: 0 112 112 0 0 0 0 0 112 112 -partition: 0058 total: 448 per_label: 0 0 0 0 112 112 112 0 112 0 -partition: 0059 total: 448 per_label: 112 112 112 0 0 0 112 0 0 0 -partition: 0060 total: 448 per_label: 0 112 112 0 112 0 0 112 0 0 -partition: 0061 total: 448 per_label: 112 112 0 0 112 0 0 112 0 0 -partition: 0062 total: 448 per_label: 0 112 112 0 112 0 0 0 0 112 -partition: 0063 total: 448 per_label: 0 112 0 112 112 0 0 112 0 0 -partition: 0064 total: 448 per_label: 112 0 0 0 112 0 112 112 0 0 -partition: 0065 total: 448 per_label: 0 112 0 0 112 112 0 112 0 0 -partition: 0066 total: 448 per_label: 112 0 112 112 112 0 0 0 0 0 -partition: 0067 total: 448 per_label: 0 112 112 112 112 0 0 0 0 0 -partition: 0068 total: 448 per_label: 0 112 112 0 0 0 112 0 112 0 -partition: 0069 total: 448 per_label: 0 112 0 0 0 0 112 112 112 0 -partition: 0070 total: 448 per_label: 0 0 0 0 0 112 112 0 112 112 -partition: 0071 total: 448 per_label: 112 0 112 112 112 0 0 0 0 0 -partition: 0072 total: 448 per_label: 0 0 0 112 0 112 0 112 0 112 -partition: 0073 total: 448 per_label: 0 112 0 0 112 0 112 0 112 0 -partition: 0074 total: 448 per_label: 0 0 0 0 112 112 112 112 0 0 -partition: 0075 total: 448 per_label: 0 0 0 112 0 112 0 112 112 0 -partition: 0076 total: 448 per_label: 112 112 112 112 0 0 0 0 0 0 -partition: 0077 total: 448 per_label: 0 0 0 0 0 112 112 0 112 112 -partition: 0078 total: 448 per_label: 112 0 0 112 0 0 0 112 0 112 -partition: 0079 total: 448 per_label: 0 112 112 0 0 0 112 0 0 112 -partition: 0080 total: 448 per_label: 0 0 0 0 112 0 112 112 0 112 -partition: 0081 total: 448 per_label: 0 112 0 112 112 0 0 0 112 0 -partition: 0082 total: 448 per_label: 112 0 112 112 0 0 0 112 0 0 -partition: 0083 total: 448 per_label: 112 0 112 0 112 0 0 0 112 0 -partition: 0084 total: 448 per_label: 112 0 112 0 112 0 0 0 112 0 -partition: 0085 total: 448 per_label: 0 0 0 112 112 0 0 0 112 112 -partition: 0086 total: 448 per_label: 0 0 0 112 112 112 0 0 0 112 -partition: 0087 total: 448 per_label: 112 0 0 0 0 112 112 112 0 0 -partition: 0088 total: 448 per_label: 0 0 0 0 112 112 0 0 112 112 -partition: 0089 total: 448 per_label: 0 0 0 0 112 112 112 0 0 112 -partition: 0090 total: 448 per_label: 0 0 112 0 0 0 112 112 112 0 -partition: 0091 total: 448 per_label: 0 0 112 112 0 0 112 112 0 0 -partition: 0092 total: 448 per_label: 112 0 112 0 0 0 0 112 112 0 -partition: 0093 total: 448 per_label: 112 0 0 0 0 0 112 112 0 112 -partition: 0094 total: 448 per_label: 112 0 0 112 0 0 112 0 0 112 -partition: 0095 total: 448 per_label: 0 0 0 112 0 0 112 112 0 112 -partition: 0096 total: 448 per_label: 112 0 0 112 0 0 112 112 0 0 -partition: 0097 total: 448 per_label: 112 0 0 112 0 0 112 0 112 0 -partition: 0098 total: 448 per_label: 112 0 0 112 0 0 0 112 112 0 -partition: 0099 total: 448 per_label: 112 0 0 0 0 0 112 0 112 112 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-05cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-05cpp.txt deleted file mode 100644 index d21035b96..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-05cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-05cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 450 per_label: 90 90 0 90 0 0 0 90 0 90 -partition: 0001 total: 450 per_label: 0 90 90 90 0 90 90 0 0 0 -partition: 0002 total: 450 per_label: 0 90 90 0 0 90 90 90 0 0 -partition: 0003 total: 450 per_label: 90 0 0 0 90 90 90 0 0 90 -partition: 0004 total: 450 per_label: 0 0 90 90 0 90 0 90 0 90 -partition: 0005 total: 450 per_label: 0 90 90 0 90 0 90 90 0 0 -partition: 0006 total: 450 per_label: 0 0 0 0 90 90 0 90 90 90 -partition: 0007 total: 450 per_label: 0 0 90 0 90 90 0 90 0 90 -partition: 0008 total: 450 per_label: 0 90 0 0 90 0 90 0 90 90 -partition: 0009 total: 450 per_label: 0 90 90 0 0 90 0 0 90 90 -partition: 0010 total: 450 per_label: 90 0 90 90 0 90 0 0 90 0 -partition: 0011 total: 450 per_label: 90 0 0 0 90 90 0 90 0 90 -partition: 0012 total: 450 per_label: 0 0 0 0 90 90 90 0 90 90 -partition: 0013 total: 450 per_label: 90 90 0 90 0 0 90 90 0 0 -partition: 0014 total: 450 per_label: 0 0 90 90 90 0 0 90 90 0 -partition: 0015 total: 450 per_label: 90 90 0 90 0 0 90 0 90 0 -partition: 0016 total: 450 per_label: 0 90 90 0 0 90 90 0 90 0 -partition: 0017 total: 450 per_label: 90 90 0 0 0 0 90 0 90 90 -partition: 0018 total: 450 per_label: 0 90 90 0 0 90 0 0 90 90 -partition: 0019 total: 450 per_label: 90 0 90 0 90 90 0 0 90 0 -partition: 0020 total: 450 per_label: 90 0 0 0 90 90 0 90 90 0 -partition: 0021 total: 450 per_label: 0 90 0 90 90 90 0 0 90 0 -partition: 0022 total: 450 per_label: 0 90 0 90 0 90 90 0 90 0 -partition: 0023 total: 450 per_label: 90 90 90 90 0 0 0 90 0 0 -partition: 0024 total: 450 per_label: 0 90 90 0 0 0 90 0 90 90 -partition: 0025 total: 450 per_label: 0 90 90 0 0 90 0 90 90 0 -partition: 0026 total: 450 per_label: 90 90 0 90 90 90 0 0 0 0 -partition: 0027 total: 450 per_label: 0 90 0 90 0 0 90 90 0 90 -partition: 0028 total: 450 per_label: 0 0 90 90 90 90 0 0 90 0 -partition: 0029 total: 450 per_label: 0 0 90 0 0 90 0 90 90 90 -partition: 0030 total: 450 per_label: 0 90 90 0 90 0 0 90 90 0 -partition: 0031 total: 450 per_label: 90 0 90 0 90 0 0 90 90 0 -partition: 0032 total: 450 per_label: 90 0 90 0 0 90 90 0 90 0 -partition: 0033 total: 450 per_label: 0 0 90 90 90 0 0 90 90 0 -partition: 0034 total: 450 per_label: 0 0 0 90 90 90 90 0 90 0 -partition: 0035 total: 450 per_label: 0 0 90 90 0 90 0 90 90 0 -partition: 0036 total: 450 per_label: 90 0 90 0 90 0 0 90 0 90 -partition: 0037 total: 450 per_label: 0 90 90 90 90 0 0 0 90 0 -partition: 0038 total: 450 per_label: 0 0 90 0 90 0 90 90 90 0 -partition: 0039 total: 450 per_label: 90 0 0 90 90 90 0 90 0 0 -partition: 0040 total: 450 per_label: 90 0 0 90 0 90 90 0 0 90 -partition: 0041 total: 450 per_label: 90 90 90 0 0 0 0 0 90 90 -partition: 0042 total: 450 per_label: 90 90 90 0 0 0 0 90 90 0 -partition: 0043 total: 450 per_label: 0 0 0 90 90 90 0 0 90 90 -partition: 0044 total: 450 per_label: 0 90 0 0 0 90 90 0 90 90 -partition: 0045 total: 450 per_label: 0 90 0 0 0 0 90 90 90 90 -partition: 0046 total: 450 per_label: 90 0 90 90 0 90 0 90 0 0 -partition: 0047 total: 450 per_label: 90 0 0 90 90 0 0 90 0 90 -partition: 0048 total: 450 per_label: 90 0 0 90 0 0 90 90 0 90 -partition: 0049 total: 450 per_label: 90 90 0 0 0 0 90 90 0 90 -partition: 0050 total: 450 per_label: 0 90 90 90 0 90 0 0 0 90 -partition: 0051 total: 450 per_label: 0 0 90 0 90 0 90 0 90 90 -partition: 0052 total: 450 per_label: 90 90 0 0 90 90 0 0 90 0 -partition: 0053 total: 450 per_label: 90 0 0 0 90 90 0 90 90 0 -partition: 0054 total: 450 per_label: 0 90 90 90 0 90 90 0 0 0 -partition: 0055 total: 450 per_label: 90 90 0 0 0 90 90 0 0 90 -partition: 0056 total: 450 per_label: 90 0 0 90 0 0 90 0 90 90 -partition: 0057 total: 450 per_label: 90 90 90 0 0 0 0 0 90 90 -partition: 0058 total: 450 per_label: 0 0 0 0 90 90 90 90 90 0 -partition: 0059 total: 450 per_label: 90 90 90 0 0 0 90 90 0 0 -partition: 0060 total: 450 per_label: 0 90 90 0 90 0 0 90 90 0 -partition: 0061 total: 450 per_label: 90 90 0 0 90 0 90 90 0 0 -partition: 0062 total: 450 per_label: 0 90 90 0 90 0 0 90 0 90 -partition: 0063 total: 450 per_label: 0 90 0 90 90 0 0 90 90 0 -partition: 0064 total: 450 per_label: 90 0 0 0 90 0 90 90 0 90 -partition: 0065 total: 450 per_label: 0 90 0 0 90 90 0 90 0 90 -partition: 0066 total: 450 per_label: 90 90 90 90 90 0 0 0 0 0 -partition: 0067 total: 450 per_label: 0 90 90 90 90 0 90 0 0 0 -partition: 0068 total: 450 per_label: 0 90 90 0 0 0 90 0 90 90 -partition: 0069 total: 450 per_label: 90 0 0 90 0 0 90 90 90 0 -partition: 0070 total: 450 per_label: 0 0 0 90 0 90 90 0 90 90 -partition: 0071 total: 450 per_label: 90 90 90 90 90 0 0 0 0 0 -partition: 0072 total: 450 per_label: 0 0 0 90 90 90 0 90 0 90 -partition: 0073 total: 450 per_label: 90 90 0 0 90 0 90 0 90 0 -partition: 0074 total: 450 per_label: 90 0 90 0 90 90 0 90 0 0 -partition: 0075 total: 450 per_label: 0 0 0 90 0 90 0 90 90 90 -partition: 0076 total: 450 per_label: 90 90 90 90 0 0 0 0 90 0 -partition: 0077 total: 450 per_label: 0 0 90 0 0 90 90 0 90 90 -partition: 0078 total: 450 per_label: 90 0 0 90 0 90 0 90 0 90 -partition: 0079 total: 450 per_label: 0 90 90 0 0 90 90 0 0 90 -partition: 0080 total: 450 per_label: 90 0 0 0 90 0 90 90 0 90 -partition: 0081 total: 450 per_label: 0 90 0 90 90 0 90 0 90 0 -partition: 0082 total: 450 per_label: 0 0 90 0 90 90 90 0 0 90 -partition: 0083 total: 450 per_label: 90 0 0 90 0 0 90 90 90 0 -partition: 0084 total: 450 per_label: 90 90 90 0 0 0 90 0 90 0 -partition: 0085 total: 450 per_label: 90 0 0 90 0 90 0 90 90 0 -partition: 0086 total: 450 per_label: 0 0 90 90 90 0 90 90 0 0 -partition: 0087 total: 450 per_label: 90 0 0 0 90 90 0 90 0 90 -partition: 0088 total: 450 per_label: 0 90 0 90 0 90 90 90 0 0 -partition: 0089 total: 450 per_label: 0 90 0 90 90 90 90 0 0 0 -partition: 0090 total: 450 per_label: 90 90 0 90 90 0 0 90 0 0 -partition: 0091 total: 450 per_label: 0 0 90 90 0 90 90 0 0 90 -partition: 0092 total: 450 per_label: 90 0 90 0 0 90 90 0 0 90 -partition: 0093 total: 450 per_label: 0 0 90 90 0 90 90 0 0 90 -partition: 0094 total: 450 per_label: 90 0 90 90 90 0 0 0 0 90 -partition: 0095 total: 450 per_label: 90 0 90 90 90 0 0 0 0 90 -partition: 0096 total: 450 per_label: 90 0 0 90 90 0 90 0 0 90 -partition: 0097 total: 450 per_label: 90 90 0 90 0 0 90 0 0 90 -partition: 0098 total: 450 per_label: 90 0 0 90 0 0 90 90 0 90 -partition: 0099 total: 450 per_label: 90 90 0 0 90 0 0 90 0 90 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-06cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-06cpp.txt deleted file mode 100644 index 3374633df..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-06cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-06cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 450 per_label: 0 75 75 75 75 0 0 75 0 75 -partition: 0001 total: 450 per_label: 75 75 75 75 0 75 75 0 0 0 -partition: 0002 total: 450 per_label: 0 75 75 0 75 75 75 75 0 0 -partition: 0003 total: 450 per_label: 75 0 75 0 75 75 75 0 0 75 -partition: 0004 total: 450 per_label: 0 0 75 75 75 75 75 0 0 75 -partition: 0005 total: 450 per_label: 75 75 75 0 75 0 75 0 0 75 -partition: 0006 total: 450 per_label: 75 0 0 0 75 75 0 75 75 75 -partition: 0007 total: 450 per_label: 0 0 75 75 75 75 0 75 0 75 -partition: 0008 total: 450 per_label: 75 0 0 0 75 75 75 0 75 75 -partition: 0009 total: 450 per_label: 0 75 75 0 75 75 0 0 75 75 -partition: 0010 total: 450 per_label: 75 0 75 75 75 75 0 0 75 0 -partition: 0011 total: 450 per_label: 75 0 0 75 75 75 0 75 0 75 -partition: 0012 total: 450 per_label: 0 0 75 0 75 75 75 0 75 75 -partition: 0013 total: 450 per_label: 75 75 0 75 75 0 75 75 0 0 -partition: 0014 total: 450 per_label: 0 0 75 75 75 0 0 75 75 75 -partition: 0015 total: 450 per_label: 75 75 75 75 0 0 75 0 75 0 -partition: 0016 total: 450 per_label: 0 75 75 0 0 75 75 0 75 75 -partition: 0017 total: 450 per_label: 75 75 75 0 0 0 75 0 75 75 -partition: 0018 total: 450 per_label: 0 75 75 75 0 75 0 0 75 75 -partition: 0019 total: 450 per_label: 75 75 75 0 75 75 0 0 75 0 -partition: 0020 total: 450 per_label: 75 0 0 75 75 75 0 75 75 0 -partition: 0021 total: 450 per_label: 75 75 0 75 75 75 0 0 75 0 -partition: 0022 total: 450 per_label: 0 75 0 75 0 75 75 75 75 0 -partition: 0023 total: 450 per_label: 75 75 75 75 0 75 0 75 0 0 -partition: 0024 total: 450 per_label: 0 75 75 0 75 0 75 0 75 75 -partition: 0025 total: 450 per_label: 0 75 75 0 0 75 75 75 75 0 -partition: 0026 total: 450 per_label: 75 75 0 75 75 75 0 75 0 0 -partition: 0027 total: 450 per_label: 75 75 0 75 0 0 75 75 0 75 -partition: 0028 total: 450 per_label: 0 75 75 75 75 75 0 0 75 0 -partition: 0029 total: 450 per_label: 0 0 75 75 0 75 0 75 75 75 -partition: 0030 total: 450 per_label: 0 75 75 0 75 75 0 75 75 0 -partition: 0031 total: 450 per_label: 75 0 75 0 75 0 0 75 75 75 -partition: 0032 total: 450 per_label: 75 75 75 0 0 75 75 0 75 0 -partition: 0033 total: 450 per_label: 0 0 75 75 75 75 0 75 75 0 -partition: 0034 total: 450 per_label: 75 0 0 75 75 75 75 0 75 0 -partition: 0035 total: 450 per_label: 0 0 75 75 0 75 0 75 75 75 -partition: 0036 total: 450 per_label: 75 0 75 0 75 0 0 75 75 75 -partition: 0037 total: 450 per_label: 0 75 75 75 75 75 0 0 75 0 -partition: 0038 total: 450 per_label: 75 0 75 0 75 0 75 75 75 0 -partition: 0039 total: 450 per_label: 75 0 0 75 75 75 0 75 0 75 -partition: 0040 total: 450 per_label: 75 0 75 75 0 75 75 0 0 75 -partition: 0041 total: 450 per_label: 75 75 75 75 0 0 0 0 75 75 -partition: 0042 total: 450 per_label: 0 75 75 0 0 75 75 75 75 0 -partition: 0043 total: 450 per_label: 0 0 0 75 75 75 0 75 75 75 -partition: 0044 total: 450 per_label: 0 75 0 0 75 75 75 0 75 75 -partition: 0045 total: 450 per_label: 0 75 0 75 0 0 75 75 75 75 -partition: 0046 total: 450 per_label: 75 0 75 75 0 75 75 75 0 0 -partition: 0047 total: 450 per_label: 75 75 0 75 75 0 0 75 0 75 -partition: 0048 total: 450 per_label: 75 75 0 75 0 0 75 75 0 75 -partition: 0049 total: 450 per_label: 75 75 0 0 0 0 75 75 75 75 -partition: 0050 total: 450 per_label: 75 75 75 75 0 75 0 0 0 75 -partition: 0051 total: 450 per_label: 0 0 75 0 75 0 75 75 75 75 -partition: 0052 total: 450 per_label: 75 75 0 0 75 75 0 0 75 75 -partition: 0053 total: 450 per_label: 75 0 75 0 75 75 0 75 75 0 -partition: 0054 total: 450 per_label: 0 75 75 75 0 75 75 75 0 0 -partition: 0055 total: 450 per_label: 75 75 75 0 0 75 75 0 0 75 -partition: 0056 total: 450 per_label: 75 75 0 75 0 0 75 0 75 75 -partition: 0057 total: 450 per_label: 75 75 75 0 0 0 0 75 75 75 -partition: 0058 total: 450 per_label: 0 75 0 0 75 75 75 75 75 0 -partition: 0059 total: 450 per_label: 75 75 75 0 0 0 75 75 0 75 -partition: 0060 total: 450 per_label: 0 75 75 0 75 75 0 75 75 0 -partition: 0061 total: 450 per_label: 75 75 0 0 75 75 75 75 0 0 -partition: 0062 total: 450 per_label: 0 75 75 0 75 0 0 75 75 75 -partition: 0063 total: 450 per_label: 0 75 0 75 75 0 0 75 75 75 -partition: 0064 total: 450 per_label: 75 0 0 75 75 0 75 75 0 75 -partition: 0065 total: 450 per_label: 0 75 0 0 75 75 75 75 0 75 -partition: 0066 total: 450 per_label: 75 75 75 75 75 0 0 0 0 75 -partition: 0067 total: 450 per_label: 0 75 75 75 75 75 75 0 0 0 -partition: 0068 total: 450 per_label: 0 75 75 0 0 0 75 75 75 75 -partition: 0069 total: 450 per_label: 75 75 0 75 0 0 75 75 75 0 -partition: 0070 total: 450 per_label: 0 0 0 75 75 75 75 0 75 75 -partition: 0071 total: 450 per_label: 75 75 75 75 75 75 0 0 0 0 -partition: 0072 total: 450 per_label: 75 0 0 75 75 75 0 75 0 75 -partition: 0073 total: 450 per_label: 75 0 0 75 0 0 75 75 75 75 -partition: 0074 total: 450 per_label: 0 0 75 75 75 75 75 75 0 0 -partition: 0075 total: 450 per_label: 0 75 75 75 0 75 0 75 75 0 -partition: 0076 total: 450 per_label: 75 75 75 75 0 0 0 75 75 0 -partition: 0077 total: 450 per_label: 0 0 75 0 0 75 75 75 75 75 -partition: 0078 total: 450 per_label: 75 0 0 75 75 0 75 75 0 75 -partition: 0079 total: 450 per_label: 0 75 75 0 75 75 75 0 0 75 -partition: 0080 total: 450 per_label: 75 0 0 0 75 0 75 75 75 75 -partition: 0081 total: 450 per_label: 75 75 0 0 75 0 75 0 75 75 -partition: 0082 total: 450 per_label: 75 0 75 0 75 75 75 75 0 0 -partition: 0083 total: 450 per_label: 75 0 75 75 0 0 75 75 75 0 -partition: 0084 total: 450 per_label: 0 75 75 75 0 75 75 0 75 0 -partition: 0085 total: 450 per_label: 75 0 0 75 0 75 75 75 75 0 -partition: 0086 total: 450 per_label: 0 75 75 75 75 0 75 0 0 75 -partition: 0087 total: 450 per_label: 75 0 0 0 0 75 75 75 75 75 -partition: 0088 total: 450 per_label: 75 75 0 75 0 75 75 0 0 75 -partition: 0089 total: 450 per_label: 75 75 0 75 0 75 75 75 0 0 -partition: 0090 total: 450 per_label: 0 75 75 0 75 75 75 75 0 0 -partition: 0091 total: 450 per_label: 75 75 75 75 0 0 0 75 75 0 -partition: 0092 total: 450 per_label: 75 0 75 75 0 0 75 75 75 0 -partition: 0093 total: 450 per_label: 75 75 75 75 0 0 0 0 75 75 -partition: 0094 total: 450 per_label: 75 0 0 75 75 0 75 0 75 75 -partition: 0095 total: 450 per_label: 75 0 0 75 75 0 75 0 75 75 -partition: 0096 total: 450 per_label: 75 75 0 75 75 0 75 0 0 75 -partition: 0097 total: 450 per_label: 0 75 75 75 75 0 75 0 0 75 -partition: 0098 total: 450 per_label: 75 0 0 0 75 75 75 75 0 75 -partition: 0099 total: 450 per_label: 75 0 0 75 75 75 0 75 0 75 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-07cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-07cpp.txt deleted file mode 100644 index fd88899ae..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-07cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-07cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 448 per_label: 64 64 64 64 64 0 0 64 0 64 -partition: 0001 total: 448 per_label: 64 64 64 64 64 64 64 0 0 0 -partition: 0002 total: 448 per_label: 0 64 64 64 64 64 64 64 0 0 -partition: 0003 total: 448 per_label: 64 0 64 0 64 64 64 0 64 64 -partition: 0004 total: 448 per_label: 0 64 64 64 0 64 64 64 0 64 -partition: 0005 total: 448 per_label: 64 64 64 64 64 0 64 64 0 0 -partition: 0006 total: 448 per_label: 64 0 64 0 64 64 0 64 64 64 -partition: 0007 total: 448 per_label: 0 0 64 64 64 64 64 64 0 64 -partition: 0008 total: 448 per_label: 0 64 0 64 64 64 64 0 64 64 -partition: 0009 total: 448 per_label: 0 64 64 0 64 64 64 0 64 64 -partition: 0010 total: 448 per_label: 64 0 64 64 64 64 0 64 64 0 -partition: 0011 total: 448 per_label: 64 0 64 64 64 64 0 64 0 64 -partition: 0012 total: 448 per_label: 0 0 64 0 64 64 64 64 64 64 -partition: 0013 total: 448 per_label: 64 64 64 64 64 0 64 64 0 0 -partition: 0014 total: 448 per_label: 0 0 64 64 64 0 64 64 64 64 -partition: 0015 total: 448 per_label: 64 64 64 64 0 0 64 0 64 64 -partition: 0016 total: 448 per_label: 64 64 0 0 0 64 64 64 64 64 -partition: 0017 total: 448 per_label: 64 64 64 0 0 0 64 64 64 64 -partition: 0018 total: 448 per_label: 64 64 64 64 0 64 0 0 64 64 -partition: 0019 total: 448 per_label: 64 64 64 0 64 64 0 0 64 64 -partition: 0020 total: 448 per_label: 64 0 0 64 64 64 64 64 64 0 -partition: 0021 total: 448 per_label: 64 64 0 64 64 64 0 64 64 0 -partition: 0022 total: 448 per_label: 0 64 0 64 0 64 64 64 64 64 -partition: 0023 total: 448 per_label: 64 64 64 64 0 64 0 64 64 0 -partition: 0024 total: 448 per_label: 64 64 64 0 64 0 64 0 64 64 -partition: 0025 total: 448 per_label: 0 64 64 0 0 64 64 64 64 64 -partition: 0026 total: 448 per_label: 64 64 0 64 64 64 0 64 64 0 -partition: 0027 total: 448 per_label: 64 64 0 64 64 0 64 64 0 64 -partition: 0028 total: 448 per_label: 0 64 64 64 64 64 0 0 64 64 -partition: 0029 total: 448 per_label: 0 64 64 64 0 64 0 64 64 64 -partition: 0030 total: 448 per_label: 0 64 64 64 64 64 0 64 64 0 -partition: 0031 total: 448 per_label: 64 64 64 0 64 0 0 64 64 64 -partition: 0032 total: 448 per_label: 64 64 64 0 64 64 64 0 64 0 -partition: 0033 total: 448 per_label: 64 0 64 64 64 64 0 64 64 0 -partition: 0034 total: 448 per_label: 64 64 0 64 0 64 64 0 64 64 -partition: 0035 total: 448 per_label: 0 0 64 64 64 64 0 64 64 64 -partition: 0036 total: 448 per_label: 64 0 64 64 64 0 0 64 64 64 -partition: 0037 total: 448 per_label: 0 64 64 64 64 64 0 0 64 64 -partition: 0038 total: 448 per_label: 64 0 64 0 64 64 64 64 64 0 -partition: 0039 total: 448 per_label: 64 0 0 64 64 64 64 64 0 64 -partition: 0040 total: 448 per_label: 64 0 64 64 0 64 64 64 0 64 -partition: 0041 total: 448 per_label: 64 64 64 64 64 0 0 0 64 64 -partition: 0042 total: 448 per_label: 64 64 64 0 0 64 64 64 64 0 -partition: 0043 total: 448 per_label: 0 0 64 64 64 64 0 64 64 64 -partition: 0044 total: 448 per_label: 0 64 0 0 64 64 64 64 64 64 -partition: 0045 total: 448 per_label: 64 64 0 64 0 0 64 64 64 64 -partition: 0046 total: 448 per_label: 64 64 64 64 0 64 64 0 0 64 -partition: 0047 total: 448 per_label: 64 64 0 64 64 0 64 64 0 64 -partition: 0048 total: 448 per_label: 64 64 64 64 0 0 64 64 0 64 -partition: 0049 total: 448 per_label: 64 64 64 0 0 0 64 64 64 64 -partition: 0050 total: 448 per_label: 64 64 64 64 64 64 0 0 0 64 -partition: 0051 total: 448 per_label: 0 0 64 64 64 0 64 64 64 64 -partition: 0052 total: 448 per_label: 64 64 0 0 64 64 64 0 64 64 -partition: 0053 total: 448 per_label: 64 0 64 64 64 64 0 64 64 0 -partition: 0054 total: 448 per_label: 64 0 64 64 0 64 64 64 0 64 -partition: 0055 total: 448 per_label: 64 64 64 0 0 64 64 64 0 64 -partition: 0056 total: 448 per_label: 64 64 0 64 0 64 64 0 64 64 -partition: 0057 total: 448 per_label: 64 64 64 0 0 0 64 64 64 64 -partition: 0058 total: 448 per_label: 0 64 0 64 64 64 64 64 64 0 -partition: 0059 total: 448 per_label: 64 64 64 64 0 64 64 64 0 0 -partition: 0060 total: 448 per_label: 0 64 64 0 64 64 0 64 64 64 -partition: 0061 total: 448 per_label: 64 64 0 0 64 64 64 64 64 0 -partition: 0062 total: 448 per_label: 0 64 64 0 64 0 64 64 64 64 -partition: 0063 total: 448 per_label: 0 64 0 64 64 64 0 64 64 64 -partition: 0064 total: 448 per_label: 64 0 0 64 64 64 64 64 0 64 -partition: 0065 total: 448 per_label: 0 64 0 64 64 64 64 64 0 64 -partition: 0066 total: 448 per_label: 64 64 64 64 64 0 0 64 0 64 -partition: 0067 total: 448 per_label: 0 64 64 64 64 64 64 64 0 0 -partition: 0068 total: 448 per_label: 64 64 64 0 0 0 64 64 64 64 -partition: 0069 total: 448 per_label: 64 64 0 64 0 64 64 64 64 0 -partition: 0070 total: 448 per_label: 0 0 64 64 64 64 64 0 64 64 -partition: 0071 total: 448 per_label: 64 64 64 64 64 64 64 0 0 0 -partition: 0072 total: 448 per_label: 64 0 0 64 64 64 0 64 64 64 -partition: 0073 total: 448 per_label: 64 64 64 0 64 0 64 64 64 0 -partition: 0074 total: 448 per_label: 64 0 64 64 64 64 0 64 0 64 -partition: 0075 total: 448 per_label: 0 64 64 64 0 64 64 64 64 0 -partition: 0076 total: 448 per_label: 64 64 64 64 64 0 0 64 64 0 -partition: 0077 total: 448 per_label: 0 0 64 0 64 64 64 64 64 64 -partition: 0078 total: 448 per_label: 64 0 0 64 0 64 64 64 64 64 -partition: 0079 total: 448 per_label: 64 64 64 0 64 64 64 0 0 64 -partition: 0080 total: 448 per_label: 64 0 64 0 64 0 64 64 64 64 -partition: 0081 total: 448 per_label: 64 64 0 64 64 64 64 0 64 0 -partition: 0082 total: 448 per_label: 64 64 64 0 64 64 64 64 0 0 -partition: 0083 total: 448 per_label: 64 0 64 64 0 64 64 64 64 0 -partition: 0084 total: 448 per_label: 0 64 64 64 0 64 64 0 64 64 -partition: 0085 total: 448 per_label: 64 0 64 64 0 64 64 0 64 64 -partition: 0086 total: 448 per_label: 0 64 64 64 64 0 64 64 0 64 -partition: 0087 total: 448 per_label: 64 0 0 0 64 64 64 64 64 64 -partition: 0088 total: 448 per_label: 64 64 0 64 0 64 64 64 0 64 -partition: 0089 total: 448 per_label: 64 64 0 64 64 64 64 64 0 0 -partition: 0090 total: 448 per_label: 0 64 64 64 64 64 0 64 0 64 -partition: 0091 total: 448 per_label: 64 64 64 64 0 64 64 0 64 0 -partition: 0092 total: 448 per_label: 64 0 64 64 64 64 64 0 64 0 -partition: 0093 total: 448 per_label: 64 64 64 64 64 0 0 0 64 64 -partition: 0094 total: 448 per_label: 0 64 64 64 64 0 64 0 64 64 -partition: 0095 total: 448 per_label: 64 64 0 64 64 0 64 0 64 64 -partition: 0096 total: 448 per_label: 64 64 0 64 64 0 64 0 64 64 -partition: 0097 total: 448 per_label: 64 64 0 64 64 0 64 0 64 64 -partition: 0098 total: 448 per_label: 64 0 0 0 64 64 64 64 64 64 -partition: 0099 total: 448 per_label: 64 64 64 0 64 0 0 64 64 64 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-08cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-08cpp.txt deleted file mode 100644 index 04a025b7a..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-08cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-08cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 448 per_label: 56 0 56 56 56 56 0 56 56 56 -partition: 0001 total: 448 per_label: 56 56 56 56 56 56 56 0 0 56 -partition: 0002 total: 448 per_label: 0 56 56 56 56 56 56 56 0 56 -partition: 0003 total: 448 per_label: 56 0 56 56 56 56 56 0 56 56 -partition: 0004 total: 448 per_label: 0 56 56 56 0 56 56 56 56 56 -partition: 0005 total: 448 per_label: 56 56 56 56 56 56 56 56 0 0 -partition: 0006 total: 448 per_label: 56 56 56 0 56 56 0 56 56 56 -partition: 0007 total: 448 per_label: 56 0 56 56 56 56 56 56 0 56 -partition: 0008 total: 448 per_label: 0 56 0 56 56 56 56 56 56 56 -partition: 0009 total: 448 per_label: 0 56 56 56 56 56 56 0 56 56 -partition: 0010 total: 448 per_label: 56 0 56 56 56 56 0 56 56 56 -partition: 0011 total: 448 per_label: 56 0 56 56 56 56 0 56 56 56 -partition: 0012 total: 448 per_label: 0 0 56 56 56 56 56 56 56 56 -partition: 0013 total: 448 per_label: 56 56 56 56 56 0 56 56 56 0 -partition: 0014 total: 448 per_label: 56 0 56 56 56 0 56 56 56 56 -partition: 0015 total: 448 per_label: 56 56 56 56 56 0 56 0 56 56 -partition: 0016 total: 448 per_label: 56 56 56 0 56 56 56 56 56 0 -partition: 0017 total: 448 per_label: 56 56 56 0 56 0 56 56 56 56 -partition: 0018 total: 448 per_label: 56 56 56 56 0 56 56 0 56 56 -partition: 0019 total: 448 per_label: 56 56 56 56 56 56 0 0 56 56 -partition: 0020 total: 448 per_label: 56 0 0 56 56 56 56 56 56 56 -partition: 0021 total: 448 per_label: 56 56 56 56 56 56 0 56 56 0 -partition: 0022 total: 448 per_label: 0 56 56 56 56 56 56 56 56 0 -partition: 0023 total: 448 per_label: 56 56 56 56 0 56 0 56 56 56 -partition: 0024 total: 448 per_label: 56 56 56 0 56 0 56 56 56 56 -partition: 0025 total: 448 per_label: 56 56 56 56 0 56 56 56 56 0 -partition: 0026 total: 448 per_label: 56 56 0 56 56 56 0 56 56 56 -partition: 0027 total: 448 per_label: 56 56 0 56 56 56 56 56 0 56 -partition: 0028 total: 448 per_label: 56 56 56 56 56 56 0 0 56 56 -partition: 0029 total: 448 per_label: 56 56 56 56 56 56 0 0 56 56 -partition: 0030 total: 448 per_label: 0 56 56 56 56 56 56 56 56 0 -partition: 0031 total: 448 per_label: 56 56 56 0 56 0 56 56 56 56 -partition: 0032 total: 448 per_label: 56 56 56 0 56 56 56 0 56 56 -partition: 0033 total: 448 per_label: 56 0 56 56 56 56 56 56 56 0 -partition: 0034 total: 448 per_label: 56 56 0 56 56 56 56 56 56 0 -partition: 0035 total: 448 per_label: 0 0 56 56 56 56 56 56 56 56 -partition: 0036 total: 448 per_label: 56 0 56 56 56 56 0 56 56 56 -partition: 0037 total: 448 per_label: 56 56 56 56 56 56 0 0 56 56 -partition: 0038 total: 448 per_label: 56 0 56 56 56 56 56 56 56 0 -partition: 0039 total: 448 per_label: 56 56 0 56 56 56 56 56 0 56 -partition: 0040 total: 448 per_label: 56 56 56 0 0 56 56 56 56 56 -partition: 0041 total: 448 per_label: 56 56 56 56 56 0 56 0 56 56 -partition: 0042 total: 448 per_label: 56 56 56 56 0 56 56 56 56 0 -partition: 0043 total: 448 per_label: 56 0 56 56 56 56 0 56 56 56 -partition: 0044 total: 448 per_label: 56 56 0 0 56 56 56 56 56 56 -partition: 0045 total: 448 per_label: 56 56 0 56 0 56 56 56 56 56 -partition: 0046 total: 448 per_label: 56 56 0 56 56 56 56 56 0 56 -partition: 0047 total: 448 per_label: 56 56 56 56 56 0 56 56 0 56 -partition: 0048 total: 448 per_label: 56 56 56 56 0 56 56 56 0 56 -partition: 0049 total: 448 per_label: 56 0 56 0 56 56 56 56 56 56 -partition: 0050 total: 448 per_label: 56 56 56 56 56 56 0 56 0 56 -partition: 0051 total: 448 per_label: 0 56 56 56 56 0 56 56 56 56 -partition: 0052 total: 448 per_label: 56 56 0 56 56 56 56 0 56 56 -partition: 0053 total: 448 per_label: 56 0 56 56 56 56 0 56 56 56 -partition: 0054 total: 448 per_label: 56 56 56 56 0 56 56 56 0 56 -partition: 0055 total: 448 per_label: 56 56 56 0 0 56 56 56 56 56 -partition: 0056 total: 448 per_label: 56 56 56 56 0 56 56 0 56 56 -partition: 0057 total: 448 per_label: 56 56 56 0 0 56 56 56 56 56 -partition: 0058 total: 448 per_label: 0 56 56 56 56 56 56 0 56 56 -partition: 0059 total: 448 per_label: 56 56 56 56 56 0 56 56 56 0 -partition: 0060 total: 448 per_label: 56 56 56 0 56 56 0 56 56 56 -partition: 0061 total: 448 per_label: 56 56 0 0 56 56 56 56 56 56 -partition: 0062 total: 448 per_label: 56 56 56 0 56 0 56 56 56 56 -partition: 0063 total: 448 per_label: 0 56 56 56 56 56 0 56 56 56 -partition: 0064 total: 448 per_label: 56 56 0 56 56 56 56 56 0 56 -partition: 0065 total: 448 per_label: 56 56 0 56 56 56 56 56 0 56 -partition: 0066 total: 448 per_label: 56 56 56 56 56 0 0 56 56 56 -partition: 0067 total: 448 per_label: 0 56 56 56 56 56 56 56 56 0 -partition: 0068 total: 448 per_label: 0 56 56 0 56 56 56 56 56 56 -partition: 0069 total: 448 per_label: 56 56 56 56 0 56 56 56 56 0 -partition: 0070 total: 448 per_label: 0 56 56 56 56 56 56 0 56 56 -partition: 0071 total: 448 per_label: 0 56 56 56 56 56 56 56 0 56 -partition: 0072 total: 448 per_label: 56 56 0 56 56 56 0 56 56 56 -partition: 0073 total: 448 per_label: 56 56 56 0 56 0 56 56 56 56 -partition: 0074 total: 448 per_label: 56 0 56 56 56 56 56 56 56 0 -partition: 0075 total: 448 per_label: 0 56 56 56 56 56 56 0 56 56 -partition: 0076 total: 448 per_label: 56 56 56 56 56 0 0 56 56 56 -partition: 0077 total: 448 per_label: 0 0 56 56 56 56 56 56 56 56 -partition: 0078 total: 448 per_label: 56 56 0 56 0 56 56 56 56 56 -partition: 0079 total: 448 per_label: 56 56 56 0 56 56 56 0 56 56 -partition: 0080 total: 448 per_label: 56 56 56 0 56 0 56 56 56 56 -partition: 0081 total: 448 per_label: 56 56 0 56 56 56 56 56 56 0 -partition: 0082 total: 448 per_label: 56 56 56 0 56 56 56 56 56 0 -partition: 0083 total: 448 per_label: 56 56 56 56 0 56 56 56 56 0 -partition: 0084 total: 448 per_label: 0 56 56 56 56 56 56 0 56 56 -partition: 0085 total: 448 per_label: 56 56 56 56 0 56 56 56 56 0 -partition: 0086 total: 448 per_label: 56 56 56 56 56 0 56 56 0 56 -partition: 0087 total: 448 per_label: 56 0 0 56 56 56 56 56 56 56 -partition: 0088 total: 448 per_label: 56 56 0 56 56 56 56 56 0 56 -partition: 0089 total: 448 per_label: 56 56 0 56 56 56 56 56 0 56 -partition: 0090 total: 448 per_label: 0 56 56 56 56 56 56 56 0 56 -partition: 0091 total: 448 per_label: 56 56 56 56 0 56 56 56 0 56 -partition: 0092 total: 448 per_label: 56 56 56 56 0 56 56 56 56 0 -partition: 0093 total: 448 per_label: 56 56 56 0 56 0 56 56 56 56 -partition: 0094 total: 448 per_label: 0 56 56 56 56 56 56 56 0 56 -partition: 0095 total: 448 per_label: 56 56 0 56 56 56 56 0 56 56 -partition: 0096 total: 448 per_label: 56 0 56 56 56 0 56 56 56 56 -partition: 0097 total: 448 per_label: 56 56 56 56 56 0 56 0 56 56 -partition: 0098 total: 448 per_label: 56 0 56 56 0 56 56 56 56 56 -partition: 0099 total: 448 per_label: 56 56 56 56 0 0 56 56 56 56 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-09cpp.txt b/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-09cpp.txt deleted file mode 100644 index 03ca139f5..000000000 --- a/xain_fl/datasets/stats/datasets/cifar-10-100p-noniid-09cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: cifar-10-100p-noniid-09cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0001 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0002 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0003 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0004 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0005 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0006 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0007 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0008 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0009 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0010 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0011 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0012 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0013 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0014 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0015 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0016 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0017 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0018 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0019 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0020 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0021 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0022 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0023 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0024 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0025 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0026 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0027 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0028 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0029 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0030 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0031 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0032 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0033 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0034 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0035 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0036 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0037 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0038 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0039 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0040 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0041 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0042 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0043 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0044 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0045 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0046 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0047 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0048 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0049 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0050 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0051 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0052 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0053 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0054 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0055 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0056 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0057 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0058 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0059 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0060 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0061 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0062 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0063 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0064 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0065 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0066 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0067 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0068 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0069 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0070 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0071 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0072 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: 0073 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0074 total: 450 per_label: 50 0 50 50 50 50 50 50 50 50 -partition: 0075 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0076 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0077 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0078 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0079 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0080 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0081 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0082 total: 450 per_label: 50 50 50 0 50 50 50 50 50 50 -partition: 0083 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0084 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0085 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0086 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0087 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0088 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0089 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0090 total: 450 per_label: 50 50 50 50 50 50 50 50 0 50 -partition: 0091 total: 450 per_label: 50 50 0 50 50 50 50 50 50 50 -partition: 0092 total: 450 per_label: 50 50 50 50 50 50 50 50 50 0 -partition: 0093 total: 450 per_label: 50 50 50 50 50 0 50 50 50 50 -partition: 0094 total: 450 per_label: 0 50 50 50 50 50 50 50 50 50 -partition: 0095 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0096 total: 450 per_label: 50 50 50 50 0 50 50 50 50 50 -partition: 0097 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0098 total: 450 per_label: 50 50 50 50 50 50 50 0 50 50 -partition: 0099 total: 450 per_label: 50 50 50 50 50 50 0 50 50 50 -partition: val total: 5000 per_label: 500 500 500 500 500 500 500 500 500 500 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_000.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_000.txt deleted file mode 100644 index 99942d3ca..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_000.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_000 -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 53 54 49 55 61 60 57 61 53 37 -partition: 0001 total: 540 per_label: 47 54 50 48 59 56 48 55 59 64 -partition: 0002 total: 540 per_label: 67 56 45 49 59 48 64 54 46 52 -partition: 0003 total: 540 per_label: 53 61 50 53 54 60 53 59 47 50 -partition: 0004 total: 540 per_label: 55 64 45 56 49 55 58 53 59 46 -partition: 0005 total: 540 per_label: 57 59 48 44 52 53 62 55 50 60 -partition: 0006 total: 540 per_label: 57 55 49 52 54 54 53 56 52 58 -partition: 0007 total: 540 per_label: 56 54 58 57 54 51 60 55 46 49 -partition: 0008 total: 540 per_label: 50 49 59 53 47 49 63 55 58 57 -partition: 0009 total: 540 per_label: 58 51 63 67 58 52 50 53 41 47 -partition: 0010 total: 540 per_label: 53 48 57 65 51 56 55 50 56 49 -partition: 0011 total: 540 per_label: 55 63 64 50 53 45 51 42 69 48 -partition: 0012 total: 540 per_label: 56 47 52 50 51 64 56 49 67 48 -partition: 0013 total: 540 per_label: 56 70 48 55 50 44 43 62 47 65 -partition: 0014 total: 540 per_label: 46 59 36 58 49 56 64 69 54 49 -partition: 0015 total: 540 per_label: 47 57 61 46 57 67 42 46 42 75 -partition: 0016 total: 540 per_label: 52 43 58 48 52 58 50 62 62 55 -partition: 0017 total: 540 per_label: 46 51 53 57 65 73 46 45 59 45 -partition: 0018 total: 540 per_label: 52 50 48 54 45 64 63 62 53 49 -partition: 0019 total: 540 per_label: 60 55 54 51 50 55 50 53 48 64 -partition: 0020 total: 540 per_label: 57 44 59 64 59 58 49 42 57 51 -partition: 0021 total: 540 per_label: 44 51 53 53 67 59 45 63 45 60 -partition: 0022 total: 540 per_label: 56 58 47 60 51 47 60 64 48 49 -partition: 0023 total: 540 per_label: 65 57 52 45 56 40 62 50 59 54 -partition: 0024 total: 540 per_label: 67 52 67 64 39 48 56 55 59 33 -partition: 0025 total: 540 per_label: 49 53 55 65 45 51 60 50 56 56 -partition: 0026 total: 540 per_label: 43 60 70 40 44 54 53 62 50 64 -partition: 0027 total: 540 per_label: 58 53 61 49 62 65 48 38 46 60 -partition: 0028 total: 540 per_label: 49 54 63 54 53 48 54 53 56 56 -partition: 0029 total: 540 per_label: 44 54 49 55 40 59 55 65 56 63 -partition: 0030 total: 540 per_label: 59 52 45 57 51 46 48 49 70 63 -partition: 0031 total: 540 per_label: 47 45 58 56 50 50 58 64 55 57 -partition: 0032 total: 540 per_label: 43 50 56 58 61 46 56 53 56 61 -partition: 0033 total: 540 per_label: 46 63 49 60 60 47 53 65 44 53 -partition: 0034 total: 540 per_label: 63 55 47 52 56 47 61 50 49 60 -partition: 0035 total: 540 per_label: 56 54 51 59 56 55 43 56 55 55 -partition: 0036 total: 540 per_label: 63 57 51 51 58 48 47 56 52 57 -partition: 0037 total: 540 per_label: 61 52 58 54 54 35 66 55 56 49 -partition: 0038 total: 540 per_label: 53 56 51 43 53 64 50 63 50 57 -partition: 0039 total: 540 per_label: 53 53 45 63 49 44 62 64 43 64 -partition: 0040 total: 540 per_label: 59 45 57 55 56 54 50 48 47 69 -partition: 0041 total: 540 per_label: 59 51 54 54 50 47 58 61 51 55 -partition: 0042 total: 540 per_label: 48 57 56 70 46 49 42 48 62 62 -partition: 0043 total: 540 per_label: 47 58 40 51 46 51 62 50 68 67 -partition: 0044 total: 540 per_label: 72 54 59 54 45 41 54 45 56 60 -partition: 0045 total: 540 per_label: 45 66 64 53 59 56 58 46 35 58 -partition: 0046 total: 540 per_label: 56 68 56 50 66 56 43 47 54 44 -partition: 0047 total: 540 per_label: 64 58 48 47 52 50 47 57 64 53 -partition: 0048 total: 540 per_label: 45 51 51 58 38 53 68 60 58 58 -partition: 0049 total: 540 per_label: 60 47 49 47 73 60 50 53 48 53 -partition: 0050 total: 540 per_label: 72 53 39 46 56 46 60 57 63 48 -partition: 0051 total: 540 per_label: 51 64 52 57 50 64 63 55 46 38 -partition: 0052 total: 540 per_label: 64 43 52 55 60 62 50 58 50 46 -partition: 0053 total: 540 per_label: 43 47 58 51 61 41 58 50 79 52 -partition: 0054 total: 540 per_label: 52 56 63 54 51 62 50 50 63 39 -partition: 0055 total: 540 per_label: 47 59 58 51 51 54 52 57 53 58 -partition: 0056 total: 540 per_label: 59 60 54 48 52 50 63 62 45 47 -partition: 0057 total: 540 per_label: 52 51 56 63 44 63 62 50 57 42 -partition: 0058 total: 540 per_label: 51 42 50 54 74 55 60 59 49 46 -partition: 0059 total: 540 per_label: 55 43 60 52 57 65 48 41 47 72 -partition: 0060 total: 540 per_label: 52 67 59 49 54 55 51 53 45 55 -partition: 0061 total: 540 per_label: 54 43 57 60 58 49 46 64 59 50 -partition: 0062 total: 540 per_label: 60 52 56 53 62 43 53 57 57 47 -partition: 0063 total: 540 per_label: 54 47 70 45 53 57 60 46 47 61 -partition: 0064 total: 540 per_label: 40 52 44 48 56 61 66 44 75 54 -partition: 0065 total: 540 per_label: 58 59 45 62 67 54 48 45 48 54 -partition: 0066 total: 540 per_label: 54 58 56 44 62 51 59 61 42 53 -partition: 0067 total: 540 per_label: 60 51 54 51 59 57 43 58 51 56 -partition: 0068 total: 540 per_label: 44 40 56 63 47 58 68 61 50 53 -partition: 0069 total: 540 per_label: 59 48 51 59 53 60 46 41 68 55 -partition: 0070 total: 540 per_label: 56 62 46 61 54 53 51 45 65 47 -partition: 0071 total: 540 per_label: 62 58 51 58 50 56 44 58 51 52 -partition: 0072 total: 540 per_label: 57 56 57 63 56 38 52 53 56 52 -partition: 0073 total: 540 per_label: 47 65 48 61 48 53 60 60 48 50 -partition: 0074 total: 540 per_label: 51 51 47 58 47 68 55 52 53 58 -partition: 0075 total: 540 per_label: 55 44 69 55 45 47 62 54 51 58 -partition: 0076 total: 540 per_label: 51 63 65 50 51 43 49 56 67 45 -partition: 0077 total: 540 per_label: 63 51 52 52 56 43 51 50 55 67 -partition: 0078 total: 540 per_label: 50 59 47 47 64 54 55 56 53 55 -partition: 0079 total: 540 per_label: 53 57 60 51 60 56 57 40 46 60 -partition: 0080 total: 540 per_label: 51 52 59 44 50 49 53 71 53 58 -partition: 0081 total: 540 per_label: 54 48 67 67 53 56 45 49 43 58 -partition: 0082 total: 540 per_label: 63 49 58 46 50 60 57 54 58 45 -partition: 0083 total: 540 per_label: 50 57 52 60 50 49 52 65 57 48 -partition: 0084 total: 540 per_label: 56 60 49 52 52 46 47 57 53 68 -partition: 0085 total: 540 per_label: 50 40 69 62 57 63 41 47 49 62 -partition: 0086 total: 540 per_label: 47 49 60 57 68 55 51 52 53 48 -partition: 0087 total: 540 per_label: 61 60 48 47 49 66 53 42 62 52 -partition: 0088 total: 540 per_label: 52 59 52 46 59 62 50 50 58 52 -partition: 0089 total: 540 per_label: 59 51 51 48 47 66 53 56 67 42 -partition: 0090 total: 540 per_label: 58 46 50 58 64 57 50 46 50 61 -partition: 0091 total: 540 per_label: 63 43 52 62 54 58 58 52 53 45 -partition: 0092 total: 540 per_label: 45 60 43 61 68 48 52 61 53 49 -partition: 0093 total: 540 per_label: 53 63 61 51 44 58 41 71 53 45 -partition: 0094 total: 540 per_label: 48 49 58 56 62 65 55 52 39 56 -partition: 0095 total: 540 per_label: 48 59 57 42 47 63 59 53 49 63 -partition: 0096 total: 540 per_label: 46 61 48 59 46 59 49 48 71 53 -partition: 0097 total: 540 per_label: 52 54 50 41 58 56 69 52 55 53 -partition: 0098 total: 540 per_label: 58 47 65 57 42 50 59 51 59 52 -partition: 0099 total: 540 per_label: 53 64 51 54 57 48 58 50 53 52 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_005.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_005.txt deleted file mode 100644 index ea648b671..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_005.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_005 -number_of_examples_per_label_per_shard -partition: 0000 total: 417 per_label: 42 41 34 42 49 44 42 50 41 32 -partition: 0001 total: 420 per_label: 39 44 40 41 40 50 43 39 43 41 -partition: 0002 total: 422 per_label: 41 39 43 39 45 34 53 49 37 42 -partition: 0003 total: 424 per_label: 50 47 36 35 52 39 38 37 41 49 -partition: 0004 total: 426 per_label: 43 51 36 40 43 51 41 49 39 33 -partition: 0005 total: 428 per_label: 44 48 39 47 36 47 44 44 48 31 -partition: 0006 total: 430 per_label: 45 45 36 37 47 34 46 41 47 52 -partition: 0007 total: 432 per_label: 43 53 43 35 37 51 48 44 34 44 -partition: 0008 total: 434 per_label: 47 37 35 49 42 42 48 46 41 47 -partition: 0009 total: 437 per_label: 45 47 45 45 46 43 48 46 34 38 -partition: 0010 total: 439 per_label: 38 37 51 44 40 38 55 41 47 48 -partition: 0011 total: 441 per_label: 43 44 48 50 50 37 39 43 42 45 -partition: 0012 total: 443 per_label: 53 45 48 51 42 50 42 42 38 32 -partition: 0013 total: 445 per_label: 37 37 52 51 44 38 44 41 54 47 -partition: 0014 total: 448 per_label: 52 53 52 43 39 42 43 36 51 37 -partition: 0015 total: 450 per_label: 47 37 40 43 40 52 54 43 55 39 -partition: 0016 total: 452 per_label: 49 61 48 47 47 43 26 44 39 48 -partition: 0017 total: 454 per_label: 37 47 30 47 36 42 56 55 52 52 -partition: 0018 total: 457 per_label: 43 48 46 45 46 51 44 54 36 44 -partition: 0019 total: 459 per_label: 37 49 49 39 45 59 30 40 45 66 -partition: 0020 total: 461 per_label: 47 38 45 40 46 48 48 53 52 44 -partition: 0021 total: 464 per_label: 38 42 46 51 58 61 38 40 49 41 -partition: 0022 total: 466 per_label: 46 44 46 43 39 51 58 51 45 43 -partition: 0023 total: 468 per_label: 49 46 34 49 45 52 43 53 43 54 -partition: 0024 total: 471 per_label: 51 48 58 49 47 53 42 34 46 43 -partition: 0025 total: 473 per_label: 44 37 50 50 56 54 44 47 45 46 -partition: 0026 total: 475 per_label: 39 50 46 47 54 49 36 62 38 54 -partition: 0027 total: 478 per_label: 55 43 40 51 48 35 61 51 46 48 -partition: 0028 total: 480 per_label: 58 56 47 45 46 40 52 43 51 42 -partition: 0029 total: 482 per_label: 58 47 61 56 35 41 53 48 51 32 -partition: 0030 total: 485 per_label: 51 42 50 59 42 44 50 49 51 47 -partition: 0031 total: 487 per_label: 36 61 62 40 42 44 50 54 42 56 -partition: 0032 total: 490 per_label: 44 48 49 42 50 58 45 40 50 64 -partition: 0033 total: 492 per_label: 52 42 67 48 49 48 48 47 46 45 -partition: 0034 total: 495 per_label: 35 56 47 47 42 56 51 51 55 55 -partition: 0035 total: 497 per_label: 51 49 32 53 48 51 46 56 56 55 -partition: 0036 total: 500 per_label: 55 44 59 51 40 39 46 45 58 63 -partition: 0037 total: 502 per_label: 39 44 51 53 52 43 56 57 52 55 -partition: 0038 total: 505 per_label: 42 41 49 61 55 49 53 49 53 53 -partition: 0039 total: 507 per_label: 46 66 49 51 53 38 51 63 42 48 -partition: 0040 total: 510 per_label: 61 51 40 48 55 50 53 49 46 57 -partition: 0041 total: 512 per_label: 51 54 50 55 55 52 42 51 51 51 -partition: 0042 total: 515 per_label: 62 53 51 49 54 45 45 53 48 55 -partition: 0043 total: 517 per_label: 57 47 55 53 54 33 62 52 56 48 -partition: 0044 total: 520 per_label: 50 53 47 41 50 60 53 65 47 54 -partition: 0045 total: 523 per_label: 53 53 48 59 49 45 61 56 36 63 -partition: 0046 total: 525 per_label: 56 46 55 57 50 45 49 51 53 63 -partition: 0047 total: 528 per_label: 56 51 50 55 47 51 53 57 48 60 -partition: 0048 total: 530 per_label: 51 51 55 60 52 54 41 51 57 58 -partition: 0049 total: 533 per_label: 51 54 48 59 41 44 65 49 64 58 -partition: 0050 total: 536 per_label: 61 59 53 52 48 41 50 46 63 63 -partition: 0051 total: 538 per_label: 51 61 62 52 56 57 53 44 37 65 -partition: 0052 total: 541 per_label: 55 73 59 53 63 54 46 45 51 42 -partition: 0053 total: 544 per_label: 64 55 47 48 56 54 47 57 59 57 -partition: 0054 total: 547 per_label: 49 53 48 51 44 53 74 59 64 52 -partition: 0055 total: 549 per_label: 61 52 47 52 65 62 44 57 52 57 -partition: 0056 total: 552 per_label: 69 53 47 48 61 43 62 58 61 50 -partition: 0057 total: 555 per_label: 56 66 54 60 50 64 66 57 47 35 -partition: 0058 total: 558 per_label: 66 45 50 55 58 65 53 58 53 55 -partition: 0059 total: 560 per_label: 43 45 63 53 67 45 61 53 78 52 -partition: 0060 total: 563 per_label: 54 60 63 55 54 64 51 53 68 41 -partition: 0061 total: 566 per_label: 50 63 59 54 54 58 57 58 55 58 -partition: 0062 total: 569 per_label: 60 62 56 50 57 53 65 68 46 52 -partition: 0063 total: 572 per_label: 56 52 63 66 47 62 66 54 62 44 -partition: 0064 total: 575 per_label: 57 44 51 57 80 66 57 57 55 51 -partition: 0065 total: 577 per_label: 54 56 75 60 55 59 51 49 43 75 -partition: 0066 total: 580 per_label: 63 67 56 48 57 63 60 62 52 52 -partition: 0067 total: 583 per_label: 56 43 61 66 69 49 58 52 70 59 -partition: 0068 total: 586 per_label: 61 55 69 58 59 54 52 68 51 59 -partition: 0069 total: 589 per_label: 55 58 61 45 56 62 70 47 72 63 -partition: 0070 total: 592 per_label: 57 58 41 59 72 68 62 51 64 60 -partition: 0071 total: 595 per_label: 61 68 59 56 73 53 62 63 44 56 -partition: 0072 total: 598 per_label: 61 57 65 58 64 60 44 66 59 64 -partition: 0073 total: 601 per_label: 51 44 63 71 55 67 79 63 53 55 -partition: 0074 total: 604 per_label: 65 52 53 63 61 70 50 49 74 67 -partition: 0075 total: 607 per_label: 61 69 50 73 56 63 55 54 74 52 -partition: 0076 total: 610 per_label: 67 73 59 65 61 48 57 65 61 54 -partition: 0077 total: 613 per_label: 67 62 68 65 58 55 55 64 57 62 -partition: 0078 total: 616 per_label: 55 63 52 77 57 69 73 61 55 54 -partition: 0079 total: 619 per_label: 60 58 72 58 53 57 67 65 59 70 -partition: 0080 total: 622 per_label: 62 67 75 59 57 52 58 60 76 56 -partition: 0081 total: 625 per_label: 70 61 61 60 68 53 59 57 61 75 -partition: 0082 total: 629 per_label: 56 65 55 49 74 63 64 66 65 72 -partition: 0083 total: 632 per_label: 68 62 67 64 66 63 65 56 56 65 -partition: 0084 total: 635 per_label: 56 64 79 67 57 60 56 76 48 72 -partition: 0085 total: 638 per_label: 71 55 74 61 59 75 65 57 70 51 -partition: 0086 total: 641 per_label: 63 68 61 68 61 56 64 74 67 59 -partition: 0087 total: 645 per_label: 71 66 60 64 59 54 55 68 68 80 -partition: 0088 total: 648 per_label: 51 58 78 75 73 76 55 60 57 65 -partition: 0089 total: 651 per_label: 59 67 64 59 74 76 59 58 71 64 -partition: 0090 total: 654 per_label: 72 67 67 58 70 73 61 58 67 61 -partition: 0091 total: 657 per_label: 74 62 61 56 56 85 64 62 83 54 -partition: 0092 total: 661 per_label: 72 54 56 75 71 74 63 63 57 76 -partition: 0093 total: 664 per_label: 73 67 63 74 76 54 63 67 72 55 -partition: 0094 total: 667 per_label: 55 74 71 64 68 66 63 82 65 59 -partition: 0095 total: 671 per_label: 64 64 69 72 74 83 65 66 49 65 -partition: 0096 total: 674 per_label: 58 71 71 56 62 82 69 66 67 72 -partition: 0097 total: 677 per_label: 60 78 57 68 61 63 76 66 81 67 -partition: 0098 total: 681 per_label: 72 60 81 61 57 74 78 56 74 68 -partition: 0099 total: 684 per_label: 68 77 66 70 71 60 72 68 66 66 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_010.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_010.txt deleted file mode 100644 index dc318bfb0..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_010.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_010 -number_of_examples_per_label_per_shard -partition: 0000 total: 317 per_label: 34 35 27 32 34 30 33 36 27 29 -partition: 0001 total: 320 per_label: 28 29 30 30 38 39 31 31 42 22 -partition: 0002 total: 323 per_label: 28 32 29 33 33 33 33 35 27 40 -partition: 0003 total: 326 per_label: 37 30 34 30 32 27 45 37 26 28 -partition: 0004 total: 329 per_label: 38 38 23 27 42 33 27 31 36 34 -partition: 0005 total: 333 per_label: 35 42 33 32 36 34 35 30 30 26 -partition: 0006 total: 336 per_label: 34 37 25 35 29 38 29 39 38 32 -partition: 0007 total: 339 per_label: 37 40 33 35 31 38 35 36 28 26 -partition: 0008 total: 343 per_label: 33 32 30 27 36 27 39 34 42 43 -partition: 0009 total: 346 per_label: 32 42 31 27 33 41 40 35 26 39 -partition: 0010 total: 350 per_label: 39 38 32 40 30 35 37 40 30 29 -partition: 0011 total: 353 per_label: 39 30 31 35 32 41 40 35 34 36 -partition: 0012 total: 357 per_label: 39 37 47 35 39 25 35 33 30 37 -partition: 0013 total: 360 per_label: 27 30 36 39 33 33 50 34 40 38 -partition: 0014 total: 364 per_label: 35 36 40 39 42 30 31 38 35 38 -partition: 0015 total: 368 per_label: 46 37 41 45 30 42 38 37 26 26 -partition: 0016 total: 371 per_label: 40 31 38 44 39 36 33 31 44 35 -partition: 0017 total: 375 per_label: 34 43 47 33 35 38 37 33 41 34 -partition: 0018 total: 379 per_label: 37 35 41 38 38 30 41 38 47 34 -partition: 0019 total: 383 per_label: 41 34 35 37 35 46 40 32 50 33 -partition: 0020 total: 386 per_label: 39 56 42 43 35 37 20 38 32 44 -partition: 0021 total: 390 per_label: 38 37 26 42 39 33 46 43 40 46 -partition: 0022 total: 394 per_label: 33 47 29 38 36 42 43 57 37 32 -partition: 0023 total: 398 per_label: 34 42 48 27 42 48 37 31 27 62 -partition: 0024 total: 402 per_label: 33 35 40 46 35 51 31 41 49 41 -partition: 0025 total: 406 per_label: 39 31 37 37 43 51 41 43 46 38 -partition: 0026 total: 410 per_label: 40 43 43 40 50 48 31 35 44 36 -partition: 0027 total: 414 per_label: 37 36 42 40 36 46 53 48 38 38 -partition: 0028 total: 418 per_label: 48 42 31 43 38 45 37 47 36 51 -partition: 0029 total: 423 per_label: 44 42 49 47 38 48 40 32 44 39 -partition: 0030 total: 427 per_label: 45 36 45 44 58 44 34 39 39 43 -partition: 0031 total: 431 per_label: 33 40 43 44 47 47 39 52 37 49 -partition: 0032 total: 435 per_label: 44 45 40 48 40 39 46 49 37 47 -partition: 0033 total: 440 per_label: 53 52 40 38 49 32 51 42 43 40 -partition: 0034 total: 444 per_label: 51 40 54 45 34 41 53 47 49 30 -partition: 0035 total: 449 per_label: 56 48 46 58 34 35 40 42 55 35 -partition: 0036 total: 453 per_label: 35 42 49 50 38 45 55 47 46 46 -partition: 0037 total: 458 per_label: 40 51 59 32 40 42 45 53 41 55 -partition: 0038 total: 462 per_label: 50 44 44 44 52 57 43 34 40 54 -partition: 0039 total: 467 per_label: 42 43 67 42 49 46 43 42 46 47 -partition: 0040 total: 472 per_label: 35 52 44 49 36 50 50 53 51 52 -partition: 0041 total: 476 per_label: 47 47 30 50 47 51 42 53 55 54 -partition: 0042 total: 481 per_label: 53 42 57 50 39 36 46 45 57 56 -partition: 0043 total: 486 per_label: 39 41 52 52 51 44 51 53 46 57 -partition: 0044 total: 491 per_label: 39 45 44 62 49 43 52 48 56 53 -partition: 0045 total: 496 per_label: 46 63 47 45 57 42 49 61 40 46 -partition: 0046 total: 501 per_label: 56 48 47 50 52 44 59 49 43 53 -partition: 0047 total: 506 per_label: 54 50 44 54 54 50 41 52 53 54 -partition: 0048 total: 511 per_label: 59 55 50 46 52 50 42 54 47 56 -partition: 0049 total: 516 per_label: 57 49 54 52 52 34 58 54 56 50 -partition: 0050 total: 521 per_label: 51 54 48 47 52 57 56 61 44 51 -partition: 0051 total: 526 per_label: 52 56 51 51 52 49 59 58 38 60 -partition: 0052 total: 531 per_label: 61 43 51 67 52 39 51 47 57 63 -partition: 0053 total: 537 per_label: 55 53 49 48 48 55 56 60 45 68 -partition: 0054 total: 542 per_label: 52 48 62 64 53 55 41 54 56 57 -partition: 0055 total: 547 per_label: 55 58 48 61 43 44 65 48 69 56 -partition: 0056 total: 553 per_label: 59 60 56 53 48 44 53 50 65 65 -partition: 0057 total: 559 per_label: 55 65 63 54 57 60 56 44 38 67 -partition: 0058 total: 564 per_label: 59 74 61 54 65 56 46 49 52 48 -partition: 0059 total: 570 per_label: 67 60 47 52 60 53 53 59 65 54 -partition: 0060 total: 575 per_label: 49 57 56 60 42 56 72 60 63 60 -partition: 0061 total: 581 per_label: 64 51 51 48 79 64 51 61 55 57 -partition: 0062 total: 587 per_label: 78 61 46 54 55 52 66 61 63 51 -partition: 0063 total: 593 per_label: 60 67 53 54 57 73 67 61 51 50 -partition: 0064 total: 599 per_label: 60 45 60 69 67 55 60 62 72 49 -partition: 0065 total: 605 per_label: 46 58 75 56 68 51 59 60 81 51 -partition: 0066 total: 611 per_label: 61 60 63 61 55 72 64 53 64 58 -partition: 0067 total: 617 per_label: 59 66 62 55 62 66 65 78 54 50 -partition: 0068 total: 623 per_label: 66 67 64 68 49 65 65 58 64 57 -partition: 0069 total: 629 per_label: 60 50 61 64 84 66 72 65 57 50 -partition: 0070 total: 636 per_label: 62 55 77 65 66 70 57 50 50 84 -partition: 0071 total: 642 per_label: 67 76 65 55 63 65 65 72 57 57 -partition: 0072 total: 648 per_label: 65 51 66 69 77 57 60 61 74 68 -partition: 0073 total: 655 per_label: 66 59 81 61 62 64 68 69 59 66 -partition: 0074 total: 662 per_label: 56 68 55 61 71 73 74 54 87 63 -partition: 0075 total: 668 per_label: 66 67 56 67 88 70 63 60 61 70 -partition: 0076 total: 675 per_label: 73 67 68 62 73 63 61 78 61 69 -partition: 0077 total: 682 per_label: 65 60 78 73 58 72 77 72 59 68 -partition: 0078 total: 688 per_label: 69 56 62 74 74 77 68 56 80 72 -partition: 0079 total: 695 per_label: 77 76 62 82 61 72 63 64 81 57 -partition: 0080 total: 702 per_label: 74 86 67 71 77 60 60 71 71 65 -partition: 0081 total: 709 per_label: 68 77 70 83 63 63 76 77 63 69 -partition: 0082 total: 716 per_label: 66 60 65 78 60 80 81 76 68 82 -partition: 0083 total: 724 per_label: 78 71 94 72 61 61 69 70 81 67 -partition: 0084 total: 731 per_label: 77 79 73 68 77 60 70 67 79 81 -partition: 0085 total: 738 per_label: 68 77 67 58 92 72 76 75 71 82 -partition: 0086 total: 746 per_label: 73 76 84 73 71 77 74 73 67 78 -partition: 0087 total: 753 per_label: 73 70 95 89 70 75 67 75 65 74 -partition: 0088 total: 760 per_label: 83 72 75 68 74 70 79 86 84 69 -partition: 0089 total: 768 per_label: 80 85 68 78 73 75 69 79 74 87 -partition: 0090 total: 776 per_label: 66 66 93 89 82 85 66 75 74 80 -partition: 0091 total: 784 per_label: 79 76 76 72 86 97 72 66 85 75 -partition: 0092 total: 791 per_label: 84 87 80 67 74 87 73 72 91 76 -partition: 0093 total: 799 per_label: 88 71 75 78 91 89 76 74 81 76 -partition: 0094 total: 807 per_label: 93 73 73 90 81 79 81 81 84 72 -partition: 0095 total: 815 per_label: 65 90 82 84 89 81 75 97 78 74 -partition: 0096 total: 824 per_label: 84 73 88 88 78 105 84 84 60 80 -partition: 0097 total: 832 per_label: 63 97 82 72 81 89 74 82 99 93 -partition: 0098 total: 840 per_label: 87 78 80 79 77 90 112 74 84 79 -partition: 0099 total: 849 per_label: 84 96 90 83 83 73 86 82 90 82 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_015.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_015.txt deleted file mode 100644 index 53fe868f9..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_015.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_015 -number_of_examples_per_label_per_shard -partition: 0000 total: 236 per_label: 23 26 18 20 27 25 28 25 19 25 -partition: 0001 total: 239 per_label: 27 22 20 28 28 28 23 28 27 8 -partition: 0002 total: 243 per_label: 23 24 28 24 23 25 22 19 33 22 -partition: 0003 total: 247 per_label: 17 26 20 24 27 25 24 30 18 36 -partition: 0004 total: 250 per_label: 29 19 28 20 24 21 36 33 21 19 -partition: 0005 total: 254 per_label: 30 34 21 24 32 24 24 18 23 24 -partition: 0006 total: 258 per_label: 29 25 21 19 32 20 28 25 26 33 -partition: 0007 total: 262 per_label: 28 34 24 27 24 35 23 25 26 16 -partition: 0008 total: 266 per_label: 22 29 18 29 27 30 23 34 28 26 -partition: 0009 total: 270 per_label: 31 30 29 28 19 31 29 29 27 17 -partition: 0010 total: 274 per_label: 27 26 23 27 27 26 29 25 28 36 -partition: 0011 total: 278 per_label: 28 33 21 22 33 20 33 31 28 29 -partition: 0012 total: 282 per_label: 28 35 30 19 23 35 29 28 25 30 -partition: 0013 total: 286 per_label: 32 30 26 35 27 30 31 33 20 22 -partition: 0014 total: 291 per_label: 30 23 27 29 31 32 30 27 29 33 -partition: 0015 total: 295 per_label: 29 32 32 28 26 28 36 30 23 31 -partition: 0016 total: 299 per_label: 37 25 38 32 28 21 30 30 32 26 -partition: 0017 total: 304 per_label: 23 30 24 28 30 28 38 32 35 36 -partition: 0018 total: 308 per_label: 24 29 38 38 39 25 29 27 26 33 -partition: 0019 total: 313 per_label: 42 32 35 40 23 34 32 31 23 21 -partition: 0020 total: 318 per_label: 31 27 30 34 34 34 30 28 42 28 -partition: 0021 total: 322 per_label: 33 33 40 33 33 26 32 27 31 34 -partition: 0022 total: 327 per_label: 33 39 37 35 26 33 28 29 42 25 -partition: 0023 total: 332 per_label: 32 25 30 33 33 30 44 31 37 37 -partition: 0024 total: 337 per_label: 36 34 43 34 33 39 23 29 40 26 -partition: 0025 total: 342 per_label: 36 50 27 33 35 37 23 36 26 39 -partition: 0026 total: 347 per_label: 32 32 23 39 28 29 45 41 39 39 -partition: 0027 total: 353 per_label: 29 43 28 33 35 36 36 51 33 29 -partition: 0028 total: 358 per_label: 35 35 44 25 35 43 33 28 25 55 -partition: 0029 total: 363 per_label: 23 37 39 40 36 45 26 34 43 40 -partition: 0030 total: 369 per_label: 43 29 34 31 34 40 37 43 42 36 -partition: 0031 total: 374 per_label: 30 33 35 42 46 51 28 31 41 37 -partition: 0032 total: 380 per_label: 41 36 32 29 38 47 44 46 36 31 -partition: 0033 total: 386 per_label: 32 35 38 44 34 44 44 46 35 34 -partition: 0034 total: 391 per_label: 47 43 41 38 36 36 37 32 34 47 -partition: 0035 total: 397 per_label: 37 37 49 47 42 47 33 29 40 36 -partition: 0036 total: 403 per_label: 41 31 38 40 49 44 36 41 41 42 -partition: 0037 total: 409 per_label: 32 42 42 45 46 43 31 51 32 45 -partition: 0038 total: 415 per_label: 44 46 32 47 39 32 48 45 38 44 -partition: 0039 total: 422 per_label: 54 49 38 29 44 33 51 40 40 44 -partition: 0040 total: 428 per_label: 47 40 54 47 33 39 50 42 48 28 -partition: 0041 total: 434 per_label: 55 44 45 57 34 34 37 43 52 33 -partition: 0042 total: 441 per_label: 34 40 49 48 37 44 56 45 44 44 -partition: 0043 total: 448 per_label: 39 49 58 31 39 41 42 53 41 55 -partition: 0044 total: 454 per_label: 50 42 41 43 52 56 43 34 39 54 -partition: 0045 total: 461 per_label: 42 43 68 43 46 46 41 41 46 45 -partition: 0046 total: 468 per_label: 33 53 45 47 38 49 48 52 52 51 -partition: 0047 total: 475 per_label: 48 47 29 50 48 51 45 53 52 52 -partition: 0048 total: 482 per_label: 54 43 57 50 38 36 45 42 58 59 -partition: 0049 total: 490 per_label: 39 39 51 53 50 46 52 58 46 56 -partition: 0050 total: 497 per_label: 39 47 46 61 51 41 53 47 58 54 -partition: 0051 total: 504 per_label: 46 63 47 47 57 44 49 62 40 49 -partition: 0052 total: 512 per_label: 58 50 47 50 54 45 59 49 44 56 -partition: 0053 total: 520 per_label: 55 52 49 58 54 52 41 52 55 52 -partition: 0054 total: 527 per_label: 64 58 47 49 54 49 44 57 48 57 -partition: 0055 total: 535 per_label: 56 47 61 51 58 36 65 54 57 50 -partition: 0056 total: 543 per_label: 54 55 49 47 53 60 54 65 50 56 -partition: 0057 total: 552 per_label: 55 56 48 61 50 48 63 65 40 66 -partition: 0058 total: 560 per_label: 61 50 57 60 56 56 51 48 53 68 -partition: 0059 total: 568 per_label: 64 52 58 57 55 49 59 62 52 60 -partition: 0060 total: 577 per_label: 51 59 61 70 49 49 50 53 69 66 -partition: 0061 total: 585 per_label: 52 62 49 55 50 56 63 52 74 72 -partition: 0062 total: 594 per_label: 72 68 67 59 49 50 57 50 54 68 -partition: 0063 total: 603 per_label: 60 77 64 61 70 62 59 50 45 55 -partition: 0064 total: 612 per_label: 71 66 55 49 72 60 49 61 75 54 -partition: 0065 total: 621 per_label: 55 64 58 67 52 57 74 66 63 65 -partition: 0066 total: 631 per_label: 69 59 54 58 69 74 60 66 59 63 -partition: 0067 total: 640 per_label: 78 58 55 59 67 55 73 68 69 58 -partition: 0068 total: 650 per_label: 72 76 58 59 61 80 72 65 53 54 -partition: 0069 total: 659 per_label: 62 52 64 74 77 61 68 65 84 52 -partition: 0070 total: 669 per_label: 54 68 81 62 71 63 64 71 80 55 -partition: 0071 total: 679 per_label: 66 66 75 68 61 73 67 64 69 70 -partition: 0072 total: 690 per_label: 72 75 67 61 66 70 79 78 60 62 -partition: 0073 total: 700 per_label: 72 68 68 75 71 74 81 69 70 52 -partition: 0074 total: 710 per_label: 68 50 77 73 82 82 68 61 64 85 -partition: 0075 total: 721 per_label: 73 87 83 64 73 73 64 72 63 69 -partition: 0076 total: 732 per_label: 71 59 76 80 87 60 73 72 81 73 -partition: 0077 total: 743 per_label: 76 66 87 68 74 76 75 80 64 77 -partition: 0078 total: 754 per_label: 66 77 61 69 76 87 83 61 97 77 -partition: 0079 total: 765 per_label: 80 80 71 74 97 71 81 76 63 72 -partition: 0080 total: 777 per_label: 81 77 83 80 81 76 72 85 68 74 -partition: 0081 total: 789 per_label: 71 58 79 88 75 87 79 74 87 91 -partition: 0082 total: 800 per_label: 86 87 66 87 80 82 72 71 99 70 -partition: 0083 total: 812 per_label: 88 96 81 88 78 78 74 80 79 70 -partition: 0084 total: 825 per_label: 78 87 82 98 77 72 84 89 79 79 -partition: 0085 total: 837 per_label: 83 74 83 88 74 89 93 85 74 94 -partition: 0086 total: 850 per_label: 79 94 107 79 73 76 78 87 99 78 -partition: 0087 total: 862 per_label: 96 85 74 75 102 75 87 80 90 98 -partition: 0088 total: 875 per_label: 87 84 90 83 95 88 90 82 78 98 -partition: 0089 total: 888 per_label: 80 87 114 98 79 90 81 93 76 90 -partition: 0090 total: 902 per_label: 98 87 89 87 87 85 90 98 98 83 -partition: 0091 total: 915 per_label: 102 83 88 90 94 90 81 94 91 102 -partition: 0092 total: 929 per_label: 71 90 115 101 103 103 79 83 87 97 -partition: 0093 total: 943 per_label: 101 104 82 82 95 113 90 83 103 90 -partition: 0094 total: 957 per_label: 108 89 89 89 98 111 90 93 106 84 -partition: 0095 total: 971 per_label: 102 88 87 111 102 92 98 100 99 92 -partition: 0096 total: 986 per_label: 86 109 98 103 98 107 93 116 91 85 -partition: 0097 total: 1001 per_label: 90 99 110 86 102 122 100 94 90 108 -partition: 0098 total: 1016 per_label: 95 108 94 93 95 105 113 94 116 103 -partition: 0099 total: 1031 per_label: 105 107 111 107 95 92 113 97 105 99 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_020.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_020.txt deleted file mode 100644 index d8ac5a1ca..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_020.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_020 -number_of_examples_per_label_per_shard -partition: 0000 total: 173 per_label: 17 20 11 16 19 19 23 19 12 17 -partition: 0001 total: 176 per_label: 19 17 19 20 20 16 13 20 19 13 -partition: 0002 total: 180 per_label: 15 16 17 18 22 24 21 21 20 6 -partition: 0003 total: 183 per_label: 22 18 18 18 16 18 15 12 27 19 -partition: 0004 total: 187 per_label: 12 21 15 16 18 23 20 26 11 25 -partition: 0005 total: 191 per_label: 18 17 21 15 26 17 13 19 24 21 -partition: 0006 total: 194 per_label: 23 17 19 22 16 12 36 22 9 18 -partition: 0007 total: 198 per_label: 25 26 15 17 24 22 18 15 20 16 -partition: 0008 total: 202 per_label: 22 19 18 15 25 16 17 21 20 29 -partition: 0009 total: 206 per_label: 23 25 17 17 28 19 24 18 21 14 -partition: 0010 total: 211 per_label: 18 25 17 22 15 32 17 29 18 18 -partition: 0011 total: 215 per_label: 26 27 15 25 18 24 18 18 27 17 -partition: 0012 total: 219 per_label: 19 22 26 23 18 23 26 27 21 14 -partition: 0013 total: 223 per_label: 22 22 15 24 23 21 22 22 21 31 -partition: 0014 total: 228 per_label: 23 26 23 14 27 15 24 25 28 23 -partition: 0015 total: 233 per_label: 25 27 20 22 17 28 33 21 13 27 -partition: 0016 total: 237 per_label: 23 28 24 21 25 26 23 24 23 20 -partition: 0017 total: 242 per_label: 27 23 19 26 20 24 25 28 22 28 -partition: 0018 total: 247 per_label: 26 22 25 25 28 28 24 24 24 21 -partition: 0019 total: 252 per_label: 24 26 28 22 21 28 32 25 19 27 -partition: 0020 total: 257 per_label: 34 22 32 29 26 14 22 26 26 26 -partition: 0021 total: 262 per_label: 15 23 27 27 25 25 41 24 28 27 -partition: 0022 total: 267 per_label: 28 29 28 30 27 19 24 26 29 27 -partition: 0023 total: 272 per_label: 30 25 29 29 35 29 25 28 18 24 -partition: 0024 total: 278 per_label: 30 31 28 34 20 33 29 29 25 19 -partition: 0025 total: 284 per_label: 32 21 33 35 28 26 24 21 35 29 -partition: 0026 total: 289 per_label: 26 29 32 27 31 23 30 25 34 32 -partition: 0027 total: 295 per_label: 29 36 35 32 23 32 28 25 36 19 -partition: 0028 total: 301 per_label: 28 24 28 27 33 24 36 32 32 37 -partition: 0029 total: 307 per_label: 36 27 34 30 26 42 27 25 40 20 -partition: 0030 total: 313 per_label: 30 50 34 34 28 28 15 31 27 36 -partition: 0031 total: 319 per_label: 35 33 23 35 29 27 33 40 28 36 -partition: 0032 total: 326 per_label: 26 33 18 30 34 31 49 38 37 30 -partition: 0033 total: 332 per_label: 30 34 39 34 30 40 27 38 25 35 -partition: 0034 total: 339 per_label: 28 40 32 27 37 42 25 28 27 53 -partition: 0035 total: 346 per_label: 32 29 38 32 29 43 31 37 40 35 -partition: 0036 total: 353 per_label: 31 25 33 34 40 42 34 38 43 33 -partition: 0037 total: 360 per_label: 32 37 37 38 47 41 30 31 36 31 -partition: 0038 total: 367 per_label: 35 32 37 33 28 44 46 43 35 34 -partition: 0039 total: 374 per_label: 39 37 32 33 35 46 37 44 35 36 -partition: 0040 total: 382 per_label: 43 40 37 42 35 37 33 34 34 47 -partition: 0041 total: 389 per_label: 38 32 45 49 41 44 35 28 42 35 -partition: 0042 total: 397 per_label: 38 35 40 39 47 46 36 38 38 40 -partition: 0043 total: 405 per_label: 33 44 38 41 48 39 30 56 33 43 -partition: 0044 total: 413 per_label: 46 41 35 46 41 32 51 44 36 41 -partition: 0045 total: 422 per_label: 52 48 41 33 42 31 49 37 42 47 -partition: 0046 total: 430 per_label: 48 44 52 46 31 38 50 43 48 30 -partition: 0047 total: 439 per_label: 54 44 45 58 35 36 40 45 50 32 -partition: 0048 total: 447 per_label: 36 45 54 44 34 47 53 45 45 44 -partition: 0049 total: 456 per_label: 38 45 56 34 44 48 42 48 43 58 -partition: 0050 total: 465 per_label: 50 44 50 45 53 56 41 35 40 51 -partition: 0051 total: 475 per_label: 44 50 60 46 47 43 46 46 48 45 -partition: 0052 total: 484 per_label: 37 45 47 50 36 47 56 55 49 62 -partition: 0053 total: 494 per_label: 48 51 35 48 53 49 43 52 61 54 -partition: 0054 total: 504 per_label: 56 51 55 55 35 43 44 53 53 59 -partition: 0055 total: 514 per_label: 36 38 50 59 61 42 54 54 60 60 -partition: 0056 total: 524 per_label: 47 50 50 58 57 53 58 60 46 45 -partition: 0057 total: 535 per_label: 56 63 54 51 65 43 56 51 40 56 -partition: 0058 total: 545 per_label: 59 57 43 54 55 47 53 60 56 61 -partition: 0059 total: 556 per_label: 50 56 56 54 59 62 45 59 59 56 -partition: 0060 total: 568 per_label: 69 55 62 62 50 36 57 59 54 64 -partition: 0061 total: 579 per_label: 64 58 48 50 62 62 63 62 55 55 -partition: 0062 total: 590 per_label: 58 64 60 55 53 54 69 68 44 65 -partition: 0063 total: 602 per_label: 64 50 61 71 59 49 58 56 61 73 -partition: 0064 total: 614 per_label: 71 57 58 61 58 59 62 69 53 66 -partition: 0065 total: 627 per_label: 56 62 66 74 58 55 56 54 74 72 -partition: 0066 total: 639 per_label: 61 71 55 60 48 64 67 59 81 73 -partition: 0067 total: 652 per_label: 72 71 75 67 64 57 61 54 53 78 -partition: 0068 total: 665 per_label: 67 87 70 68 78 65 61 54 59 56 -partition: 0069 total: 678 per_label: 76 72 60 56 68 66 64 72 77 67 -partition: 0070 total: 692 per_label: 64 63 63 74 60 71 78 76 73 70 -partition: 0071 total: 706 per_label: 92 64 58 59 84 65 68 74 72 70 -partition: 0072 total: 720 per_label: 70 85 67 75 70 79 88 70 65 51 -partition: 0073 total: 734 per_label: 80 60 70 73 78 77 71 78 80 67 -partition: 0074 total: 749 per_label: 60 74 85 69 82 73 76 75 94 61 -partition: 0075 total: 764 per_label: 75 76 80 74 68 82 77 75 80 77 -partition: 0076 total: 779 per_label: 84 83 76 72 75 79 84 81 74 71 -partition: 0077 total: 795 per_label: 72 67 83 90 94 83 92 82 72 60 -partition: 0078 total: 811 per_label: 80 81 94 74 88 88 66 72 68 100 -partition: 0079 total: 827 per_label: 84 74 83 89 83 83 83 87 83 78 -partition: 0080 total: 844 per_label: 88 80 97 81 89 75 85 84 81 84 -partition: 0081 total: 860 per_label: 78 83 77 73 90 98 98 72 103 88 -partition: 0082 total: 878 per_label: 90 95 81 83 106 82 93 88 75 85 -partition: 0083 total: 895 per_label: 92 81 99 99 89 94 82 91 81 87 -partition: 0084 total: 913 per_label: 86 74 83 96 93 102 90 85 105 99 -partition: 0085 total: 931 per_label: 104 105 85 105 87 88 82 88 104 83 -partition: 0086 total: 950 per_label: 95 101 95 103 96 85 92 103 92 88 -partition: 0087 total: 969 per_label: 90 93 89 110 80 102 110 103 88 104 -partition: 0088 total: 988 per_label: 95 110 126 93 90 85 90 95 113 91 -partition: 0089 total: 1008 per_label: 108 98 85 86 115 93 108 97 102 116 -partition: 0090 total: 1028 per_label: 98 104 116 98 105 98 98 107 92 112 -partition: 0091 total: 1049 per_label: 114 96 122 107 99 113 102 97 100 99 -partition: 0092 total: 1070 per_label: 106 116 99 112 103 94 98 119 108 115 -partition: 0093 total: 1091 per_label: 97 90 132 118 125 119 93 102 104 111 -partition: 0094 total: 1113 per_label: 118 123 105 96 109 131 106 93 125 107 -partition: 0095 total: 1135 per_label: 119 100 101 114 116 138 110 111 120 106 -partition: 0096 total: 1158 per_label: 113 116 107 124 129 103 117 126 120 103 -partition: 0097 total: 1181 per_label: 121 116 126 119 111 143 108 130 89 118 -partition: 0098 total: 1205 per_label: 98 137 115 112 118 128 131 111 137 118 -partition: 0099 total: 1229 per_label: 127 124 132 118 114 113 134 113 131 123 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_025.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_025.txt deleted file mode 100644 index 93d21ab3b..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_025.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_025 -number_of_examples_per_label_per_shard -partition: 0000 total: 124 per_label: 14 14 4 12 12 13 19 15 9 12 -partition: 0001 total: 128 per_label: 13 13 15 12 16 12 10 13 11 13 -partition: 0002 total: 131 per_label: 13 12 13 13 16 13 12 16 16 7 -partition: 0003 total: 134 per_label: 11 13 11 15 15 20 15 15 15 4 -partition: 0004 total: 137 per_label: 12 14 16 13 15 12 10 9 20 16 -partition: 0005 total: 141 per_label: 16 17 13 12 14 16 12 15 11 15 -partition: 0006 total: 144 per_label: 11 12 12 16 14 16 18 17 10 18 -partition: 0007 total: 148 per_label: 12 14 16 10 19 14 9 17 21 16 -partition: 0008 total: 152 per_label: 17 11 16 18 9 10 31 20 7 13 -partition: 0009 total: 156 per_label: 20 21 14 12 20 13 15 12 14 15 -partition: 0010 total: 159 per_label: 19 19 11 15 23 20 11 14 16 11 -partition: 0011 total: 163 per_label: 18 15 14 11 19 9 21 14 16 26 -partition: 0012 total: 168 per_label: 20 21 15 14 22 18 17 15 16 10 -partition: 0013 total: 172 per_label: 14 23 15 20 7 27 14 21 15 16 -partition: 0014 total: 176 per_label: 15 16 11 21 20 16 16 23 21 17 -partition: 0015 total: 180 per_label: 23 25 13 19 14 27 16 16 19 8 -partition: 0016 total: 185 per_label: 19 18 24 18 17 15 20 21 14 19 -partition: 0017 total: 190 per_label: 19 16 15 18 18 18 22 17 22 25 -partition: 0018 total: 194 per_label: 18 23 18 13 24 12 19 23 24 20 -partition: 0019 total: 199 per_label: 19 22 17 18 14 28 26 21 10 24 -partition: 0020 total: 204 per_label: 21 28 21 15 19 19 21 18 23 19 -partition: 0021 total: 209 per_label: 24 19 15 25 23 23 22 24 18 16 -partition: 0022 total: 215 per_label: 25 18 19 22 19 18 24 20 20 30 -partition: 0023 total: 220 per_label: 23 22 20 23 18 29 26 25 18 16 -partition: 0024 total: 226 per_label: 23 24 28 22 27 17 24 23 16 22 -partition: 0025 total: 231 per_label: 28 18 33 23 20 19 21 22 25 22 -partition: 0026 total: 237 per_label: 12 23 22 24 23 20 37 20 28 28 -partition: 0027 total: 243 per_label: 24 25 25 28 26 18 21 24 26 26 -partition: 0028 total: 249 per_label: 29 21 28 26 32 26 24 25 16 22 -partition: 0029 total: 255 per_label: 29 30 28 33 15 29 25 27 21 18 -partition: 0030 total: 262 per_label: 25 22 25 29 31 28 20 21 35 26 -partition: 0031 total: 268 per_label: 23 22 34 32 29 21 27 27 26 27 -partition: 0032 total: 275 per_label: 33 39 30 26 23 30 27 17 29 21 -partition: 0033 total: 282 per_label: 28 23 34 24 22 24 32 31 37 27 -partition: 0034 total: 289 per_label: 28 26 29 30 26 32 33 23 36 26 -partition: 0035 total: 296 per_label: 32 28 34 34 33 28 20 28 33 26 -partition: 0036 total: 303 per_label: 31 45 22 29 30 32 20 38 21 35 -partition: 0037 total: 311 per_label: 30 29 21 34 27 26 40 30 37 37 -partition: 0038 total: 319 per_label: 26 41 20 31 24 35 39 45 30 28 -partition: 0039 total: 327 per_label: 31 33 43 25 36 37 23 29 26 44 -partition: 0040 total: 335 per_label: 24 32 35 34 35 44 23 30 35 43 -partition: 0041 total: 343 per_label: 36 28 33 30 36 35 38 40 31 36 -partition: 0042 total: 352 per_label: 27 29 31 35 37 46 34 35 44 34 -partition: 0043 total: 361 per_label: 37 37 39 34 39 45 27 38 38 27 -partition: 0044 total: 370 per_label: 34 33 38 37 33 40 48 36 36 35 -partition: 0045 total: 379 per_label: 42 39 29 34 37 41 35 44 33 45 -partition: 0046 total: 389 per_label: 42 37 46 42 35 43 37 29 40 38 -partition: 0047 total: 398 per_label: 41 32 41 50 45 43 36 34 40 36 -partition: 0048 total: 408 per_label: 37 38 41 41 48 46 35 46 34 42 -partition: 0049 total: 419 per_label: 37 43 40 44 45 40 39 50 31 50 -partition: 0050 total: 429 per_label: 46 47 34 43 46 34 50 46 44 39 -partition: 0051 total: 440 per_label: 54 47 47 41 41 35 50 42 45 38 -partition: 0052 total: 451 per_label: 55 44 56 51 32 39 48 45 51 30 -partition: 0053 total: 462 per_label: 47 41 49 58 42 41 47 46 48 43 -partition: 0054 total: 474 per_label: 35 56 59 39 34 45 50 56 44 56 -partition: 0055 total: 485 per_label: 44 51 50 37 51 58 42 40 46 66 -partition: 0056 total: 498 per_label: 53 43 66 50 51 49 54 42 47 43 -partition: 0057 total: 510 per_label: 38 56 48 51 46 56 46 54 59 56 -partition: 0058 total: 523 per_label: 52 51 35 54 49 55 51 59 57 60 -partition: 0059 total: 536 per_label: 59 51 61 58 40 38 51 52 61 65 -partition: 0060 total: 549 per_label: 41 43 55 64 63 46 56 57 59 65 -partition: 0061 total: 563 per_label: 50 54 54 59 61 58 61 66 52 48 -partition: 0062 total: 577 per_label: 59 68 59 58 67 46 59 55 44 62 -partition: 0063 total: 592 per_label: 67 61 46 57 61 58 57 63 60 62 -partition: 0064 total: 606 per_label: 60 62 63 59 61 58 51 65 63 64 -partition: 0065 total: 622 per_label: 74 57 66 62 63 42 71 61 64 62 -partition: 0066 total: 637 per_label: 66 71 58 56 62 69 62 73 54 66 -partition: 0067 total: 653 per_label: 64 62 55 71 58 57 73 74 57 82 -partition: 0068 total: 669 per_label: 71 64 68 70 67 61 64 64 59 81 -partition: 0069 total: 686 per_label: 68 61 75 79 64 68 60 69 73 69 -partition: 0070 total: 703 per_label: 63 76 58 72 56 61 76 64 91 86 -partition: 0071 total: 721 per_label: 85 76 84 73 68 64 72 57 63 79 -partition: 0072 total: 739 per_label: 73 95 80 71 85 73 68 66 62 66 -partition: 0073 total: 757 per_label: 83 79 65 66 72 76 76 77 89 74 -partition: 0074 total: 776 per_label: 80 70 69 77 80 72 84 89 79 76 -partition: 0075 total: 796 per_label: 97 83 68 73 84 80 82 76 78 75 -partition: 0076 total: 816 per_label: 88 82 77 83 80 100 85 83 71 67 -partition: 0077 total: 836 per_label: 69 72 92 78 103 68 85 83 115 71 -partition: 0078 total: 857 per_label: 78 88 95 89 72 93 88 85 89 80 -partition: 0079 total: 878 per_label: 98 95 82 76 82 89 97 94 83 82 -partition: 0080 total: 900 per_label: 80 77 92 100 108 100 99 93 85 66 -partition: 0081 total: 923 per_label: 88 94 104 84 98 98 83 83 78 113 -partition: 0082 total: 946 per_label: 100 83 101 100 102 83 95 92 101 89 -partition: 0083 total: 970 per_label: 96 91 114 87 93 97 97 97 98 100 -partition: 0084 total: 994 per_label: 93 100 77 99 122 111 104 82 106 100 -partition: 0085 total: 1019 per_label: 109 104 105 97 109 96 99 114 86 100 -partition: 0086 total: 1044 per_label: 99 84 104 116 98 117 108 96 116 106 -partition: 0087 total: 1070 per_label: 117 118 97 119 103 105 93 106 114 98 -partition: 0088 total: 1097 per_label: 106 124 105 124 105 96 114 114 106 103 -partition: 0089 total: 1125 per_label: 110 103 121 115 96 118 123 110 112 117 -partition: 0090 total: 1153 per_label: 119 118 120 113 118 93 105 117 121 129 -partition: 0091 total: 1182 per_label: 116 120 117 106 134 123 122 106 115 123 -partition: 0092 total: 1211 per_label: 125 111 152 123 109 122 111 131 109 118 -partition: 0093 total: 1241 per_label: 127 137 108 124 121 113 119 134 127 131 -partition: 0094 total: 1272 per_label: 111 112 156 134 141 138 108 117 124 131 -partition: 0095 total: 1304 per_label: 142 134 119 112 123 162 133 116 149 114 -partition: 0096 total: 1337 per_label: 151 122 122 143 143 136 126 126 138 130 -partition: 0097 total: 1370 per_label: 122 138 137 140 150 146 124 163 122 128 -partition: 0098 total: 1405 per_label: 120 158 136 131 131 153 149 137 147 143 -partition: 0099 total: 1440 per_label: 147 143 152 142 134 141 161 130 149 141 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_030.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_030.txt deleted file mode 100644 index c201dd9ed..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_030.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_030 -number_of_examples_per_label_per_shard -partition: 0000 total: 89 per_label: 12 11 3 11 11 8 10 7 5 11 -partition: 0001 total: 91 per_label: 5 11 8 6 10 11 13 12 9 6 -partition: 0002 total: 94 per_label: 10 8 9 11 9 8 8 12 9 10 -partition: 0003 total: 97 per_label: 10 9 11 9 12 11 8 13 11 3 -partition: 0004 total: 100 per_label: 11 9 7 11 13 14 12 8 12 3 -partition: 0005 total: 103 per_label: 7 13 13 10 10 11 9 9 14 7 -partition: 0006 total: 106 per_label: 12 9 10 7 10 10 9 9 15 15 -partition: 0007 total: 109 per_label: 12 13 11 12 12 13 9 10 6 11 -partition: 0008 total: 112 per_label: 6 9 8 11 8 15 14 19 8 14 -partition: 0009 total: 116 per_label: 10 10 12 11 16 8 9 10 18 12 -partition: 0010 total: 119 per_label: 15 10 11 8 12 11 12 18 7 15 -partition: 0011 total: 123 per_label: 12 12 14 15 11 8 25 11 7 8 -partition: 0012 total: 126 per_label: 15 16 13 9 15 9 13 11 12 13 -partition: 0013 total: 130 per_label: 19 14 8 12 19 15 9 11 15 8 -partition: 0014 total: 134 per_label: 14 14 11 10 14 14 13 10 11 23 -partition: 0015 total: 138 per_label: 19 15 15 9 19 7 18 11 15 10 -partition: 0016 total: 142 per_label: 10 22 12 17 14 19 12 15 11 10 -partition: 0017 total: 147 per_label: 12 15 10 16 7 24 13 21 15 14 -partition: 0018 total: 151 per_label: 14 13 10 18 18 13 14 19 16 16 -partition: 0019 total: 156 per_label: 21 26 10 15 10 22 14 13 18 7 -partition: 0020 total: 160 per_label: 13 12 22 18 16 15 17 19 15 13 -partition: 0021 total: 165 per_label: 16 18 13 16 17 13 20 15 16 21 -partition: 0022 total: 170 per_label: 18 19 14 14 16 15 16 19 20 19 -partition: 0023 total: 175 per_label: 20 18 14 13 20 13 23 15 17 22 -partition: 0024 total: 180 per_label: 18 22 17 16 15 25 20 18 12 17 -partition: 0025 total: 186 per_label: 19 23 21 13 17 21 16 22 18 16 -partition: 0026 total: 191 per_label: 20 16 16 25 20 19 20 20 16 19 -partition: 0027 total: 197 per_label: 23 17 15 19 18 17 23 19 20 26 -partition: 0028 total: 203 per_label: 20 21 19 20 17 27 23 23 18 15 -partition: 0029 total: 209 per_label: 19 22 28 19 21 19 25 20 14 22 -partition: 0030 total: 216 per_label: 30 17 27 25 25 13 17 21 22 19 -partition: 0031 total: 222 per_label: 13 21 22 20 22 21 35 21 25 22 -partition: 0032 total: 229 per_label: 23 21 24 23 20 18 23 22 25 30 -partition: 0033 total: 236 per_label: 18 25 25 29 31 20 21 23 22 22 -partition: 0034 total: 243 per_label: 31 24 29 29 20 27 23 26 15 19 -partition: 0035 total: 250 per_label: 26 26 24 29 29 27 23 22 27 17 -partition: 0036 total: 257 per_label: 31 19 28 33 20 25 27 22 26 26 -partition: 0037 total: 265 per_label: 22 30 32 25 25 23 24 22 34 28 -partition: 0038 total: 273 per_label: 27 32 30 28 22 27 27 25 36 19 -partition: 0039 total: 281 per_label: 26 21 28 25 32 22 34 29 30 34 -partition: 0040 total: 290 per_label: 34 25 29 27 25 40 28 23 38 21 -partition: 0041 total: 299 per_label: 28 46 36 35 27 26 14 27 27 33 -partition: 0042 total: 308 per_label: 37 33 22 29 28 26 31 39 27 36 -partition: 0043 total: 317 per_label: 25 34 17 31 31 32 46 36 35 30 -partition: 0044 total: 326 per_label: 30 35 33 35 28 35 27 43 27 33 -partition: 0045 total: 336 per_label: 27 38 37 24 38 41 30 26 23 52 -partition: 0046 total: 346 per_label: 26 30 38 39 32 45 26 34 42 34 -partition: 0047 total: 357 per_label: 41 28 33 29 34 40 35 41 42 34 -partition: 0048 total: 367 per_label: 29 32 39 43 50 47 27 28 38 34 -partition: 0049 total: 378 per_label: 38 34 33 29 33 46 45 49 37 34 -partition: 0050 total: 390 per_label: 37 39 37 38 33 45 45 46 34 36 -partition: 0051 total: 401 per_label: 45 43 40 43 39 39 34 33 36 49 -partition: 0052 total: 413 per_label: 40 33 47 52 43 48 36 32 45 37 -partition: 0053 total: 426 per_label: 40 36 42 42 56 46 38 42 40 44 -partition: 0054 total: 439 per_label: 44 51 42 40 47 44 35 56 33 47 -partition: 0055 total: 452 per_label: 46 42 39 51 46 33 56 49 44 46 -partition: 0056 total: 465 per_label: 57 52 46 43 43 39 53 42 49 41 -partition: 0057 total: 479 per_label: 57 47 60 55 34 42 52 50 51 31 -partition: 0058 total: 494 per_label: 51 44 51 60 44 44 50 47 52 51 -partition: 0059 total: 509 per_label: 39 63 66 38 40 47 53 56 47 60 -partition: 0060 total: 524 per_label: 55 48 48 48 57 63 52 44 49 60 -partition: 0061 total: 540 per_label: 50 56 74 52 53 54 46 49 55 51 -partition: 0062 total: 556 per_label: 43 56 53 57 43 58 64 58 54 70 -partition: 0063 total: 573 per_label: 56 52 46 59 57 53 47 63 74 66 -partition: 0064 total: 590 per_label: 60 52 58 63 52 53 63 65 64 60 -partition: 0065 total: 607 per_label: 46 53 64 72 66 51 64 57 64 70 -partition: 0066 total: 626 per_label: 59 74 62 58 74 53 63 73 50 60 -partition: 0067 total: 644 per_label: 74 68 50 64 69 59 65 68 58 69 -partition: 0068 total: 664 per_label: 69 67 65 64 68 72 53 67 69 70 -partition: 0069 total: 684 per_label: 80 65 74 74 68 42 78 68 70 65 -partition: 0070 total: 704 per_label: 74 74 65 58 69 75 69 85 58 77 -partition: 0071 total: 725 per_label: 71 66 67 87 70 63 80 71 62 88 -partition: 0072 total: 747 per_label: 83 69 76 73 68 70 75 83 69 81 -partition: 0073 total: 770 per_label: 74 77 80 88 64 71 71 67 90 88 -partition: 0074 total: 793 per_label: 82 85 73 79 70 67 84 71 93 89 -partition: 0075 total: 816 per_label: 81 102 90 80 89 82 76 66 63 87 -partition: 0076 total: 841 per_label: 92 95 78 78 90 83 73 85 89 78 -partition: 0077 total: 866 per_label: 86 81 79 82 77 84 95 98 96 88 -partition: 0078 total: 892 per_label: 108 85 76 81 100 89 98 87 89 79 -partition: 0079 total: 919 per_label: 98 90 86 96 93 107 96 95 82 76 -partition: 0080 total: 947 per_label: 76 90 106 90 107 86 91 96 126 79 -partition: 0081 total: 975 per_label: 92 100 102 95 86 103 103 101 98 95 -partition: 0082 total: 1004 per_label: 106 102 102 100 95 107 114 102 94 82 -partition: 0083 total: 1034 per_label: 98 85 116 109 124 111 99 89 87 116 -partition: 0084 total: 1065 per_label: 112 101 105 100 116 104 107 111 107 102 -partition: 0085 total: 1097 per_label: 109 108 130 100 111 101 104 107 115 112 -partition: 0086 total: 1130 per_label: 100 114 89 112 135 128 122 99 120 111 -partition: 0087 total: 1164 per_label: 127 114 126 120 115 113 117 124 95 113 -partition: 0088 total: 1199 per_label: 116 112 112 126 122 124 116 108 142 121 -partition: 0089 total: 1235 per_label: 136 130 119 138 120 113 111 124 128 116 -partition: 0090 total: 1272 per_label: 115 126 114 142 112 135 140 140 115 133 -partition: 0091 total: 1311 per_label: 137 135 159 127 125 111 118 123 148 128 -partition: 0092 total: 1350 per_label: 136 139 128 120 151 132 145 125 122 152 -partition: 0093 total: 1390 per_label: 140 132 163 139 128 144 133 147 132 132 -partition: 0094 total: 1432 per_label: 151 135 139 147 144 132 130 153 147 154 -partition: 0095 total: 1475 per_label: 133 146 158 153 155 170 131 134 148 147 -partition: 0096 total: 1519 per_label: 162 151 144 139 156 172 147 139 166 143 -partition: 0097 total: 1565 per_label: 153 158 152 169 164 153 149 176 155 136 -partition: 0098 total: 1612 per_label: 143 168 164 153 155 190 154 155 158 172 -partition: 0099 total: 1660 per_label: 167 171 167 158 158 159 195 156 170 159 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_035.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_035.txt deleted file mode 100644 index 29778c4b7..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_035.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_035 -number_of_examples_per_label_per_shard -partition: 0000 total: 62 per_label: 10 6 2 8 8 6 9 6 1 6 -partition: 0001 total: 64 per_label: 4 8 2 4 4 8 10 10 8 6 -partition: 0002 total: 67 per_label: 5 9 8 7 11 5 5 5 7 5 -partition: 0003 total: 69 per_label: 8 5 7 7 5 7 6 9 5 10 -partition: 0004 total: 71 per_label: 8 9 10 7 8 6 6 7 8 2 -partition: 0005 total: 74 per_label: 5 4 5 9 11 10 6 10 11 3 -partition: 0006 total: 77 per_label: 10 7 7 6 10 11 10 7 7 2 -partition: 0007 total: 79 per_label: 4 10 8 8 7 9 8 7 12 6 -partition: 0008 total: 82 per_label: 8 7 9 7 8 8 4 7 12 12 -partition: 0009 total: 85 per_label: 12 11 9 10 7 9 9 4 8 6 -partition: 0010 total: 88 per_label: 6 9 6 8 10 12 8 14 4 11 -partition: 0011 total: 91 per_label: 6 8 7 7 11 10 11 13 6 12 -partition: 0012 total: 94 per_label: 6 6 12 11 10 7 8 8 15 11 -partition: 0013 total: 97 per_label: 13 10 10 5 11 9 6 12 9 12 -partition: 0014 total: 101 per_label: 14 6 9 10 8 6 23 14 5 6 -partition: 0015 total: 104 per_label: 10 15 11 11 11 8 14 7 6 11 -partition: 0016 total: 108 per_label: 12 16 12 9 11 11 9 9 11 8 -partition: 0017 total: 112 per_label: 15 10 4 9 19 13 9 12 14 7 -partition: 0018 total: 116 per_label: 13 12 8 9 12 10 12 9 10 21 -partition: 0019 total: 120 per_label: 13 11 15 10 14 8 17 9 11 12 -partition: 0020 total: 124 per_label: 14 17 9 11 18 13 10 13 12 7 -partition: 0021 total: 129 per_label: 12 16 12 15 6 20 12 15 12 9 -partition: 0022 total: 133 per_label: 11 11 9 16 12 17 9 22 10 16 -partition: 0023 total: 138 per_label: 15 20 10 15 12 11 12 10 23 10 -partition: 0024 total: 143 per_label: 16 18 10 15 11 22 14 16 14 7 -partition: 0025 total: 148 per_label: 15 14 21 15 14 12 17 14 9 17 -partition: 0026 total: 153 per_label: 13 15 11 14 16 14 17 17 17 19 -partition: 0027 total: 158 per_label: 18 18 14 13 14 12 17 17 20 15 -partition: 0028 total: 164 per_label: 16 18 12 13 20 13 21 14 15 22 -partition: 0029 total: 169 per_label: 17 19 17 15 14 22 21 18 9 17 -partition: 0030 total: 175 per_label: 17 23 20 12 16 20 14 18 19 16 -partition: 0031 total: 182 per_label: 21 17 10 21 20 21 20 22 14 16 -partition: 0032 total: 188 per_label: 21 18 19 18 19 16 18 15 19 25 -partition: 0033 total: 194 per_label: 19 17 19 23 18 22 21 23 18 14 -partition: 0034 total: 201 per_label: 16 20 24 19 16 23 24 20 16 23 -partition: 0035 total: 208 per_label: 29 22 26 21 23 10 22 17 19 19 -partition: 0036 total: 216 per_label: 22 14 26 20 21 18 29 28 23 15 -partition: 0037 total: 223 per_label: 17 25 18 24 15 20 25 20 28 31 -partition: 0038 total: 231 per_label: 16 23 30 30 29 18 21 21 21 22 -partition: 0039 total: 239 per_label: 30 23 22 23 30 30 23 23 13 22 -partition: 0040 total: 248 per_label: 27 26 26 31 18 27 28 27 23 15 -partition: 0041 total: 256 per_label: 27 19 25 32 26 23 24 19 35 26 -partition: 0042 total: 265 per_label: 20 24 37 28 30 23 22 25 27 29 -partition: 0043 total: 275 per_label: 35 37 28 27 21 29 29 20 28 21 -partition: 0044 total: 284 per_label: 27 23 32 23 30 21 32 33 35 28 -partition: 0045 total: 294 per_label: 32 27 27 31 23 38 31 23 38 24 -partition: 0046 total: 304 per_label: 28 38 39 34 30 27 16 27 30 35 -partition: 0047 total: 315 per_label: 35 42 22 29 33 30 26 39 27 32 -partition: 0048 total: 326 per_label: 27 30 20 36 25 32 46 35 39 36 -partition: 0049 total: 338 per_label: 37 38 27 33 33 35 32 44 29 30 -partition: 0050 total: 349 per_label: 25 36 45 24 39 42 32 29 22 55 -partition: 0051 total: 362 per_label: 27 35 36 43 33 46 25 35 45 37 -partition: 0052 total: 374 per_label: 42 29 35 30 35 42 38 43 44 36 -partition: 0053 total: 387 per_label: 31 35 40 44 52 50 28 32 40 35 -partition: 0054 total: 401 per_label: 39 37 39 33 33 48 51 48 37 36 -partition: 0055 total: 415 per_label: 44 41 36 40 39 47 42 48 39 39 -partition: 0056 total: 430 per_label: 46 45 49 42 41 43 38 32 42 52 -partition: 0057 total: 445 per_label: 47 37 44 57 49 48 40 37 44 42 -partition: 0058 total: 460 per_label: 39 43 47 47 56 49 40 53 38 48 -partition: 0059 total: 476 per_label: 43 50 43 51 46 47 46 55 40 55 -partition: 0060 total: 493 per_label: 61 57 43 41 52 36 60 48 48 47 -partition: 0061 total: 510 per_label: 58 49 62 53 39 43 58 51 59 38 -partition: 0062 total: 528 per_label: 60 49 56 70 45 47 50 56 58 37 -partition: 0063 total: 547 per_label: 43 61 65 50 46 53 63 57 52 57 -partition: 0064 total: 566 per_label: 52 57 62 45 57 63 50 50 51 79 -partition: 0065 total: 586 per_label: 62 54 76 57 62 59 55 51 57 53 -partition: 0066 total: 606 per_label: 48 64 55 61 46 64 66 66 62 74 -partition: 0067 total: 628 per_label: 69 58 52 68 58 56 53 62 82 70 -partition: 0068 total: 650 per_label: 53 54 72 67 66 59 69 74 62 74 -partition: 0069 total: 672 per_label: 57 63 61 79 74 62 68 75 68 65 -partition: 0070 total: 696 per_label: 74 83 69 69 74 58 75 63 58 73 -partition: 0071 total: 720 per_label: 74 72 59 70 78 73 63 81 74 76 -partition: 0072 total: 745 per_label: 81 73 81 76 73 53 75 78 75 80 -partition: 0073 total: 772 per_label: 85 78 70 66 76 81 82 86 74 74 -partition: 0074 total: 799 per_label: 83 79 71 88 73 70 85 86 64 100 -partition: 0075 total: 827 per_label: 91 76 86 84 79 74 83 87 75 92 -partition: 0076 total: 855 per_label: 82 86 90 97 75 80 80 74 95 96 -partition: 0077 total: 885 per_label: 95 96 83 85 77 73 92 78 103 103 -partition: 0078 total: 916 per_label: 87 112 103 93 107 96 80 80 73 85 -partition: 0079 total: 949 per_label: 102 101 85 87 87 91 98 96 109 93 -partition: 0080 total: 982 per_label: 111 84 83 90 113 102 93 107 100 99 -partition: 0081 total: 1016 per_label: 111 115 90 95 94 113 120 102 90 86 -partition: 0082 total: 1052 per_label: 94 86 116 107 126 92 102 108 135 86 -partition: 0083 total: 1089 per_label: 102 117 116 106 94 117 112 107 115 103 -partition: 0084 total: 1127 per_label: 117 112 112 115 107 120 127 122 103 92 -partition: 0085 total: 1166 per_label: 111 106 128 115 140 123 107 106 102 128 -partition: 0086 total: 1207 per_label: 122 113 126 125 128 115 124 122 120 112 -partition: 0087 total: 1249 per_label: 116 119 128 110 127 130 135 113 142 129 -partition: 0088 total: 1293 per_label: 137 129 121 122 156 133 119 131 117 128 -partition: 0089 total: 1338 per_label: 131 117 136 144 126 140 142 129 135 138 -partition: 0090 total: 1385 per_label: 146 156 123 160 136 130 122 138 150 124 -partition: 0091 total: 1434 per_label: 137 142 139 158 130 149 152 145 134 148 -partition: 0092 total: 1484 per_label: 153 149 173 143 139 123 145 144 163 152 -partition: 0093 total: 1536 per_label: 151 159 153 136 169 151 154 153 142 168 -partition: 0094 total: 1589 per_label: 162 149 174 168 153 152 157 167 156 151 -partition: 0095 total: 1645 per_label: 156 158 180 171 169 174 142 165 155 175 -partition: 0096 total: 1703 per_label: 177 173 163 152 167 201 164 151 196 159 -partition: 0097 total: 1762 per_label: 183 166 155 192 201 176 170 178 174 167 -partition: 0098 total: 1824 per_label: 167 191 196 173 173 212 172 193 166 181 -partition: 0099 total: 1888 per_label: 184 198 190 182 176 182 213 174 203 186 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_040.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_040.txt deleted file mode 100644 index 16c1eb6f7..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_040.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_040 -number_of_examples_per_label_per_shard -partition: 0000 total: 43 per_label: 6 4 1 7 5 4 6 4 1 5 -partition: 0001 total: 45 per_label: 5 7 2 4 6 4 4 3 4 6 -partition: 0002 total: 47 per_label: 3 5 2 2 3 7 10 10 4 1 -partition: 0003 total: 49 per_label: 3 6 6 5 8 4 4 2 6 5 -partition: 0004 total: 51 per_label: 6 4 7 2 5 6 4 6 3 8 -partition: 0005 total: 53 per_label: 5 7 4 9 3 2 4 9 8 2 -partition: 0006 total: 55 per_label: 7 4 8 6 8 7 4 5 4 2 -partition: 0007 total: 57 per_label: 5 3 3 5 9 7 5 8 9 3 -partition: 0008 total: 59 per_label: 7 8 3 7 7 9 7 4 6 1 -partition: 0009 total: 62 per_label: 4 5 8 6 5 8 8 9 6 3 -partition: 0010 total: 64 per_label: 8 9 7 5 6 7 6 1 10 5 -partition: 0011 total: 67 per_label: 4 4 8 7 7 5 4 7 10 11 -partition: 0012 total: 69 per_label: 10 7 7 7 6 8 7 4 8 5 -partition: 0013 total: 72 per_label: 6 10 6 5 10 8 5 10 3 9 -partition: 0014 total: 75 per_label: 5 5 5 8 4 11 10 12 5 10 -partition: 0015 total: 78 per_label: 6 8 7 8 11 5 9 7 5 12 -partition: 0016 total: 81 per_label: 7 6 8 7 10 7 4 11 15 6 -partition: 0017 total: 85 per_label: 10 9 10 5 9 9 6 10 6 11 -partition: 0018 total: 88 per_label: 11 4 9 9 7 5 22 11 5 5 -partition: 0019 total: 92 per_label: 10 13 9 11 10 6 13 6 5 9 -partition: 0020 total: 95 per_label: 9 12 10 6 10 9 9 10 11 9 -partition: 0021 total: 99 per_label: 14 12 6 11 13 13 8 6 9 7 -partition: 0022 total: 103 per_label: 11 11 6 7 16 8 8 12 12 12 -partition: 0023 total: 107 per_label: 13 9 13 8 9 8 13 8 8 18 -partition: 0024 total: 111 per_label: 16 15 10 6 16 7 13 10 13 5 -partition: 0025 total: 116 per_label: 6 16 10 16 12 18 10 11 9 8 -partition: 0026 total: 121 per_label: 13 15 10 12 6 17 11 15 11 11 -partition: 0027 total: 125 per_label: 11 7 9 15 14 15 9 18 11 16 -partition: 0028 total: 130 per_label: 16 20 8 13 9 16 10 11 20 7 -partition: 0029 total: 136 per_label: 13 18 9 17 12 16 14 16 14 7 -partition: 0030 total: 141 per_label: 15 12 21 13 13 12 17 13 9 16 -partition: 0031 total: 147 per_label: 13 14 11 13 16 13 17 16 16 18 -partition: 0032 total: 153 per_label: 15 19 12 13 14 13 15 17 19 16 -partition: 0033 total: 159 per_label: 19 13 14 11 19 13 20 15 16 19 -partition: 0034 total: 165 per_label: 15 23 15 16 12 22 20 18 7 17 -partition: 0035 total: 172 per_label: 15 22 18 10 17 19 16 17 21 17 -partition: 0036 total: 179 per_label: 19 18 11 22 20 20 20 20 12 17 -partition: 0037 total: 186 per_label: 24 14 17 20 19 14 19 17 18 24 -partition: 0038 total: 193 per_label: 19 18 24 21 18 23 19 21 18 12 -partition: 0039 total: 201 per_label: 18 19 19 19 16 20 26 21 20 23 -partition: 0040 total: 209 per_label: 27 24 25 21 23 13 20 19 16 21 -partition: 0041 total: 218 per_label: 25 16 28 21 19 21 28 24 22 14 -partition: 0042 total: 226 per_label: 15 25 19 24 18 18 28 22 28 29 -partition: 0043 total: 235 per_label: 17 23 31 30 28 20 22 17 22 25 -partition: 0044 total: 245 per_label: 30 21 23 24 31 27 23 29 15 22 -partition: 0045 total: 255 per_label: 28 28 27 31 19 29 28 24 24 17 -partition: 0046 total: 265 per_label: 28 21 25 33 26 24 24 23 35 26 -partition: 0047 total: 275 per_label: 24 23 38 28 32 23 24 25 28 30 -partition: 0048 total: 286 per_label: 33 39 32 28 20 31 29 22 31 21 -partition: 0049 total: 298 per_label: 28 24 29 28 32 21 34 32 39 31 -partition: 0050 total: 310 per_label: 33 28 31 30 27 42 32 25 38 24 -partition: 0051 total: 322 per_label: 31 46 38 35 30 30 15 27 32 38 -partition: 0052 total: 335 per_label: 38 38 23 36 29 28 32 43 29 39 -partition: 0053 total: 349 per_label: 27 35 20 34 36 36 51 42 37 31 -partition: 0054 total: 363 per_label: 35 39 43 34 34 42 28 41 28 39 -partition: 0055 total: 377 per_label: 30 39 37 31 39 51 27 32 35 56 -partition: 0056 total: 392 per_label: 38 32 42 38 39 40 41 43 38 41 -partition: 0057 total: 408 per_label: 29 34 34 45 44 55 34 40 55 38 -partition: 0058 total: 424 per_label: 45 41 42 32 45 51 43 46 43 36 -partition: 0059 total: 441 per_label: 42 41 41 49 39 50 51 54 37 37 -partition: 0060 total: 459 per_label: 53 49 47 44 44 46 41 38 40 57 -partition: 0061 total: 477 per_label: 50 39 54 59 51 52 43 35 52 42 -partition: 0062 total: 496 per_label: 43 49 50 50 59 52 43 55 41 54 -partition: 0063 total: 516 per_label: 49 51 49 54 51 48 50 61 44 59 -partition: 0064 total: 537 per_label: 65 61 46 45 56 40 66 53 54 51 -partition: 0065 total: 558 per_label: 66 53 70 62 41 51 58 55 68 34 -partition: 0066 total: 581 per_label: 61 52 59 74 54 51 62 57 54 57 -partition: 0067 total: 604 per_label: 45 69 74 46 48 63 60 68 63 68 -partition: 0068 total: 628 per_label: 66 59 73 57 67 69 63 56 54 64 -partition: 0069 total: 653 per_label: 51 72 70 68 59 69 59 60 71 74 -partition: 0070 total: 680 per_label: 69 64 53 67 64 62 68 73 79 81 -partition: 0071 total: 707 per_label: 69 62 73 77 62 64 69 77 76 78 -partition: 0072 total: 735 per_label: 58 67 75 86 80 66 76 75 72 80 -partition: 0073 total: 765 per_label: 82 89 75 75 85 64 80 75 63 77 -partition: 0074 total: 795 per_label: 82 80 67 74 89 83 71 91 77 81 -partition: 0075 total: 827 per_label: 91 82 89 85 75 55 82 89 89 90 -partition: 0076 total: 860 per_label: 94 87 76 76 88 91 94 96 71 87 -partition: 0077 total: 894 per_label: 90 81 90 100 87 82 89 86 80 109 -partition: 0078 total: 930 per_label: 93 87 96 103 86 85 86 96 92 106 -partition: 0079 total: 968 per_label: 93 105 90 96 75 86 105 90 120 108 -partition: 0080 total: 1006 per_label: 112 122 109 101 109 92 97 79 80 105 -partition: 0081 total: 1046 per_label: 110 114 98 95 103 110 98 105 118 95 -partition: 0082 total: 1088 per_label: 117 99 95 103 121 107 106 117 111 112 -partition: 0083 total: 1132 per_label: 130 123 99 108 105 123 132 113 101 98 -partition: 0084 total: 1177 per_label: 101 104 132 120 136 104 115 123 151 91 -partition: 0085 total: 1224 per_label: 117 130 128 113 115 131 131 126 118 115 -partition: 0086 total: 1273 per_label: 129 108 123 134 140 139 138 125 125 112 -partition: 0087 total: 1324 per_label: 131 136 142 125 134 136 122 135 119 144 -partition: 0088 total: 1377 per_label: 141 123 162 134 146 125 138 125 142 141 -partition: 0089 total: 1432 per_label: 137 149 120 135 167 149 159 137 141 138 -partition: 0090 total: 1490 per_label: 145 125 155 163 147 159 143 149 145 159 -partition: 0091 total: 1549 per_label: 167 173 137 171 152 153 140 150 172 134 -partition: 0092 total: 1611 per_label: 155 155 161 179 143 159 173 168 148 170 -partition: 0093 total: 1676 per_label: 171 175 181 157 175 141 156 162 186 172 -partition: 0094 total: 1743 per_label: 167 176 197 166 174 175 176 175 147 190 -partition: 0095 total: 1813 per_label: 195 176 179 182 168 175 172 190 197 179 -partition: 0096 total: 1885 per_label: 175 183 199 189 211 215 166 173 188 186 -partition: 0097 total: 1960 per_label: 222 185 184 195 195 213 192 182 211 181 -partition: 0098 total: 2039 per_label: 178 214 212 198 207 230 199 222 176 203 -partition: 0099 total: 2121 per_label: 205 220 210 208 201 208 232 197 235 205 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_045.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_045.txt deleted file mode 100644 index d7e7bc9f6..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-b1_045.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-b1_045 -number_of_examples_per_label_per_shard -partition: 0000 total: 30 per_label: 2 4 1 6 3 3 6 2 0 3 -partition: 0001 total: 31 per_label: 7 2 1 2 5 3 3 4 1 3 -partition: 0002 total: 32 per_label: 3 5 2 3 3 2 2 2 5 5 -partition: 0003 total: 34 per_label: 2 3 0 2 1 6 8 8 3 1 -partition: 0004 total: 35 per_label: 3 5 6 2 5 4 3 2 2 3 -partition: 0005 total: 37 per_label: 3 4 3 4 7 1 2 3 5 5 -partition: 0006 total: 39 per_label: 3 3 6 2 3 6 4 4 3 5 -partition: 0007 total: 41 per_label: 4 6 1 7 3 2 3 8 5 2 -partition: 0008 total: 42 per_label: 7 4 8 4 4 3 3 4 3 2 -partition: 0009 total: 44 per_label: 3 1 3 4 7 7 4 7 7 1 -partition: 0010 total: 46 per_label: 4 4 3 6 7 6 4 4 6 2 -partition: 0011 total: 48 per_label: 6 7 2 5 6 7 6 3 5 1 -partition: 0012 total: 51 per_label: 4 3 7 5 5 5 8 6 5 3 -partition: 0013 total: 53 per_label: 3 7 6 4 5 7 4 4 9 4 -partition: 0014 total: 55 per_label: 6 4 6 4 7 4 4 5 8 7 -partition: 0015 total: 58 per_label: 6 7 6 5 4 6 5 4 7 8 -partition: 0016 total: 61 per_label: 8 7 8 9 4 8 6 3 5 3 -partition: 0017 total: 63 per_label: 5 8 4 4 10 7 3 10 3 9 -partition: 0018 total: 66 per_label: 5 4 4 7 3 10 9 10 5 9 -partition: 0019 total: 69 per_label: 6 7 7 6 10 5 9 7 5 7 -partition: 0020 total: 72 per_label: 4 4 8 8 8 6 5 7 13 9 -partition: 0021 total: 76 per_label: 7 9 7 4 11 8 4 9 8 9 -partition: 0022 total: 79 per_label: 13 7 7 4 3 5 16 14 2 8 -partition: 0023 total: 83 per_label: 6 6 10 15 8 6 15 7 5 5 -partition: 0024 total: 86 per_label: 11 13 9 5 9 7 10 6 8 8 -partition: 0025 total: 90 per_label: 12 12 9 9 13 8 6 7 7 7 -partition: 0026 total: 94 per_label: 13 8 4 7 14 10 8 10 13 7 -partition: 0027 total: 99 per_label: 9 10 5 9 11 10 9 10 10 16 -partition: 0028 total: 103 per_label: 11 11 12 7 13 6 14 7 8 14 -partition: 0029 total: 108 per_label: 15 15 12 5 12 12 11 9 11 6 -partition: 0030 total: 113 per_label: 9 16 9 18 11 14 10 10 9 7 -partition: 0031 total: 118 per_label: 10 13 9 11 6 19 10 16 11 13 -partition: 0032 total: 123 per_label: 11 8 9 13 16 12 10 17 11 16 -partition: 0033 total: 128 per_label: 18 19 8 15 7 15 10 11 20 5 -partition: 0034 total: 134 per_label: 11 18 9 15 14 17 13 16 14 7 -partition: 0035 total: 140 per_label: 16 11 21 13 12 11 17 15 9 15 -partition: 0036 total: 147 per_label: 12 15 11 14 15 14 17 15 15 19 -partition: 0037 total: 153 per_label: 16 18 13 13 14 12 16 16 20 15 -partition: 0038 total: 160 per_label: 18 16 13 11 20 13 20 15 15 19 -partition: 0039 total: 167 per_label: 16 20 16 16 11 22 20 18 10 18 -partition: 0040 total: 175 per_label: 16 23 19 11 17 19 16 17 19 18 -partition: 0041 total: 183 per_label: 22 17 10 21 22 22 20 20 13 16 -partition: 0042 total: 191 per_label: 22 16 19 20 18 15 19 18 20 24 -partition: 0043 total: 200 per_label: 19 19 21 23 19 23 20 23 18 15 -partition: 0044 total: 209 per_label: 17 21 25 19 16 25 27 20 16 23 -partition: 0045 total: 218 per_label: 30 22 28 23 24 10 20 22 20 19 -partition: 0046 total: 228 per_label: 20 18 24 24 24 19 33 24 23 19 -partition: 0047 total: 238 per_label: 19 25 19 22 19 24 25 23 29 33 -partition: 0048 total: 249 per_label: 22 23 32 30 33 18 23 22 22 24 -partition: 0049 total: 260 per_label: 31 24 30 30 23 30 25 28 18 21 -partition: 0050 total: 272 per_label: 28 29 27 31 31 28 25 24 30 19 -partition: 0051 total: 284 per_label: 32 22 32 39 20 28 31 27 26 27 -partition: 0052 total: 297 per_label: 29 37 36 23 28 30 27 22 37 28 -partition: 0053 total: 311 per_label: 32 31 35 32 28 26 31 28 38 30 -partition: 0054 total: 325 per_label: 31 29 32 31 29 36 38 29 41 29 -partition: 0055 total: 339 per_label: 35 39 38 35 37 31 21 33 35 35 -partition: 0056 total: 355 per_label: 38 45 25 36 34 33 35 44 29 36 -partition: 0057 total: 370 per_label: 32 38 21 37 35 36 47 39 44 41 -partition: 0058 total: 387 per_label: 35 39 44 41 34 46 34 46 30 38 -partition: 0059 total: 405 per_label: 33 44 43 31 42 53 28 34 37 60 -partition: 0060 total: 423 per_label: 42 35 42 42 44 43 42 49 42 42 -partition: 0061 total: 442 per_label: 36 36 40 48 47 60 36 40 55 44 -partition: 0062 total: 462 per_label: 45 44 48 38 46 53 52 52 47 37 -partition: 0063 total: 483 per_label: 52 48 42 47 45 53 49 53 45 49 -partition: 0064 total: 504 per_label: 52 53 53 59 44 56 48 39 47 53 -partition: 0065 total: 527 per_label: 51 41 58 54 67 56 46 50 52 52 -partition: 0066 total: 551 per_label: 52 58 51 55 61 58 45 67 43 61 -partition: 0067 total: 576 per_label: 63 64 52 61 58 43 70 57 53 55 -partition: 0068 total: 602 per_label: 69 61 68 58 47 50 71 60 68 50 -partition: 0069 total: 629 per_label: 71 56 66 80 57 54 62 63 68 52 -partition: 0070 total: 657 per_label: 51 72 83 52 50 66 70 73 64 76 -partition: 0071 total: 687 per_label: 73 64 78 64 75 77 64 61 59 72 -partition: 0072 total: 717 per_label: 56 75 78 70 62 74 73 69 79 81 -partition: 0073 total: 750 per_label: 77 73 61 80 70 69 67 75 89 89 -partition: 0074 total: 784 per_label: 68 67 80 88 80 65 79 86 83 88 -partition: 0075 total: 819 per_label: 70 88 83 87 88 78 86 92 67 80 -partition: 0076 total: 856 per_label: 96 88 71 82 97 72 86 86 85 93 -partition: 0077 total: 894 per_label: 97 90 97 94 86 85 79 88 87 91 -partition: 0078 total: 934 per_label: 100 93 84 81 91 88 103 107 94 93 -partition: 0079 total: 977 per_label: 103 93 95 112 95 80 102 98 81 118 -partition: 0080 total: 1021 per_label: 103 96 106 107 97 100 94 105 97 116 -partition: 0081 total: 1066 per_label: 100 113 101 111 85 96 110 101 130 119 -partition: 0082 total: 1115 per_label: 120 138 120 108 121 106 105 90 94 113 -partition: 0083 total: 1165 per_label: 119 117 104 108 111 114 126 123 128 115 -partition: 0084 total: 1217 per_label: 144 115 104 112 134 120 121 126 124 117 -partition: 0085 total: 1272 per_label: 133 124 120 130 131 137 135 127 131 104 -partition: 0086 total: 1329 per_label: 117 132 152 128 134 136 128 132 150 120 -partition: 0087 total: 1389 per_label: 141 143 136 139 132 147 158 146 129 118 -partition: 0088 total: 1452 per_label: 144 138 159 134 163 154 140 135 128 157 -partition: 0089 total: 1517 per_label: 151 131 171 153 163 139 150 157 151 151 -partition: 0090 total: 1585 per_label: 153 167 137 148 181 161 171 146 168 153 -partition: 0091 total: 1657 per_label: 164 142 170 175 165 179 160 161 168 173 -partition: 0092 total: 1731 per_label: 185 191 163 193 166 157 157 171 184 164 -partition: 0093 total: 1809 per_label: 175 173 195 196 156 183 196 182 180 173 -partition: 0094 total: 1890 per_label: 188 205 187 172 211 174 184 176 185 208 -partition: 0095 total: 1976 per_label: 199 184 215 201 190 189 192 218 195 193 -partition: 0096 total: 2064 per_label: 192 203 222 210 214 225 175 199 206 218 -partition: 0097 total: 2157 per_label: 242 199 203 204 211 251 215 202 223 207 -partition: 0098 total: 2254 per_label: 216 237 222 231 237 240 214 243 203 211 -partition: 0099 total: 2356 per_label: 219 248 238 226 225 231 257 217 262 233 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-iid-balanced.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-iid-balanced.txt deleted file mode 100644 index b5fd45e96..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-iid-balanced.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-iid-balanced -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0001 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0002 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0003 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0004 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0005 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0006 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0007 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0008 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0009 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0010 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0011 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0012 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0013 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0014 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0015 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0016 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0017 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0018 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0019 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0020 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0021 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0022 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0023 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0024 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0025 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0026 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0027 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0028 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0029 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0030 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0031 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0032 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0033 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0034 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0035 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0036 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0037 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0038 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0039 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0040 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0041 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0042 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0043 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0044 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0045 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0046 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0047 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0048 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0049 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0050 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0051 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0052 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0053 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0054 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0055 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0056 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0057 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0058 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0059 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0060 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0061 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0062 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0063 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0064 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0065 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0066 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0067 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0068 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0069 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0070 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0071 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0072 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0073 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0074 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0075 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0076 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0077 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0078 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0079 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0080 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0081 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0082 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0083 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0084 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0085 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0086 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0087 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0088 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0089 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0090 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0091 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0092 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0093 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0094 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0095 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0096 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0097 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0098 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: 0099 total: 540 per_label: 54 54 54 54 54 54 54 54 54 54 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-01cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-01cpp.txt deleted file mode 100644 index 62bccc43c..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-01cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-01cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0001 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0002 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0003 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0004 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0005 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0006 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0007 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0008 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0009 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0010 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0011 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0012 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0013 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0014 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0015 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0016 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0017 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0018 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0019 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0020 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0021 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0022 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0023 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0024 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0025 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0026 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0027 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0028 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0029 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0030 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0031 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0032 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0033 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0034 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0035 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0036 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0037 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0038 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0039 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0040 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0041 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0042 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0043 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0044 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0045 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0046 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0047 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0048 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0049 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0050 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0051 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0052 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0053 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0054 total: 540 per_label: 0 0 540 0 0 0 0 0 0 0 -partition: 0055 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0056 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0057 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0058 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0059 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0060 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0061 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0062 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0063 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0064 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0065 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0066 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0067 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0068 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0069 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0070 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0071 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0072 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0073 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0074 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0075 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0076 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0077 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0078 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0079 total: 540 per_label: 0 0 0 0 0 0 0 0 0 540 -partition: 0080 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0081 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0082 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0083 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0084 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0085 total: 540 per_label: 540 0 0 0 0 0 0 0 0 0 -partition: 0086 total: 540 per_label: 0 540 0 0 0 0 0 0 0 0 -partition: 0087 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0088 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: 0089 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0090 total: 540 per_label: 0 0 0 0 0 540 0 0 0 0 -partition: 0091 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0092 total: 540 per_label: 0 0 0 0 540 0 0 0 0 0 -partition: 0093 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0094 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0095 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0096 total: 540 per_label: 0 0 0 0 0 0 540 0 0 0 -partition: 0097 total: 540 per_label: 0 0 0 0 0 0 0 540 0 0 -partition: 0098 total: 540 per_label: 0 0 0 540 0 0 0 0 0 0 -partition: 0099 total: 540 per_label: 0 0 0 0 0 0 0 0 540 0 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-02cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-02cpp.txt deleted file mode 100644 index 168ed2e43..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-02cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-02cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 0 0 0 0 270 0 0 0 0 270 -partition: 0001 total: 540 per_label: 0 270 0 0 0 0 270 0 0 0 -partition: 0002 total: 540 per_label: 0 0 270 0 0 0 270 0 0 0 -partition: 0003 total: 540 per_label: 270 0 0 0 0 0 270 0 0 0 -partition: 0004 total: 540 per_label: 0 0 0 270 0 270 0 0 0 0 -partition: 0005 total: 540 per_label: 0 270 0 0 270 0 0 0 0 0 -partition: 0006 total: 540 per_label: 0 0 0 0 270 0 0 0 0 270 -partition: 0007 total: 540 per_label: 0 0 270 0 0 270 0 0 0 0 -partition: 0008 total: 540 per_label: 0 270 0 0 0 0 0 0 0 270 -partition: 0009 total: 540 per_label: 0 0 270 0 0 0 0 0 270 0 -partition: 0010 total: 540 per_label: 0 0 270 0 0 270 0 0 0 0 -partition: 0011 total: 540 per_label: 0 0 0 0 0 0 0 270 0 270 -partition: 0012 total: 540 per_label: 0 0 0 0 270 0 270 0 0 0 -partition: 0013 total: 540 per_label: 0 0 0 270 0 0 0 270 0 0 -partition: 0014 total: 540 per_label: 0 0 270 0 270 0 0 0 0 0 -partition: 0015 total: 540 per_label: 270 0 0 270 0 0 0 0 0 0 -partition: 0016 total: 540 per_label: 0 0 270 0 0 0 0 0 270 0 -partition: 0017 total: 540 per_label: 270 270 0 0 0 0 0 0 0 0 -partition: 0018 total: 540 per_label: 0 270 0 0 0 0 0 0 0 270 -partition: 0019 total: 540 per_label: 0 0 0 0 270 0 0 0 270 0 -partition: 0020 total: 540 per_label: 270 0 0 0 0 0 0 0 270 0 -partition: 0021 total: 540 per_label: 0 270 0 270 0 0 0 0 0 0 -partition: 0022 total: 540 per_label: 0 0 0 0 0 270 270 0 0 0 -partition: 0023 total: 540 per_label: 0 0 270 0 0 0 0 270 0 0 -partition: 0024 total: 540 per_label: 0 270 0 0 0 0 0 0 270 0 -partition: 0025 total: 540 per_label: 0 0 270 0 0 270 0 0 0 0 -partition: 0026 total: 540 per_label: 0 270 0 0 270 0 0 0 0 0 -partition: 0027 total: 540 per_label: 0 270 0 0 0 0 0 270 0 0 -partition: 0028 total: 540 per_label: 0 0 270 0 0 270 0 0 0 0 -partition: 0029 total: 540 per_label: 0 0 0 0 0 270 0 270 0 0 -partition: 0030 total: 540 per_label: 0 270 0 0 0 0 0 0 270 0 -partition: 0031 total: 540 per_label: 270 0 270 0 0 0 0 0 0 0 -partition: 0032 total: 540 per_label: 0 0 270 0 0 270 0 0 0 0 -partition: 0033 total: 540 per_label: 0 0 270 0 0 0 0 0 270 0 -partition: 0034 total: 540 per_label: 0 0 0 270 0 0 270 0 0 0 -partition: 0035 total: 540 per_label: 0 0 270 0 0 0 0 270 0 0 -partition: 0036 total: 540 per_label: 270 0 0 0 0 0 0 270 0 0 -partition: 0037 total: 540 per_label: 0 0 270 270 0 0 0 0 0 0 -partition: 0038 total: 540 per_label: 0 0 0 0 270 0 0 270 0 0 -partition: 0039 total: 540 per_label: 270 0 0 0 270 0 0 0 0 0 -partition: 0040 total: 540 per_label: 0 0 0 270 0 0 0 0 0 270 -partition: 0041 total: 540 per_label: 0 0 270 0 0 0 0 0 0 270 -partition: 0042 total: 540 per_label: 0 270 270 0 0 0 0 0 0 0 -partition: 0043 total: 540 per_label: 0 0 0 0 0 270 0 0 0 270 -partition: 0044 total: 540 per_label: 0 0 0 0 0 270 0 0 0 270 -partition: 0045 total: 540 per_label: 0 0 0 0 0 0 270 0 0 270 -partition: 0046 total: 540 per_label: 270 0 0 270 0 0 0 0 0 0 -partition: 0047 total: 540 per_label: 270 0 0 0 0 0 0 0 0 270 -partition: 0048 total: 540 per_label: 270 0 0 270 0 0 0 0 0 0 -partition: 0049 total: 540 per_label: 270 0 0 0 0 0 270 0 0 0 -partition: 0050 total: 540 per_label: 0 0 0 270 0 270 0 0 0 0 -partition: 0051 total: 540 per_label: 0 0 0 0 0 0 270 0 270 0 -partition: 0052 total: 540 per_label: 0 270 0 0 0 270 0 0 0 0 -partition: 0053 total: 540 per_label: 270 0 0 0 0 0 0 0 270 0 -partition: 0054 total: 540 per_label: 0 270 270 0 0 0 0 0 0 0 -partition: 0055 total: 540 per_label: 0 270 0 0 0 270 0 0 0 0 -partition: 0056 total: 540 per_label: 0 0 0 0 0 0 0 0 270 270 -partition: 0057 total: 540 per_label: 0 270 270 0 0 0 0 0 0 0 -partition: 0058 total: 540 per_label: 0 0 0 0 0 270 0 0 270 0 -partition: 0059 total: 540 per_label: 270 0 0 0 0 0 270 0 0 0 -partition: 0060 total: 540 per_label: 0 270 0 0 270 0 0 0 0 0 -partition: 0061 total: 540 per_label: 270 0 0 0 270 0 0 0 0 0 -partition: 0062 total: 540 per_label: 0 0 0 0 270 0 0 0 0 270 -partition: 0063 total: 540 per_label: 0 270 0 0 270 0 0 0 0 0 -partition: 0064 total: 540 per_label: 270 0 0 0 270 0 0 0 0 0 -partition: 0065 total: 540 per_label: 0 0 0 0 0 270 0 270 0 0 -partition: 0066 total: 540 per_label: 270 0 270 0 0 0 0 0 0 0 -partition: 0067 total: 540 per_label: 0 0 270 270 0 0 0 0 0 0 -partition: 0068 total: 540 per_label: 0 270 0 270 0 0 0 0 0 0 -partition: 0069 total: 540 per_label: 0 0 0 0 0 0 0 0 270 270 -partition: 0070 total: 540 per_label: 0 0 0 0 0 0 270 0 0 270 -partition: 0071 total: 540 per_label: 0 270 0 0 0 0 0 0 0 270 -partition: 0072 total: 540 per_label: 0 0 0 0 270 270 0 0 0 0 -partition: 0073 total: 540 per_label: 0 0 0 0 0 0 270 0 0 270 -partition: 0074 total: 540 per_label: 270 0 0 0 0 0 0 0 0 270 -partition: 0075 total: 540 per_label: 0 0 0 270 0 0 0 0 0 270 -partition: 0076 total: 540 per_label: 0 0 0 0 270 0 0 0 270 0 -partition: 0077 total: 540 per_label: 270 0 0 0 0 0 0 0 0 270 -partition: 0078 total: 540 per_label: 270 0 0 270 0 0 0 0 0 0 -partition: 0079 total: 540 per_label: 0 0 0 0 0 0 270 0 270 0 -partition: 0080 total: 540 per_label: 270 270 0 0 0 0 0 0 0 0 -partition: 0081 total: 540 per_label: 0 0 0 0 270 0 0 270 0 0 -partition: 0082 total: 540 per_label: 0 0 0 0 0 270 270 0 0 0 -partition: 0083 total: 540 per_label: 0 0 0 0 270 0 0 0 270 0 -partition: 0084 total: 540 per_label: 0 0 0 270 270 0 0 0 0 0 -partition: 0085 total: 540 per_label: 0 0 0 270 0 270 0 0 0 0 -partition: 0086 total: 540 per_label: 0 0 0 270 270 0 0 0 0 0 -partition: 0087 total: 540 per_label: 0 0 0 0 0 270 0 0 270 0 -partition: 0088 total: 540 per_label: 0 0 0 270 0 0 0 270 0 0 -partition: 0089 total: 540 per_label: 0 0 0 0 0 270 0 0 270 0 -partition: 0090 total: 540 per_label: 0 0 0 0 0 0 270 0 270 0 -partition: 0091 total: 540 per_label: 0 0 0 270 0 0 0 270 0 0 -partition: 0092 total: 540 per_label: 0 0 0 270 0 0 0 270 0 0 -partition: 0093 total: 540 per_label: 0 0 0 0 0 0 0 270 270 0 -partition: 0094 total: 540 per_label: 0 0 0 0 0 0 0 270 270 0 -partition: 0095 total: 540 per_label: 0 0 0 0 0 0 270 270 0 0 -partition: 0096 total: 540 per_label: 0 0 0 0 0 0 270 270 0 0 -partition: 0097 total: 540 per_label: 0 0 0 0 0 0 270 270 0 0 -partition: 0098 total: 540 per_label: 0 0 0 0 0 0 270 270 0 0 -partition: 0099 total: 540 per_label: 0 0 0 0 0 0 270 270 0 0 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-03cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-03cpp.txt deleted file mode 100644 index eb1a14433..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-03cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-03cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 0 0 0 180 180 0 0 0 0 180 -partition: 0001 total: 540 per_label: 0 180 0 0 0 180 180 0 0 0 -partition: 0002 total: 540 per_label: 0 0 180 0 0 180 180 0 0 0 -partition: 0003 total: 540 per_label: 180 0 0 0 180 0 180 0 0 0 -partition: 0004 total: 540 per_label: 0 0 0 180 0 180 0 180 0 0 -partition: 0005 total: 540 per_label: 0 180 180 0 180 0 0 0 0 0 -partition: 0006 total: 540 per_label: 0 0 0 0 180 180 0 0 0 180 -partition: 0007 total: 540 per_label: 0 0 180 0 0 180 0 0 0 180 -partition: 0008 total: 540 per_label: 0 180 0 0 0 0 0 0 180 180 -partition: 0009 total: 540 per_label: 0 0 180 0 0 0 0 0 180 180 -partition: 0010 total: 540 per_label: 180 0 180 0 0 180 0 0 0 0 -partition: 0011 total: 540 per_label: 0 0 0 0 0 180 0 180 0 180 -partition: 0012 total: 540 per_label: 0 0 0 0 180 180 180 0 0 0 -partition: 0013 total: 540 per_label: 0 180 0 180 0 0 0 180 0 0 -partition: 0014 total: 540 per_label: 0 0 180 0 180 0 0 180 0 0 -partition: 0015 total: 540 per_label: 180 180 0 180 0 0 0 0 0 0 -partition: 0016 total: 540 per_label: 0 0 180 0 0 180 0 0 180 0 -partition: 0017 total: 540 per_label: 180 180 0 0 0 0 0 0 0 180 -partition: 0018 total: 540 per_label: 0 180 180 0 0 0 0 0 0 180 -partition: 0019 total: 540 per_label: 180 0 0 0 180 0 0 0 180 0 -partition: 0020 total: 540 per_label: 180 0 0 0 180 0 0 0 180 0 -partition: 0021 total: 540 per_label: 0 180 0 180 0 180 0 0 0 0 -partition: 0022 total: 540 per_label: 0 180 0 0 0 180 180 0 0 0 -partition: 0023 total: 540 per_label: 180 0 180 0 0 0 0 180 0 0 -partition: 0024 total: 540 per_label: 0 180 0 0 0 0 180 0 180 0 -partition: 0025 total: 540 per_label: 0 0 180 0 0 180 0 180 0 0 -partition: 0026 total: 540 per_label: 0 180 0 0 180 180 0 0 0 0 -partition: 0027 total: 540 per_label: 0 180 0 180 0 0 0 180 0 0 -partition: 0028 total: 540 per_label: 0 0 180 0 180 180 0 0 0 0 -partition: 0029 total: 540 per_label: 0 0 180 0 0 180 0 180 0 0 -partition: 0030 total: 540 per_label: 0 180 0 0 0 0 180 0 180 0 -partition: 0031 total: 540 per_label: 180 0 180 0 0 0 0 0 180 0 -partition: 0032 total: 540 per_label: 180 0 180 0 0 180 0 0 0 0 -partition: 0033 total: 540 per_label: 0 0 180 180 0 0 0 0 180 0 -partition: 0034 total: 540 per_label: 0 0 0 180 0 0 180 0 180 0 -partition: 0035 total: 540 per_label: 0 0 180 180 0 0 0 180 0 0 -partition: 0036 total: 540 per_label: 180 0 0 0 180 0 0 180 0 0 -partition: 0037 total: 540 per_label: 0 0 180 180 0 0 0 0 180 0 -partition: 0038 total: 540 per_label: 0 0 0 0 180 0 180 180 0 0 -partition: 0039 total: 540 per_label: 180 0 0 0 180 0 0 180 0 0 -partition: 0040 total: 540 per_label: 0 0 0 180 0 0 180 0 0 180 -partition: 0041 total: 540 per_label: 180 0 180 0 0 0 0 0 0 180 -partition: 0042 total: 540 per_label: 0 180 180 0 0 0 0 180 0 0 -partition: 0043 total: 540 per_label: 0 0 0 0 0 180 0 0 180 180 -partition: 0044 total: 540 per_label: 0 180 0 0 0 180 0 0 0 180 -partition: 0045 total: 540 per_label: 0 180 0 0 0 0 180 0 0 180 -partition: 0046 total: 540 per_label: 180 0 180 180 0 0 0 0 0 0 -partition: 0047 total: 540 per_label: 180 0 0 180 0 0 0 0 0 180 -partition: 0048 total: 540 per_label: 180 0 0 180 0 0 0 0 0 180 -partition: 0049 total: 540 per_label: 180 180 0 0 0 0 180 0 0 0 -partition: 0050 total: 540 per_label: 0 180 0 180 0 180 0 0 0 0 -partition: 0051 total: 540 per_label: 0 0 0 0 0 0 180 0 180 180 -partition: 0052 total: 540 per_label: 180 180 0 0 0 180 0 0 0 0 -partition: 0053 total: 540 per_label: 180 0 0 0 0 0 0 180 180 0 -partition: 0054 total: 540 per_label: 0 180 180 180 0 0 0 0 0 0 -partition: 0055 total: 540 per_label: 180 180 0 0 0 180 0 0 0 0 -partition: 0056 total: 540 per_label: 180 0 0 0 0 0 0 0 180 180 -partition: 0057 total: 540 per_label: 0 180 180 0 0 0 0 0 180 0 -partition: 0058 total: 540 per_label: 0 0 0 0 0 180 180 0 180 0 -partition: 0059 total: 540 per_label: 180 0 180 0 0 0 180 0 0 0 -partition: 0060 total: 540 per_label: 0 180 0 0 180 0 0 180 0 0 -partition: 0061 total: 540 per_label: 180 0 0 0 180 0 0 180 0 0 -partition: 0062 total: 540 per_label: 0 180 0 0 180 0 0 0 0 180 -partition: 0063 total: 540 per_label: 0 180 0 180 180 0 0 0 0 0 -partition: 0064 total: 540 per_label: 180 0 0 0 180 0 0 180 0 0 -partition: 0065 total: 540 per_label: 0 180 0 0 0 180 0 180 0 0 -partition: 0066 total: 540 per_label: 180 0 180 0 180 0 0 0 0 0 -partition: 0067 total: 540 per_label: 0 0 180 180 180 0 0 0 0 0 -partition: 0068 total: 540 per_label: 0 180 180 0 0 0 180 0 0 0 -partition: 0069 total: 540 per_label: 0 0 0 0 0 0 180 180 180 0 -partition: 0070 total: 540 per_label: 0 0 0 0 0 0 180 0 180 180 -partition: 0071 total: 540 per_label: 180 0 180 180 0 0 0 0 0 0 -partition: 0072 total: 540 per_label: 0 0 0 180 0 0 0 180 0 180 -partition: 0073 total: 540 per_label: 0 180 0 0 180 0 180 0 0 0 -partition: 0074 total: 540 per_label: 0 0 0 0 180 180 0 180 0 0 -partition: 0075 total: 540 per_label: 0 0 0 180 0 0 0 180 180 0 -partition: 0076 total: 540 per_label: 180 180 180 0 0 0 0 0 0 0 -partition: 0077 total: 540 per_label: 0 0 0 0 0 180 0 0 180 180 -partition: 0078 total: 540 per_label: 180 0 0 180 0 0 0 0 0 180 -partition: 0079 total: 540 per_label: 0 180 0 0 0 0 180 0 0 180 -partition: 0080 total: 540 per_label: 180 0 0 180 0 0 0 180 0 0 -partition: 0081 total: 540 per_label: 0 0 0 0 0 180 0 0 180 180 -partition: 0082 total: 540 per_label: 0 0 180 0 0 180 0 180 0 0 -partition: 0083 total: 540 per_label: 0 0 0 180 0 0 0 180 0 180 -partition: 0084 total: 540 per_label: 180 0 0 0 180 0 0 180 0 0 -partition: 0085 total: 540 per_label: 180 0 180 0 0 0 0 0 180 0 -partition: 0086 total: 540 per_label: 0 0 0 0 0 180 180 0 180 0 -partition: 0087 total: 540 per_label: 0 0 0 180 0 0 180 0 180 0 -partition: 0088 total: 540 per_label: 0 0 0 0 0 180 180 0 0 180 -partition: 0089 total: 540 per_label: 0 0 0 180 180 0 0 0 180 0 -partition: 0090 total: 540 per_label: 0 0 0 0 0 180 0 180 180 0 -partition: 0091 total: 540 per_label: 0 0 0 0 0 0 180 180 0 180 -partition: 0092 total: 540 per_label: 0 0 0 180 180 0 0 0 0 180 -partition: 0093 total: 540 per_label: 0 0 0 0 180 0 0 0 180 180 -partition: 0094 total: 540 per_label: 0 0 0 0 180 0 180 180 0 0 -partition: 0095 total: 540 per_label: 0 0 0 180 180 0 180 0 0 0 -partition: 0096 total: 540 per_label: 0 0 0 0 180 0 180 0 0 180 -partition: 0097 total: 540 per_label: 0 0 0 180 180 0 180 0 0 0 -partition: 0098 total: 540 per_label: 0 0 0 180 0 0 180 0 180 0 -partition: 0099 total: 540 per_label: 0 0 0 0 0 0 180 180 180 0 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-04cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-04cpp.txt deleted file mode 100644 index 8ccea7599..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-04cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-04cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 0 135 0 135 135 0 0 0 0 135 -partition: 0001 total: 540 per_label: 0 135 135 0 0 135 135 0 0 0 -partition: 0002 total: 540 per_label: 0 0 135 0 0 135 135 135 0 0 -partition: 0003 total: 540 per_label: 135 0 0 0 135 0 135 0 0 135 -partition: 0004 total: 540 per_label: 0 0 0 135 0 135 0 135 0 135 -partition: 0005 total: 540 per_label: 0 135 135 0 135 0 0 135 0 0 -partition: 0006 total: 540 per_label: 0 0 0 0 135 135 0 135 0 135 -partition: 0007 total: 540 per_label: 0 0 135 0 135 135 0 0 0 135 -partition: 0008 total: 540 per_label: 0 135 0 0 0 0 135 0 135 135 -partition: 0009 total: 540 per_label: 0 0 135 0 0 135 0 0 135 135 -partition: 0010 total: 540 per_label: 135 0 135 135 0 135 0 0 0 0 -partition: 0011 total: 540 per_label: 0 0 0 0 135 135 0 135 0 135 -partition: 0012 total: 540 per_label: 0 0 0 0 135 135 135 0 0 135 -partition: 0013 total: 540 per_label: 135 135 0 135 0 0 0 135 0 0 -partition: 0014 total: 540 per_label: 0 0 135 135 135 0 0 135 0 0 -partition: 0015 total: 540 per_label: 135 135 0 135 0 0 135 0 0 0 -partition: 0016 total: 540 per_label: 0 135 135 0 0 135 0 0 135 0 -partition: 0017 total: 540 per_label: 135 135 0 0 0 0 135 0 0 135 -partition: 0018 total: 540 per_label: 0 135 135 0 0 135 0 0 0 135 -partition: 0019 total: 540 per_label: 135 0 135 0 135 0 0 0 135 0 -partition: 0020 total: 540 per_label: 135 0 0 0 135 135 0 0 135 0 -partition: 0021 total: 540 per_label: 0 135 0 135 0 135 0 0 135 0 -partition: 0022 total: 540 per_label: 0 135 0 0 0 135 135 0 135 0 -partition: 0023 total: 540 per_label: 135 0 135 135 0 0 0 135 0 0 -partition: 0024 total: 540 per_label: 0 135 0 0 0 0 135 0 135 135 -partition: 0025 total: 540 per_label: 0 135 135 0 0 135 0 135 0 0 -partition: 0026 total: 540 per_label: 0 135 0 135 135 135 0 0 0 0 -partition: 0027 total: 540 per_label: 0 135 0 135 0 0 135 135 0 0 -partition: 0028 total: 540 per_label: 0 0 135 135 135 135 0 0 0 0 -partition: 0029 total: 540 per_label: 0 0 135 0 0 135 0 135 0 135 -partition: 0030 total: 540 per_label: 0 135 135 0 0 0 0 135 135 0 -partition: 0031 total: 540 per_label: 135 0 135 0 135 0 0 0 135 0 -partition: 0032 total: 540 per_label: 135 0 135 0 0 135 0 0 135 0 -partition: 0033 total: 540 per_label: 0 0 135 135 0 0 0 135 135 0 -partition: 0034 total: 540 per_label: 0 0 0 135 135 0 135 0 135 0 -partition: 0035 total: 540 per_label: 0 0 135 135 0 135 0 135 0 0 -partition: 0036 total: 540 per_label: 135 0 0 0 135 0 135 135 0 0 -partition: 0037 total: 540 per_label: 0 135 135 135 0 0 0 0 135 0 -partition: 0038 total: 540 per_label: 0 0 0 0 135 0 135 135 135 0 -partition: 0039 total: 540 per_label: 135 0 0 0 135 135 0 135 0 0 -partition: 0040 total: 540 per_label: 135 0 0 135 0 0 135 0 0 135 -partition: 0041 total: 540 per_label: 135 135 135 0 0 0 0 0 0 135 -partition: 0042 total: 540 per_label: 0 135 135 0 0 0 0 135 135 0 -partition: 0043 total: 540 per_label: 0 0 0 135 0 135 0 0 135 135 -partition: 0044 total: 540 per_label: 0 135 0 0 0 135 0 0 135 135 -partition: 0045 total: 540 per_label: 0 135 0 0 0 0 135 0 135 135 -partition: 0046 total: 540 per_label: 135 0 135 135 0 135 0 0 0 0 -partition: 0047 total: 540 per_label: 135 0 0 135 135 0 0 0 0 135 -partition: 0048 total: 540 per_label: 135 0 0 135 0 0 0 135 0 135 -partition: 0049 total: 540 per_label: 135 135 0 0 0 0 135 0 0 135 -partition: 0050 total: 540 per_label: 0 135 0 135 0 135 0 0 0 135 -partition: 0051 total: 540 per_label: 0 0 0 0 135 0 135 0 135 135 -partition: 0052 total: 540 per_label: 135 135 0 0 135 135 0 0 0 0 -partition: 0053 total: 540 per_label: 135 0 0 0 0 135 0 135 135 0 -partition: 0054 total: 540 per_label: 0 135 135 135 0 135 0 0 0 0 -partition: 0055 total: 540 per_label: 135 135 0 0 0 135 135 0 0 0 -partition: 0056 total: 540 per_label: 135 0 0 0 0 0 135 0 135 135 -partition: 0057 total: 540 per_label: 0 135 135 0 0 0 0 0 135 135 -partition: 0058 total: 540 per_label: 0 0 0 0 135 135 135 0 135 0 -partition: 0059 total: 540 per_label: 135 135 135 0 0 0 135 0 0 0 -partition: 0060 total: 540 per_label: 0 135 135 0 135 0 0 135 0 0 -partition: 0061 total: 540 per_label: 135 135 0 0 135 0 0 135 0 0 -partition: 0062 total: 540 per_label: 0 135 135 0 135 0 0 0 0 135 -partition: 0063 total: 540 per_label: 0 135 0 135 135 0 0 135 0 0 -partition: 0064 total: 540 per_label: 135 0 0 0 135 0 135 135 0 0 -partition: 0065 total: 540 per_label: 0 135 0 0 135 135 0 135 0 0 -partition: 0066 total: 540 per_label: 135 0 135 135 135 0 0 0 0 0 -partition: 0067 total: 540 per_label: 0 135 135 135 135 0 0 0 0 0 -partition: 0068 total: 540 per_label: 0 135 135 0 0 0 135 0 135 0 -partition: 0069 total: 540 per_label: 0 135 0 0 0 0 135 135 135 0 -partition: 0070 total: 540 per_label: 0 0 0 0 0 135 135 0 135 135 -partition: 0071 total: 540 per_label: 135 0 135 135 135 0 0 0 0 0 -partition: 0072 total: 540 per_label: 0 0 0 135 0 135 0 135 0 135 -partition: 0073 total: 540 per_label: 0 135 0 0 135 0 135 0 135 0 -partition: 0074 total: 540 per_label: 0 0 0 0 135 135 135 135 0 0 -partition: 0075 total: 540 per_label: 0 0 0 135 0 135 0 135 135 0 -partition: 0076 total: 540 per_label: 135 135 135 135 0 0 0 0 0 0 -partition: 0077 total: 540 per_label: 0 0 0 0 0 135 135 0 135 135 -partition: 0078 total: 540 per_label: 135 0 0 135 0 0 0 135 0 135 -partition: 0079 total: 540 per_label: 0 135 135 0 0 0 135 0 0 135 -partition: 0080 total: 540 per_label: 0 0 0 0 135 0 135 135 0 135 -partition: 0081 total: 540 per_label: 0 135 0 135 135 0 0 0 135 0 -partition: 0082 total: 540 per_label: 135 0 135 135 0 0 0 135 0 0 -partition: 0083 total: 540 per_label: 135 0 135 0 135 0 0 0 135 0 -partition: 0084 total: 540 per_label: 135 0 135 0 135 0 0 0 135 0 -partition: 0085 total: 540 per_label: 0 0 0 135 135 0 0 0 135 135 -partition: 0086 total: 540 per_label: 0 0 0 135 135 135 0 0 0 135 -partition: 0087 total: 540 per_label: 135 0 0 0 0 135 135 135 0 0 -partition: 0088 total: 540 per_label: 0 0 0 0 135 135 0 0 135 135 -partition: 0089 total: 540 per_label: 0 0 0 0 135 135 135 0 0 135 -partition: 0090 total: 540 per_label: 0 0 135 0 0 0 135 135 135 0 -partition: 0091 total: 540 per_label: 0 0 135 135 0 0 135 135 0 0 -partition: 0092 total: 540 per_label: 135 0 135 0 0 0 0 135 135 0 -partition: 0093 total: 540 per_label: 135 0 0 0 0 0 135 135 0 135 -partition: 0094 total: 540 per_label: 135 0 0 135 0 0 135 0 0 135 -partition: 0095 total: 540 per_label: 0 0 0 135 0 0 135 135 0 135 -partition: 0096 total: 540 per_label: 135 0 0 135 0 0 135 135 0 0 -partition: 0097 total: 540 per_label: 135 0 0 135 0 0 135 0 135 0 -partition: 0098 total: 540 per_label: 135 0 0 135 0 0 0 135 135 0 -partition: 0099 total: 540 per_label: 135 0 0 0 0 0 135 0 135 135 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-05cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-05cpp.txt deleted file mode 100644 index 2a162fba4..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-05cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-05cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 108 108 0 108 0 0 0 108 0 108 -partition: 0001 total: 540 per_label: 0 108 108 108 0 108 108 0 0 0 -partition: 0002 total: 540 per_label: 0 108 108 0 0 108 108 108 0 0 -partition: 0003 total: 540 per_label: 108 0 0 0 108 108 108 0 0 108 -partition: 0004 total: 540 per_label: 0 0 108 108 0 108 0 108 0 108 -partition: 0005 total: 540 per_label: 0 108 108 0 108 0 108 108 0 0 -partition: 0006 total: 540 per_label: 0 0 0 0 108 108 0 108 108 108 -partition: 0007 total: 540 per_label: 0 0 108 0 108 108 0 108 0 108 -partition: 0008 total: 540 per_label: 0 108 0 0 108 0 108 0 108 108 -partition: 0009 total: 540 per_label: 0 108 108 0 0 108 0 0 108 108 -partition: 0010 total: 540 per_label: 108 0 108 108 0 108 0 0 108 0 -partition: 0011 total: 540 per_label: 108 0 0 0 108 108 0 108 0 108 -partition: 0012 total: 540 per_label: 0 0 0 0 108 108 108 0 108 108 -partition: 0013 total: 540 per_label: 108 108 0 108 0 0 108 108 0 0 -partition: 0014 total: 540 per_label: 0 0 108 108 108 0 0 108 108 0 -partition: 0015 total: 540 per_label: 108 108 0 108 0 0 108 0 108 0 -partition: 0016 total: 540 per_label: 0 108 108 0 0 108 108 0 108 0 -partition: 0017 total: 540 per_label: 108 108 0 0 0 0 108 0 108 108 -partition: 0018 total: 540 per_label: 0 108 108 0 0 108 0 0 108 108 -partition: 0019 total: 540 per_label: 108 0 108 0 108 108 0 0 108 0 -partition: 0020 total: 540 per_label: 108 0 0 0 108 108 0 108 108 0 -partition: 0021 total: 540 per_label: 0 108 0 108 108 108 0 0 108 0 -partition: 0022 total: 540 per_label: 0 108 0 108 0 108 108 0 108 0 -partition: 0023 total: 540 per_label: 108 108 108 108 0 0 0 108 0 0 -partition: 0024 total: 540 per_label: 0 108 108 0 0 0 108 0 108 108 -partition: 0025 total: 540 per_label: 0 108 108 0 0 108 0 108 108 0 -partition: 0026 total: 540 per_label: 108 108 0 108 108 108 0 0 0 0 -partition: 0027 total: 540 per_label: 0 108 0 108 0 0 108 108 0 108 -partition: 0028 total: 540 per_label: 0 0 108 108 108 108 0 0 108 0 -partition: 0029 total: 540 per_label: 0 0 108 0 0 108 0 108 108 108 -partition: 0030 total: 540 per_label: 0 108 108 0 108 0 0 108 108 0 -partition: 0031 total: 540 per_label: 108 0 108 0 108 0 0 108 108 0 -partition: 0032 total: 540 per_label: 108 0 108 0 0 108 108 0 108 0 -partition: 0033 total: 540 per_label: 0 0 108 108 108 0 0 108 108 0 -partition: 0034 total: 540 per_label: 0 0 0 108 108 108 108 0 108 0 -partition: 0035 total: 540 per_label: 0 0 108 108 0 108 0 108 108 0 -partition: 0036 total: 540 per_label: 108 0 108 0 108 0 0 108 0 108 -partition: 0037 total: 540 per_label: 0 108 108 108 108 0 0 0 108 0 -partition: 0038 total: 540 per_label: 0 0 108 0 108 0 108 108 108 0 -partition: 0039 total: 540 per_label: 108 0 0 108 108 108 0 108 0 0 -partition: 0040 total: 540 per_label: 108 0 0 108 0 108 108 0 0 108 -partition: 0041 total: 540 per_label: 108 108 108 0 0 0 0 0 108 108 -partition: 0042 total: 540 per_label: 108 108 108 0 0 0 0 108 108 0 -partition: 0043 total: 540 per_label: 0 0 0 108 108 108 0 0 108 108 -partition: 0044 total: 540 per_label: 0 108 0 0 0 108 108 0 108 108 -partition: 0045 total: 540 per_label: 0 108 0 0 0 0 108 108 108 108 -partition: 0046 total: 540 per_label: 108 0 108 108 0 108 0 108 0 0 -partition: 0047 total: 540 per_label: 108 0 0 108 108 0 0 108 0 108 -partition: 0048 total: 540 per_label: 108 0 0 108 0 0 108 108 0 108 -partition: 0049 total: 540 per_label: 108 108 0 0 0 0 108 108 0 108 -partition: 0050 total: 540 per_label: 0 108 108 108 0 108 0 0 0 108 -partition: 0051 total: 540 per_label: 0 0 108 0 108 0 108 0 108 108 -partition: 0052 total: 540 per_label: 108 108 0 0 108 108 0 0 108 0 -partition: 0053 total: 540 per_label: 108 0 0 0 108 108 0 108 108 0 -partition: 0054 total: 540 per_label: 0 108 108 108 0 108 108 0 0 0 -partition: 0055 total: 540 per_label: 108 108 0 0 0 108 108 0 0 108 -partition: 0056 total: 540 per_label: 108 0 0 108 0 0 108 0 108 108 -partition: 0057 total: 540 per_label: 108 108 108 0 0 0 0 0 108 108 -partition: 0058 total: 540 per_label: 0 0 0 0 108 108 108 108 108 0 -partition: 0059 total: 540 per_label: 108 108 108 0 0 0 108 108 0 0 -partition: 0060 total: 540 per_label: 0 108 108 0 108 0 0 108 108 0 -partition: 0061 total: 540 per_label: 108 108 0 0 108 0 108 108 0 0 -partition: 0062 total: 540 per_label: 0 108 108 0 108 0 0 108 0 108 -partition: 0063 total: 540 per_label: 0 108 0 108 108 0 0 108 108 0 -partition: 0064 total: 540 per_label: 108 0 0 0 108 0 108 108 0 108 -partition: 0065 total: 540 per_label: 0 108 0 0 108 108 0 108 0 108 -partition: 0066 total: 540 per_label: 108 108 108 108 108 0 0 0 0 0 -partition: 0067 total: 540 per_label: 0 108 108 108 108 0 108 0 0 0 -partition: 0068 total: 540 per_label: 0 108 108 0 0 0 108 0 108 108 -partition: 0069 total: 540 per_label: 108 0 0 108 0 0 108 108 108 0 -partition: 0070 total: 540 per_label: 0 0 0 108 0 108 108 0 108 108 -partition: 0071 total: 540 per_label: 108 108 108 108 108 0 0 0 0 0 -partition: 0072 total: 540 per_label: 0 0 0 108 108 108 0 108 0 108 -partition: 0073 total: 540 per_label: 108 108 0 0 108 0 108 0 108 0 -partition: 0074 total: 540 per_label: 108 0 108 0 108 108 0 108 0 0 -partition: 0075 total: 540 per_label: 0 0 0 108 0 108 0 108 108 108 -partition: 0076 total: 540 per_label: 108 108 108 108 0 0 0 0 108 0 -partition: 0077 total: 540 per_label: 0 0 108 0 0 108 108 0 108 108 -partition: 0078 total: 540 per_label: 108 0 0 108 0 108 0 108 0 108 -partition: 0079 total: 540 per_label: 0 108 108 0 0 108 108 0 0 108 -partition: 0080 total: 540 per_label: 108 0 0 0 108 0 108 108 0 108 -partition: 0081 total: 540 per_label: 0 108 0 108 108 0 108 0 108 0 -partition: 0082 total: 540 per_label: 0 0 108 0 108 108 108 0 0 108 -partition: 0083 total: 540 per_label: 108 0 0 108 0 0 108 108 108 0 -partition: 0084 total: 540 per_label: 108 108 108 0 0 0 108 0 108 0 -partition: 0085 total: 540 per_label: 108 0 0 108 0 108 0 108 108 0 -partition: 0086 total: 540 per_label: 0 0 108 108 108 0 108 108 0 0 -partition: 0087 total: 540 per_label: 108 0 0 0 108 108 0 108 0 108 -partition: 0088 total: 540 per_label: 0 108 0 108 0 108 108 108 0 0 -partition: 0089 total: 540 per_label: 0 108 0 108 108 108 108 0 0 0 -partition: 0090 total: 540 per_label: 108 108 0 108 108 0 0 108 0 0 -partition: 0091 total: 540 per_label: 0 0 108 108 0 108 108 0 0 108 -partition: 0092 total: 540 per_label: 108 0 108 0 0 108 108 0 0 108 -partition: 0093 total: 540 per_label: 0 0 108 108 0 108 108 0 0 108 -partition: 0094 total: 540 per_label: 108 0 108 108 108 0 0 0 0 108 -partition: 0095 total: 540 per_label: 108 0 108 108 108 0 0 0 0 108 -partition: 0096 total: 540 per_label: 108 0 0 108 108 0 108 0 0 108 -partition: 0097 total: 540 per_label: 108 108 0 108 0 0 108 0 0 108 -partition: 0098 total: 540 per_label: 108 0 0 108 0 0 108 108 0 108 -partition: 0099 total: 540 per_label: 108 108 0 0 108 0 0 108 0 108 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-06cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-06cpp.txt deleted file mode 100644 index 00a374ad3..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-06cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-06cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 0 90 90 90 90 0 0 90 0 90 -partition: 0001 total: 540 per_label: 90 90 90 90 0 90 90 0 0 0 -partition: 0002 total: 540 per_label: 0 90 90 0 90 90 90 90 0 0 -partition: 0003 total: 540 per_label: 90 0 90 0 90 90 90 0 0 90 -partition: 0004 total: 540 per_label: 0 0 90 90 90 90 90 0 0 90 -partition: 0005 total: 540 per_label: 90 90 90 0 90 0 90 0 0 90 -partition: 0006 total: 540 per_label: 90 0 0 0 90 90 0 90 90 90 -partition: 0007 total: 540 per_label: 0 0 90 90 90 90 0 90 0 90 -partition: 0008 total: 540 per_label: 90 0 0 0 90 90 90 0 90 90 -partition: 0009 total: 540 per_label: 0 90 90 0 90 90 0 0 90 90 -partition: 0010 total: 540 per_label: 90 0 90 90 90 90 0 0 90 0 -partition: 0011 total: 540 per_label: 90 0 0 90 90 90 0 90 0 90 -partition: 0012 total: 540 per_label: 0 0 90 0 90 90 90 0 90 90 -partition: 0013 total: 540 per_label: 90 90 0 90 90 0 90 90 0 0 -partition: 0014 total: 540 per_label: 0 0 90 90 90 0 0 90 90 90 -partition: 0015 total: 540 per_label: 90 90 90 90 0 0 90 0 90 0 -partition: 0016 total: 540 per_label: 0 90 90 0 0 90 90 0 90 90 -partition: 0017 total: 540 per_label: 90 90 90 0 0 0 90 0 90 90 -partition: 0018 total: 540 per_label: 0 90 90 90 0 90 0 0 90 90 -partition: 0019 total: 540 per_label: 90 90 90 0 90 90 0 0 90 0 -partition: 0020 total: 540 per_label: 90 0 0 90 90 90 0 90 90 0 -partition: 0021 total: 540 per_label: 90 90 0 90 90 90 0 0 90 0 -partition: 0022 total: 540 per_label: 0 90 0 90 0 90 90 90 90 0 -partition: 0023 total: 540 per_label: 90 90 90 90 0 90 0 90 0 0 -partition: 0024 total: 540 per_label: 0 90 90 0 90 0 90 0 90 90 -partition: 0025 total: 540 per_label: 0 90 90 0 0 90 90 90 90 0 -partition: 0026 total: 540 per_label: 90 90 0 90 90 90 0 90 0 0 -partition: 0027 total: 540 per_label: 90 90 0 90 0 0 90 90 0 90 -partition: 0028 total: 540 per_label: 0 90 90 90 90 90 0 0 90 0 -partition: 0029 total: 540 per_label: 0 0 90 90 0 90 0 90 90 90 -partition: 0030 total: 540 per_label: 0 90 90 0 90 90 0 90 90 0 -partition: 0031 total: 540 per_label: 90 0 90 0 90 0 0 90 90 90 -partition: 0032 total: 540 per_label: 90 90 90 0 0 90 90 0 90 0 -partition: 0033 total: 540 per_label: 0 0 90 90 90 90 0 90 90 0 -partition: 0034 total: 540 per_label: 90 0 0 90 90 90 90 0 90 0 -partition: 0035 total: 540 per_label: 0 0 90 90 0 90 0 90 90 90 -partition: 0036 total: 540 per_label: 90 0 90 0 90 0 0 90 90 90 -partition: 0037 total: 540 per_label: 0 90 90 90 90 90 0 0 90 0 -partition: 0038 total: 540 per_label: 90 0 90 0 90 0 90 90 90 0 -partition: 0039 total: 540 per_label: 90 0 0 90 90 90 0 90 0 90 -partition: 0040 total: 540 per_label: 90 0 90 90 0 90 90 0 0 90 -partition: 0041 total: 540 per_label: 90 90 90 90 0 0 0 0 90 90 -partition: 0042 total: 540 per_label: 0 90 90 0 0 90 90 90 90 0 -partition: 0043 total: 540 per_label: 0 0 0 90 90 90 0 90 90 90 -partition: 0044 total: 540 per_label: 0 90 0 0 90 90 90 0 90 90 -partition: 0045 total: 540 per_label: 0 90 0 90 0 0 90 90 90 90 -partition: 0046 total: 540 per_label: 90 0 90 90 0 90 90 90 0 0 -partition: 0047 total: 540 per_label: 90 90 0 90 90 0 0 90 0 90 -partition: 0048 total: 540 per_label: 90 90 0 90 0 0 90 90 0 90 -partition: 0049 total: 540 per_label: 90 90 0 0 0 0 90 90 90 90 -partition: 0050 total: 540 per_label: 90 90 90 90 0 90 0 0 0 90 -partition: 0051 total: 540 per_label: 0 0 90 0 90 0 90 90 90 90 -partition: 0052 total: 540 per_label: 90 90 0 0 90 90 0 0 90 90 -partition: 0053 total: 540 per_label: 90 0 90 0 90 90 0 90 90 0 -partition: 0054 total: 540 per_label: 0 90 90 90 0 90 90 90 0 0 -partition: 0055 total: 540 per_label: 90 90 90 0 0 90 90 0 0 90 -partition: 0056 total: 540 per_label: 90 90 0 90 0 0 90 0 90 90 -partition: 0057 total: 540 per_label: 90 90 90 0 0 0 0 90 90 90 -partition: 0058 total: 540 per_label: 0 90 0 0 90 90 90 90 90 0 -partition: 0059 total: 540 per_label: 90 90 90 0 0 0 90 90 0 90 -partition: 0060 total: 540 per_label: 0 90 90 0 90 90 0 90 90 0 -partition: 0061 total: 540 per_label: 90 90 0 0 90 90 90 90 0 0 -partition: 0062 total: 540 per_label: 0 90 90 0 90 0 0 90 90 90 -partition: 0063 total: 540 per_label: 0 90 0 90 90 0 0 90 90 90 -partition: 0064 total: 540 per_label: 90 0 0 90 90 0 90 90 0 90 -partition: 0065 total: 540 per_label: 0 90 0 0 90 90 90 90 0 90 -partition: 0066 total: 540 per_label: 90 90 90 90 90 0 0 0 0 90 -partition: 0067 total: 540 per_label: 0 90 90 90 90 90 90 0 0 0 -partition: 0068 total: 540 per_label: 0 90 90 0 0 0 90 90 90 90 -partition: 0069 total: 540 per_label: 90 90 0 90 0 0 90 90 90 0 -partition: 0070 total: 540 per_label: 0 0 0 90 90 90 90 0 90 90 -partition: 0071 total: 540 per_label: 90 90 90 90 90 90 0 0 0 0 -partition: 0072 total: 540 per_label: 90 0 0 90 90 90 0 90 0 90 -partition: 0073 total: 540 per_label: 90 0 0 90 0 0 90 90 90 90 -partition: 0074 total: 540 per_label: 0 0 90 90 90 90 90 90 0 0 -partition: 0075 total: 540 per_label: 0 90 90 90 0 90 0 90 90 0 -partition: 0076 total: 540 per_label: 90 90 90 90 0 0 0 90 90 0 -partition: 0077 total: 540 per_label: 0 0 90 0 0 90 90 90 90 90 -partition: 0078 total: 540 per_label: 90 0 0 90 90 0 90 90 0 90 -partition: 0079 total: 540 per_label: 0 90 90 0 90 90 90 0 0 90 -partition: 0080 total: 540 per_label: 90 0 0 0 90 0 90 90 90 90 -partition: 0081 total: 540 per_label: 90 90 0 0 90 0 90 0 90 90 -partition: 0082 total: 540 per_label: 90 0 90 0 90 90 90 90 0 0 -partition: 0083 total: 540 per_label: 90 0 90 90 0 0 90 90 90 0 -partition: 0084 total: 540 per_label: 0 90 90 90 0 90 90 0 90 0 -partition: 0085 total: 540 per_label: 90 0 0 90 0 90 90 90 90 0 -partition: 0086 total: 540 per_label: 0 90 90 90 90 0 90 0 0 90 -partition: 0087 total: 540 per_label: 90 0 0 0 0 90 90 90 90 90 -partition: 0088 total: 540 per_label: 90 90 0 90 0 90 90 0 0 90 -partition: 0089 total: 540 per_label: 90 90 0 90 0 90 90 90 0 0 -partition: 0090 total: 540 per_label: 0 90 90 0 90 90 90 90 0 0 -partition: 0091 total: 540 per_label: 90 90 90 90 0 0 0 90 90 0 -partition: 0092 total: 540 per_label: 90 0 90 90 0 0 90 90 90 0 -partition: 0093 total: 540 per_label: 90 90 90 90 0 0 0 0 90 90 -partition: 0094 total: 540 per_label: 90 0 0 90 90 0 90 0 90 90 -partition: 0095 total: 540 per_label: 90 0 0 90 90 0 90 0 90 90 -partition: 0096 total: 540 per_label: 90 90 0 90 90 0 90 0 0 90 -partition: 0097 total: 540 per_label: 0 90 90 90 90 0 90 0 0 90 -partition: 0098 total: 540 per_label: 90 0 0 0 90 90 90 90 0 90 -partition: 0099 total: 540 per_label: 90 0 0 90 90 90 0 90 0 90 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-07cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-07cpp.txt deleted file mode 100644 index d923a9719..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-07cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-07cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 539 per_label: 77 77 77 77 77 0 0 77 0 77 -partition: 0001 total: 539 per_label: 77 77 77 77 77 77 77 0 0 0 -partition: 0002 total: 539 per_label: 0 77 77 77 77 77 77 77 0 0 -partition: 0003 total: 539 per_label: 77 0 77 0 77 77 77 0 77 77 -partition: 0004 total: 539 per_label: 0 77 77 77 0 77 77 77 0 77 -partition: 0005 total: 539 per_label: 77 77 77 77 77 0 77 77 0 0 -partition: 0006 total: 539 per_label: 77 0 77 0 77 77 0 77 77 77 -partition: 0007 total: 539 per_label: 0 0 77 77 77 77 77 77 0 77 -partition: 0008 total: 539 per_label: 0 77 0 77 77 77 77 0 77 77 -partition: 0009 total: 539 per_label: 0 77 77 0 77 77 77 0 77 77 -partition: 0010 total: 539 per_label: 77 0 77 77 77 77 0 77 77 0 -partition: 0011 total: 539 per_label: 77 0 77 77 77 77 0 77 0 77 -partition: 0012 total: 539 per_label: 0 0 77 0 77 77 77 77 77 77 -partition: 0013 total: 539 per_label: 77 77 77 77 77 0 77 77 0 0 -partition: 0014 total: 539 per_label: 0 0 77 77 77 0 77 77 77 77 -partition: 0015 total: 539 per_label: 77 77 77 77 0 0 77 0 77 77 -partition: 0016 total: 539 per_label: 77 77 0 0 0 77 77 77 77 77 -partition: 0017 total: 539 per_label: 77 77 77 0 0 0 77 77 77 77 -partition: 0018 total: 539 per_label: 77 77 77 77 0 77 0 0 77 77 -partition: 0019 total: 539 per_label: 77 77 77 0 77 77 0 0 77 77 -partition: 0020 total: 539 per_label: 77 0 0 77 77 77 77 77 77 0 -partition: 0021 total: 539 per_label: 77 77 0 77 77 77 0 77 77 0 -partition: 0022 total: 539 per_label: 0 77 0 77 0 77 77 77 77 77 -partition: 0023 total: 539 per_label: 77 77 77 77 0 77 0 77 77 0 -partition: 0024 total: 539 per_label: 77 77 77 0 77 0 77 0 77 77 -partition: 0025 total: 539 per_label: 0 77 77 0 0 77 77 77 77 77 -partition: 0026 total: 539 per_label: 77 77 0 77 77 77 0 77 77 0 -partition: 0027 total: 539 per_label: 77 77 0 77 77 0 77 77 0 77 -partition: 0028 total: 539 per_label: 0 77 77 77 77 77 0 0 77 77 -partition: 0029 total: 539 per_label: 0 77 77 77 0 77 0 77 77 77 -partition: 0030 total: 539 per_label: 0 77 77 77 77 77 0 77 77 0 -partition: 0031 total: 539 per_label: 77 77 77 0 77 0 0 77 77 77 -partition: 0032 total: 539 per_label: 77 77 77 0 77 77 77 0 77 0 -partition: 0033 total: 539 per_label: 77 0 77 77 77 77 0 77 77 0 -partition: 0034 total: 539 per_label: 77 77 0 77 0 77 77 0 77 77 -partition: 0035 total: 539 per_label: 0 0 77 77 77 77 0 77 77 77 -partition: 0036 total: 539 per_label: 77 0 77 77 77 0 0 77 77 77 -partition: 0037 total: 539 per_label: 0 77 77 77 77 77 0 0 77 77 -partition: 0038 total: 539 per_label: 77 0 77 0 77 77 77 77 77 0 -partition: 0039 total: 539 per_label: 77 0 0 77 77 77 77 77 0 77 -partition: 0040 total: 539 per_label: 77 0 77 77 0 77 77 77 0 77 -partition: 0041 total: 539 per_label: 77 77 77 77 77 0 0 0 77 77 -partition: 0042 total: 539 per_label: 77 77 77 0 0 77 77 77 77 0 -partition: 0043 total: 539 per_label: 0 0 77 77 77 77 0 77 77 77 -partition: 0044 total: 539 per_label: 0 77 0 0 77 77 77 77 77 77 -partition: 0045 total: 539 per_label: 77 77 0 77 0 0 77 77 77 77 -partition: 0046 total: 539 per_label: 77 77 77 77 0 77 77 0 0 77 -partition: 0047 total: 539 per_label: 77 77 0 77 77 0 77 77 0 77 -partition: 0048 total: 539 per_label: 77 77 77 77 0 0 77 77 0 77 -partition: 0049 total: 539 per_label: 77 77 77 0 0 0 77 77 77 77 -partition: 0050 total: 539 per_label: 77 77 77 77 77 77 0 0 0 77 -partition: 0051 total: 539 per_label: 0 0 77 77 77 0 77 77 77 77 -partition: 0052 total: 539 per_label: 77 77 0 0 77 77 77 0 77 77 -partition: 0053 total: 539 per_label: 77 0 77 77 77 77 0 77 77 0 -partition: 0054 total: 539 per_label: 77 0 77 77 0 77 77 77 0 77 -partition: 0055 total: 539 per_label: 77 77 77 0 0 77 77 77 0 77 -partition: 0056 total: 539 per_label: 77 77 0 77 0 77 77 0 77 77 -partition: 0057 total: 539 per_label: 77 77 77 0 0 0 77 77 77 77 -partition: 0058 total: 539 per_label: 0 77 0 77 77 77 77 77 77 0 -partition: 0059 total: 539 per_label: 77 77 77 77 0 77 77 77 0 0 -partition: 0060 total: 539 per_label: 0 77 77 0 77 77 0 77 77 77 -partition: 0061 total: 539 per_label: 77 77 0 0 77 77 77 77 77 0 -partition: 0062 total: 539 per_label: 0 77 77 0 77 0 77 77 77 77 -partition: 0063 total: 539 per_label: 0 77 0 77 77 77 0 77 77 77 -partition: 0064 total: 539 per_label: 77 0 0 77 77 77 77 77 0 77 -partition: 0065 total: 539 per_label: 0 77 0 77 77 77 77 77 0 77 -partition: 0066 total: 539 per_label: 77 77 77 77 77 0 0 77 0 77 -partition: 0067 total: 539 per_label: 0 77 77 77 77 77 77 77 0 0 -partition: 0068 total: 539 per_label: 77 77 77 0 0 0 77 77 77 77 -partition: 0069 total: 539 per_label: 77 77 0 77 0 77 77 77 77 0 -partition: 0070 total: 539 per_label: 0 0 77 77 77 77 77 0 77 77 -partition: 0071 total: 539 per_label: 77 77 77 77 77 77 77 0 0 0 -partition: 0072 total: 539 per_label: 77 0 0 77 77 77 0 77 77 77 -partition: 0073 total: 539 per_label: 77 77 77 0 77 0 77 77 77 0 -partition: 0074 total: 539 per_label: 77 0 77 77 77 77 0 77 0 77 -partition: 0075 total: 539 per_label: 0 77 77 77 0 77 77 77 77 0 -partition: 0076 total: 539 per_label: 77 77 77 77 77 0 0 77 77 0 -partition: 0077 total: 539 per_label: 0 0 77 0 77 77 77 77 77 77 -partition: 0078 total: 539 per_label: 77 0 0 77 0 77 77 77 77 77 -partition: 0079 total: 539 per_label: 77 77 77 0 77 77 77 0 0 77 -partition: 0080 total: 539 per_label: 77 0 77 0 77 0 77 77 77 77 -partition: 0081 total: 539 per_label: 77 77 0 77 77 77 77 0 77 0 -partition: 0082 total: 539 per_label: 77 77 77 0 77 77 77 77 0 0 -partition: 0083 total: 539 per_label: 77 0 77 77 0 77 77 77 77 0 -partition: 0084 total: 539 per_label: 0 77 77 77 0 77 77 0 77 77 -partition: 0085 total: 539 per_label: 77 0 77 77 0 77 77 0 77 77 -partition: 0086 total: 539 per_label: 0 77 77 77 77 0 77 77 0 77 -partition: 0087 total: 539 per_label: 77 0 0 0 77 77 77 77 77 77 -partition: 0088 total: 539 per_label: 77 77 0 77 0 77 77 77 0 77 -partition: 0089 total: 539 per_label: 77 77 0 77 77 77 77 77 0 0 -partition: 0090 total: 539 per_label: 0 77 77 77 77 77 0 77 0 77 -partition: 0091 total: 539 per_label: 77 77 77 77 0 77 77 0 77 0 -partition: 0092 total: 539 per_label: 77 0 77 77 77 77 77 0 77 0 -partition: 0093 total: 539 per_label: 77 77 77 77 77 0 0 0 77 77 -partition: 0094 total: 539 per_label: 0 77 77 77 77 0 77 0 77 77 -partition: 0095 total: 539 per_label: 77 77 0 77 77 0 77 0 77 77 -partition: 0096 total: 539 per_label: 77 77 0 77 77 0 77 0 77 77 -partition: 0097 total: 539 per_label: 77 77 0 77 77 0 77 0 77 77 -partition: 0098 total: 539 per_label: 77 0 0 0 77 77 77 77 77 77 -partition: 0099 total: 539 per_label: 77 77 77 0 77 0 0 77 77 77 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-08cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-08cpp.txt deleted file mode 100644 index 3307c1c28..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-08cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-08cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 536 per_label: 67 0 67 67 67 67 0 67 67 67 -partition: 0001 total: 536 per_label: 67 67 67 67 67 67 67 0 0 67 -partition: 0002 total: 536 per_label: 0 67 67 67 67 67 67 67 0 67 -partition: 0003 total: 536 per_label: 67 0 67 67 67 67 67 0 67 67 -partition: 0004 total: 536 per_label: 0 67 67 67 0 67 67 67 67 67 -partition: 0005 total: 536 per_label: 67 67 67 67 67 67 67 67 0 0 -partition: 0006 total: 536 per_label: 67 67 67 0 67 67 0 67 67 67 -partition: 0007 total: 536 per_label: 67 0 67 67 67 67 67 67 0 67 -partition: 0008 total: 536 per_label: 0 67 0 67 67 67 67 67 67 67 -partition: 0009 total: 536 per_label: 0 67 67 67 67 67 67 0 67 67 -partition: 0010 total: 536 per_label: 67 0 67 67 67 67 0 67 67 67 -partition: 0011 total: 536 per_label: 67 0 67 67 67 67 0 67 67 67 -partition: 0012 total: 536 per_label: 0 0 67 67 67 67 67 67 67 67 -partition: 0013 total: 536 per_label: 67 67 67 67 67 0 67 67 67 0 -partition: 0014 total: 536 per_label: 67 0 67 67 67 0 67 67 67 67 -partition: 0015 total: 536 per_label: 67 67 67 67 67 0 67 0 67 67 -partition: 0016 total: 536 per_label: 67 67 67 0 67 67 67 67 67 0 -partition: 0017 total: 536 per_label: 67 67 67 0 67 0 67 67 67 67 -partition: 0018 total: 536 per_label: 67 67 67 67 0 67 67 0 67 67 -partition: 0019 total: 536 per_label: 67 67 67 67 67 67 0 0 67 67 -partition: 0020 total: 536 per_label: 67 0 0 67 67 67 67 67 67 67 -partition: 0021 total: 536 per_label: 67 67 67 67 67 67 0 67 67 0 -partition: 0022 total: 536 per_label: 0 67 67 67 67 67 67 67 67 0 -partition: 0023 total: 536 per_label: 67 67 67 67 0 67 0 67 67 67 -partition: 0024 total: 536 per_label: 67 67 67 0 67 0 67 67 67 67 -partition: 0025 total: 536 per_label: 67 67 67 67 0 67 67 67 67 0 -partition: 0026 total: 536 per_label: 67 67 0 67 67 67 0 67 67 67 -partition: 0027 total: 536 per_label: 67 67 0 67 67 67 67 67 0 67 -partition: 0028 total: 536 per_label: 67 67 67 67 67 67 0 0 67 67 -partition: 0029 total: 536 per_label: 67 67 67 67 67 67 0 0 67 67 -partition: 0030 total: 536 per_label: 0 67 67 67 67 67 67 67 67 0 -partition: 0031 total: 536 per_label: 67 67 67 0 67 0 67 67 67 67 -partition: 0032 total: 536 per_label: 67 67 67 0 67 67 67 0 67 67 -partition: 0033 total: 536 per_label: 67 0 67 67 67 67 67 67 67 0 -partition: 0034 total: 536 per_label: 67 67 0 67 67 67 67 67 67 0 -partition: 0035 total: 536 per_label: 0 0 67 67 67 67 67 67 67 67 -partition: 0036 total: 536 per_label: 67 0 67 67 67 67 0 67 67 67 -partition: 0037 total: 536 per_label: 67 67 67 67 67 67 0 0 67 67 -partition: 0038 total: 536 per_label: 67 0 67 67 67 67 67 67 67 0 -partition: 0039 total: 536 per_label: 67 67 0 67 67 67 67 67 0 67 -partition: 0040 total: 536 per_label: 67 67 67 0 0 67 67 67 67 67 -partition: 0041 total: 536 per_label: 67 67 67 67 67 0 67 0 67 67 -partition: 0042 total: 536 per_label: 67 67 67 67 0 67 67 67 67 0 -partition: 0043 total: 536 per_label: 67 0 67 67 67 67 0 67 67 67 -partition: 0044 total: 536 per_label: 67 67 0 0 67 67 67 67 67 67 -partition: 0045 total: 536 per_label: 67 67 0 67 0 67 67 67 67 67 -partition: 0046 total: 536 per_label: 67 67 0 67 67 67 67 67 0 67 -partition: 0047 total: 536 per_label: 67 67 67 67 67 0 67 67 0 67 -partition: 0048 total: 536 per_label: 67 67 67 67 0 67 67 67 0 67 -partition: 0049 total: 536 per_label: 67 0 67 0 67 67 67 67 67 67 -partition: 0050 total: 536 per_label: 67 67 67 67 67 67 0 67 0 67 -partition: 0051 total: 536 per_label: 0 67 67 67 67 0 67 67 67 67 -partition: 0052 total: 536 per_label: 67 67 0 67 67 67 67 0 67 67 -partition: 0053 total: 536 per_label: 67 0 67 67 67 67 0 67 67 67 -partition: 0054 total: 536 per_label: 67 67 67 67 0 67 67 67 0 67 -partition: 0055 total: 536 per_label: 67 67 67 0 0 67 67 67 67 67 -partition: 0056 total: 536 per_label: 67 67 67 67 0 67 67 0 67 67 -partition: 0057 total: 536 per_label: 67 67 67 0 0 67 67 67 67 67 -partition: 0058 total: 536 per_label: 0 67 67 67 67 67 67 0 67 67 -partition: 0059 total: 536 per_label: 67 67 67 67 67 0 67 67 67 0 -partition: 0060 total: 536 per_label: 67 67 67 0 67 67 0 67 67 67 -partition: 0061 total: 536 per_label: 67 67 0 0 67 67 67 67 67 67 -partition: 0062 total: 536 per_label: 67 67 67 0 67 0 67 67 67 67 -partition: 0063 total: 536 per_label: 0 67 67 67 67 67 0 67 67 67 -partition: 0064 total: 536 per_label: 67 67 0 67 67 67 67 67 0 67 -partition: 0065 total: 536 per_label: 67 67 0 67 67 67 67 67 0 67 -partition: 0066 total: 536 per_label: 67 67 67 67 67 0 0 67 67 67 -partition: 0067 total: 536 per_label: 0 67 67 67 67 67 67 67 67 0 -partition: 0068 total: 536 per_label: 0 67 67 0 67 67 67 67 67 67 -partition: 0069 total: 536 per_label: 67 67 67 67 0 67 67 67 67 0 -partition: 0070 total: 536 per_label: 0 67 67 67 67 67 67 0 67 67 -partition: 0071 total: 536 per_label: 0 67 67 67 67 67 67 67 0 67 -partition: 0072 total: 536 per_label: 67 67 0 67 67 67 0 67 67 67 -partition: 0073 total: 536 per_label: 67 67 67 0 67 0 67 67 67 67 -partition: 0074 total: 536 per_label: 67 0 67 67 67 67 67 67 67 0 -partition: 0075 total: 536 per_label: 0 67 67 67 67 67 67 0 67 67 -partition: 0076 total: 536 per_label: 67 67 67 67 67 0 0 67 67 67 -partition: 0077 total: 536 per_label: 0 0 67 67 67 67 67 67 67 67 -partition: 0078 total: 536 per_label: 67 67 0 67 0 67 67 67 67 67 -partition: 0079 total: 536 per_label: 67 67 67 0 67 67 67 0 67 67 -partition: 0080 total: 536 per_label: 67 67 67 0 67 0 67 67 67 67 -partition: 0081 total: 536 per_label: 67 67 0 67 67 67 67 67 67 0 -partition: 0082 total: 536 per_label: 67 67 67 0 67 67 67 67 67 0 -partition: 0083 total: 536 per_label: 67 67 67 67 0 67 67 67 67 0 -partition: 0084 total: 536 per_label: 0 67 67 67 67 67 67 0 67 67 -partition: 0085 total: 536 per_label: 67 67 67 67 0 67 67 67 67 0 -partition: 0086 total: 536 per_label: 67 67 67 67 67 0 67 67 0 67 -partition: 0087 total: 536 per_label: 67 0 0 67 67 67 67 67 67 67 -partition: 0088 total: 536 per_label: 67 67 0 67 67 67 67 67 0 67 -partition: 0089 total: 536 per_label: 67 67 0 67 67 67 67 67 0 67 -partition: 0090 total: 536 per_label: 0 67 67 67 67 67 67 67 0 67 -partition: 0091 total: 536 per_label: 67 67 67 67 0 67 67 67 0 67 -partition: 0092 total: 536 per_label: 67 67 67 67 0 67 67 67 67 0 -partition: 0093 total: 536 per_label: 67 67 67 0 67 0 67 67 67 67 -partition: 0094 total: 536 per_label: 0 67 67 67 67 67 67 67 0 67 -partition: 0095 total: 536 per_label: 67 67 0 67 67 67 67 0 67 67 -partition: 0096 total: 536 per_label: 67 0 67 67 67 0 67 67 67 67 -partition: 0097 total: 536 per_label: 67 67 67 67 67 0 67 0 67 67 -partition: 0098 total: 536 per_label: 67 0 67 67 0 67 67 67 67 67 -partition: 0099 total: 536 per_label: 67 67 67 67 0 0 67 67 67 67 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-09cpp.txt b/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-09cpp.txt deleted file mode 100644 index 882fb7a6c..000000000 --- a/xain_fl/datasets/stats/datasets/fashion-mnist-100p-noniid-09cpp.txt +++ /dev/null @@ -1,106 +0,0 @@ - -name: fashion-mnist-100p-noniid-09cpp -number_of_examples_per_label_per_shard -partition: 0000 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0001 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0002 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0003 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0004 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0005 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0006 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0007 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0008 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0009 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0010 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0011 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0012 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0013 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0014 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0015 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0016 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0017 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0018 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0019 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0020 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0021 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0022 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0023 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0024 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0025 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0026 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0027 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0028 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0029 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0030 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0031 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0032 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0033 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0034 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0035 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0036 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0037 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0038 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0039 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0040 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0041 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0042 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0043 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0044 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0045 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0046 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0047 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0048 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0049 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0050 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0051 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0052 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0053 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0054 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0055 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0056 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0057 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0058 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0059 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0060 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0061 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0062 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0063 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0064 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0065 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0066 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0067 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0068 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0069 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0070 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0071 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0072 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: 0073 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0074 total: 540 per_label: 60 0 60 60 60 60 60 60 60 60 -partition: 0075 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0076 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0077 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0078 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0079 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0080 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0081 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0082 total: 540 per_label: 60 60 60 0 60 60 60 60 60 60 -partition: 0083 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0084 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0085 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0086 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0087 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0088 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0089 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0090 total: 540 per_label: 60 60 60 60 60 60 60 60 0 60 -partition: 0091 total: 540 per_label: 60 60 0 60 60 60 60 60 60 60 -partition: 0092 total: 540 per_label: 60 60 60 60 60 60 60 60 60 0 -partition: 0093 total: 540 per_label: 60 60 60 60 60 0 60 60 60 60 -partition: 0094 total: 540 per_label: 0 60 60 60 60 60 60 60 60 60 -partition: 0095 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0096 total: 540 per_label: 60 60 60 60 0 60 60 60 60 60 -partition: 0097 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0098 total: 540 per_label: 60 60 60 60 60 60 60 0 60 60 -partition: 0099 total: 540 per_label: 60 60 60 60 60 60 0 60 60 60 -partition: val total: 6000 per_label: 600 600 600 600 600 600 600 600 600 600 -partition: test total: 10000 per_label: 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -======================================================================================================================== diff --git a/xain_fl/datasets/stats/stats.py b/xain_fl/datasets/stats/stats.py deleted file mode 100644 index f0bc48bc4..000000000 --- a/xain_fl/datasets/stats/stats.py +++ /dev/null @@ -1,91 +0,0 @@ -from typing import Dict, List - -import numpy as np - -from xain_fl.types import FederatedDataset, Partition - -PartitionStat = Dict[str, List[int]] - - -class DSStats: - def __init__(self, name: str, ds: FederatedDataset): - self.name = name - self.ds = ds - - def __repr__(self) -> str: - width = 120 - line = "=" * width + "\n" - output = "\nname: {}\n".format(self.name) - - all_stats = self.all() - - topic = "number_of_examples_per_label_per_shard" - stat = all_stats[topic] - - output += "{}\n".format(topic) - - for part_index, part in stat.items(): - output += "partition: {}\t".format(part_index) - output += "total: {}\t".format(part["total"]) - output += "per_label: {}".format( - "\t".join([str(v).rjust(4) for v in part["per_label"]]) - ) - output += "\n" - - output += line - - return output - - def all(self) -> Dict[str, Dict[str, PartitionStat]]: - stats = {} - - stats[ - "number_of_examples_per_label_per_shard" - ] = self.number_of_examples_per_label_per_shard() - - return stats - - def number_of_examples_per_label_per_shard(self) -> Dict[str, PartitionStat]: - xy_partitions, xy_val, xy_test = self.ds - - stats = {} - - zfill_width = int(np.log(len(xy_partitions))) - - ys = [y for (_, y) in xy_partitions] - all_labels = np.unique(np.concatenate(ys, axis=0)) - - for index, xy_par in enumerate(xy_partitions): - key = str(index).zfill(zfill_width) - - stats[key] = self.number_of_examples_per_label( - xy=xy_par, possible_labels=all_labels - ) - - stats["val"] = self.number_of_examples_per_label( - xy=xy_val, possible_labels=all_labels - ) - stats["test"] = self.number_of_examples_per_label( - xy=xy_test, possible_labels=all_labels - ) - - return stats - - @staticmethod - def number_of_examples_per_label( - xy: Partition, possible_labels: List - ) -> PartitionStat: - x, y = xy - - possible_labels = list(possible_labels) - per_label_counts = [0] * len(possible_labels) - - assert x.shape[0] == y.shape[0], "Number of examples and labels don't match" - - [unique_labels, unique_counts] = np.unique(y, return_counts=True) - - for i, l in enumerate(unique_labels): - per_label_counts_index = possible_labels.index(l) - per_label_counts[per_label_counts_index] = unique_counts[i] - - return {"total": x.shape[0], "per_label": per_label_counts} diff --git a/xain_fl/datasets/stats/stats_test.py b/xain_fl/datasets/stats/stats_test.py deleted file mode 100644 index 5e4eb3ef9..000000000 --- a/xain_fl/datasets/stats/stats_test.py +++ /dev/null @@ -1,24 +0,0 @@ -from .stats import DSStats - - -def test_DSStats_all(mock_federated_dataset): - ds_stats = DSStats("fed_ds", mock_federated_dataset) - - stats = ds_stats.all() - - assert isinstance(stats, dict) - assert isinstance(stats["number_of_examples_per_label_per_shard"], dict) - - for key, stat in stats["number_of_examples_per_label_per_shard"].items(): - assert "total" in stat - assert "per_label" in stat - - if key == "val": - assert stat["total"] == 60 - elif key == "test": - assert stat["total"] == 100 - else: - assert stat["total"] == 270 - - assert isinstance(stat["per_label"], list) - assert len(stat["per_label"]) == 10 diff --git a/xain_fl/datasets/storage.py b/xain_fl/datasets/storage.py deleted file mode 100644 index 6f85a8cea..000000000 --- a/xain_fl/datasets/storage.py +++ /dev/null @@ -1,203 +0,0 @@ -import concurrent.futures -import os -from typing import Tuple - -import numpy as np -import requests -from absl import flags - -from xain_fl.helpers.sha1 import checksum -from xain_fl.logger import get_logger -from xain_fl.types import FederatedDataset, Partition - -from . import hashes - -FLAGS = flags.FLAGS - - -logger = get_logger(__name__) - - -def default_get_local_datasets_dir(): - """Returns absolute path to datasets directory - - Returns - str: absolute datasets directory path - """ - return FLAGS.local_datasets_dir - - -def get_dataset_dir(dataset_name: str, local_datasets_dir: str) -> str: - """Will return dataset directory and create it if its not already present - - Args: - dataset_name (str) - local_datasets_dir (str) - - Returns: - str: Absolute directory path to newly created datasets - directory in local datasets dir - """ - dataset_dir = os.path.join(local_datasets_dir, dataset_name) - - if not os.path.isdir(dataset_dir): - os.makedirs(dataset_dir, exist_ok=True) - - return dataset_dir - - -def fetch_ndarray(url, fpath): - """Downloads file from url and store at fpath - - Args: - url (str): URL from which to download the ndarray file - fpath (str): Absolute path under which to store the file - """ - r = requests.get(url, stream=True) - - logger.info("Fetching file from url", url=url) - - if r.status_code != 200: - raise Exception("Received HTTP Status {} for url {}".format(r.status_code, url)) - - handle = open(fpath, "wb") - for chunk in r.iter_content(chunk_size=1024): - if chunk: # filter out keep-alive new chunks - handle.write(chunk) - - -def load_ndarray( - dataset_name: str, ndarray_name: str, ndarray_hash: str, local_datasets_dir: str -): - """Downloads dataset ndarray and loads from disk if already present - - Args: - datasets_repository (str): datasets repository base URL - dataset_name (str): Name of dataset in repository - ndarray_name (str): ndarray name. Example: "x_00.npy" - local_datasets_dir (str): Directory in which all local datasets are stored - cleanup (bool): Cleanup file if it has the wrong hash - - Returns: - np.ndarray: Loaded numpy ndarray - """ - url = "{}/{}/{}".format(FLAGS.datasets_repository, dataset_name, ndarray_name) - - dataset_dir = get_dataset_dir(dataset_name, local_datasets_dir) - fpath = os.path.join(dataset_dir, ndarray_name) - - if FLAGS.fetch_datasets and not os.path.isfile(fpath): - fetch_ndarray(url, fpath) - - # Check sha1 checksum after conditional fetch even when no download - # occured and local dataset was used to avoid accidental corruption - sha1 = checksum(fpath) - - if sha1 != ndarray_hash: - # Delete the downloaded file if it has the wrong hash - # Otherwise the next invocation will not download it again - # which is not a desired behavior - os.remove(fpath) - - raise Exception( - "Given hash {} for file {} does not match".format( - ndarray_hash, ndarray_name - ) - ) - - ndarray = np.load(fpath) - - return ndarray - - -def load_split( - dataset_name: str, - split_id: str, - split_hashes: Tuple[str, str], - local_datasets_dir=str, -) -> Partition: - """Downloads dataset partition and loads from disk if already present - - Args: - dataset_name (str): Name of dataset in dataset repository - split_id (str): ndarray name. Example: "x_00.npy" - split_hashes (str, str): Tuple of hashes of x and y ndarray - local_datasets_dir (bool): Directory in which all local datasets are stored - - Returns: - Partition: Federated Dataset Partition - """ - x_name = "x_{}.npy".format(split_id) - x_hash = split_hashes[0] - - y_name = "y_{}.npy".format(split_id) - y_hash = split_hashes[1] - - x = load_ndarray( - dataset_name=dataset_name, - ndarray_name=x_name, - ndarray_hash=x_hash, - local_datasets_dir=local_datasets_dir, - ) - - y = load_ndarray( - dataset_name=dataset_name, - ndarray_name=y_name, - ndarray_hash=y_hash, - local_datasets_dir=local_datasets_dir, - ) - - return x, y - - -def load_splits( - dataset_name: str, get_local_datasets_dir=default_get_local_datasets_dir -) -> FederatedDataset: - """Loads FederatedDataset from local datasets directory and from remote - datasets repository if not locally present - - Args: - dataset_name (str): Name of dataset in repository - get_local_datasets_dir (Callable): Function which returns an absolute - path to datasets directory - - Returns: - FederatedDataset - """ - - xy_splits = [] - xy_val = (None, None) - xy_test = (None, None) - - dataset_split_hashes = hashes.datasets[dataset_name] - - local_datasets_dir = get_local_datasets_dir() - - def load_method(split_id: str): - data = load_split( - dataset_name=dataset_name, - split_id=split_id, - # passing respective hash tuple for given split_id - split_hashes=dataset_split_hashes[split_id], - local_datasets_dir=local_datasets_dir, - ) - - return split_id, data - - with concurrent.futures.ThreadPoolExecutor() as executor: - future_results = [ - executor.submit(load_method, split_id) for split_id in dataset_split_hashes - ] - concurrent.futures.wait(future_results) - - for future in future_results: - split_id, data = future.result() - - if split_id == "test": - xy_test = data - elif split_id == "val": - xy_val = data - else: - xy_splits.append(data) - - return xy_splits, xy_val, xy_test diff --git a/xain_fl/datasets/storage_test.py b/xain_fl/datasets/storage_test.py deleted file mode 100644 index c2a780ddc..000000000 --- a/xain_fl/datasets/storage_test.py +++ /dev/null @@ -1,20 +0,0 @@ -import pytest - -from . import storage - - -@pytest.mark.integration -def test_load_ndarray_wrong_hash(tmp_path): - # Prepare - dataset_name = "integration_test" - ndarray_name = "x_00.npy" - ndarray_hash = "wrong_hash" - - # Execute and expect to fail - with pytest.raises(Exception): - storage.load_ndarray( - dataset_name=dataset_name, - ndarray_name=ndarray_name, - ndarray_hash=ndarray_hash, - local_datasets_dir=tmp_path, - ) diff --git a/xain_fl/datasets/testing.py b/xain_fl/datasets/testing.py deleted file mode 100644 index 64d2a850f..000000000 --- a/xain_fl/datasets/testing.py +++ /dev/null @@ -1,96 +0,0 @@ -from typing import Tuple - -import numpy as np -from tensorflow.data import Dataset - -from xain_fl.types import FederatedDataset, KerasDataset - - -def load(keras_dataset: Dataset) -> KerasDataset: - """Loads Keras Dataset in predictable form - - Args: - keras_dataset (Dataset) - - Returns: - Dataset - """ - (x_train, y_train), (x_test, y_test) = keras_dataset.load_data() - - y_train = y_train.reshape((y_train.shape[0],)) - y_test = y_test.reshape((y_test.shape[0],)) - - return (x_train, y_train), (x_test, y_test) - - -def unpack_keras_and_federated_dataset( - keras_dataset: Dataset, federated_dataset: FederatedDataset -) -> Tuple[Tuple[np.ndarray, np.ndarray], Tuple[np.ndarray, np.ndarray]]: - """Unpacks Keras Dataset and Federated Dataset - - Args: - keras_dataset (Dataset) - federated_dataset (FederatedDataset) - - Returns: - (np.ndarray, np.ndarray), (np.ndarray, np.ndarray) - """ - # Unpack and group each dataset - (x1_keras, y1_keras), (x2_keras, y2_keras) = keras_dataset - xy1_fed_splits, (x2_fed, y2_fed), (x3_fed, y3_fed) = federated_dataset - x1_fed_splits, y1_fed_splits = zip(*xy1_fed_splits) - - x_keras = np.concatenate([x1_keras, x2_keras], axis=0) - y_keras = np.concatenate([y1_keras, y2_keras], axis=0) - assert x_keras.shape[0] == y_keras.shape[0] - - x_fed = np.concatenate([*x1_fed_splits, x2_fed, x3_fed]) - y_fed = np.concatenate([*y1_fed_splits, y2_fed, y3_fed]) - assert x_fed.shape[0] == y_fed.shape[0] - - # Shapes of unpacked and grouped datasets should be same - assert x_keras.shape == x_fed.shape - assert y_keras.shape == y_fed.shape - - return (x_keras, y_keras), (x_fed, y_fed) - - -def hash_xy(x, y): - """Produces unique hash for given x and y - - Args: - x (np.ndarray) - y (np.ndarray) - - Returns - str: Hash of combination of x and y - """ - return hash(x.tobytes() + y.tobytes()) - - -def assert_dataset_origin(keras_dataset, federated_dataset): - """Asserts that given Federated Dataset is derived from given - Keras Dataset. Function will throw if otherwise. - - Args: - keras_dataset (Dataset) - federated_dataset (FederatedDataset) - """ - # Unpack and group each dataset - (x_keras, y_keras), (x_fed, y_fed) = unpack_keras_and_federated_dataset( - keras_dataset, federated_dataset - ) - - assert x_keras.shape == x_fed.shape - assert y_keras.shape == y_fed.shape - - hash_table = {hash_xy(x, y): 0 for (x, y) in zip(x_keras, y_keras)} - - for (x, y) in zip(x_fed, y_fed): - hash_table[hash_xy(x, y)] += 1 - - counts = list(hash_table.values()) - unq = np.unique(counts) - - assert len(unq) == 1, "Some examples are duplicate or not existing in keras dataset" - assert unq[0] == 1, "Federated example not found in original keras dataset" diff --git a/xain_fl/datasets/testing_test.py b/xain_fl/datasets/testing_test.py deleted file mode 100644 index 475e0ee20..000000000 --- a/xain_fl/datasets/testing_test.py +++ /dev/null @@ -1,31 +0,0 @@ -import pytest - -from . import testing - - -def test_assert_dataset_origin( - mock_simple_keras_dataset, mock_simple_federated_dataset -): - # Execute & Assert - testing.assert_dataset_origin( - keras_dataset=mock_simple_keras_dataset, - federated_dataset=mock_simple_federated_dataset, - ) - - -def test_assert_dataset_origin_raise( - mock_simple_keras_dataset, mock_simple_federated_dataset -): - # Prepare - # Get reference to x_train - (x_train, _), _ = mock_simple_keras_dataset - - # And change one number in the first colum of the first example - x_train[0][0][0] += 1 - - # Execute & Assert - with pytest.raises(Exception): - testing.assert_dataset_origin( - keras_dataset=mock_simple_keras_dataset, - federated_dataset=mock_simple_federated_dataset, - ) diff --git a/xain_fl/fl/__init__.py b/xain_fl/fl/__init__.py index 6e501026a..1c5687e11 100644 --- a/xain_fl/fl/__init__.py +++ b/xain_fl/fl/__init__.py @@ -2,6 +2,4 @@ It consists the following subpackages: - `coordinator` - - `participant` - - `logging` """ diff --git a/xain_fl/fl/coordinator/__init__.py b/xain_fl/fl/coordinator/__init__.py index f122cfa79..dfbfbed56 100644 --- a/xain_fl/fl/coordinator/__init__.py +++ b/xain_fl/fl/coordinator/__init__.py @@ -1,12 +1,9 @@ """Contains coordinator logic which runs the central server in federated learning. It consists of the following modules: - - coordinator - aggregate - controller - - evaluator """ from xain_fl.fl.coordinator.aggregate import Aggregator from xain_fl.fl.coordinator.controller import RandomController -from xain_fl.fl.coordinator.coordinator import Coordinator diff --git a/xain_fl/fl/coordinator/aggregate.py b/xain_fl/fl/coordinator/aggregate.py index da5ff7853..8f41d6f99 100644 --- a/xain_fl/fl/coordinator/aggregate.py +++ b/xain_fl/fl/coordinator/aggregate.py @@ -6,21 +6,22 @@ import numpy as np -from xain_fl.logger import get_logger -from xain_fl.types import Theta +from xain_fl.fl.types import Theta +from xain_fl.logger import StructLogger, get_logger -from .evaluator import Evaluator +logger: StructLogger = get_logger(__name__) -logger = get_logger(__name__) - -class Aggregator(ABC): +class Aggregator(ABC): # pylint: disable=too-few-public-methods """Abstract base class which provides an interface to the coordinator that enables different aggregation implementations. """ def __init__(self): - pass + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ @abstractmethod def aggregate(self, thetas: List[Tuple[Theta, int]]) -> Theta: @@ -36,7 +37,7 @@ def aggregate(self, thetas: List[Tuple[Theta, int]]) -> Theta: raise NotImplementedError() -class IdentityAgg(Aggregator): +class IdentityAgg(Aggregator): # pylint: disable=too-few-public-methods """Provides identity aggregation, i.e. the aggregate method expects a list containing a single element and returns that element. """ @@ -47,25 +48,28 @@ def aggregate(self, thetas: List[Tuple[Theta, int]]) -> Theta: return thetas[0][0] -class FederatedAveragingAgg(Aggregator): - """Provides federated averaging aggregation, i.e. a weighted average.""" +class ModelSumAgg(Aggregator): # pylint: disable=too-few-public-methods + """Provides a sum-of-models aggregation.""" def aggregate(self, thetas: List[Tuple[Theta, int]]) -> Theta: - theta_list = [theta for theta, _ in thetas] - weighting = np.array([num_examples for _, num_examples in thetas]) - return federated_averaging(theta_list, weighting) + """Aggregates a given list of models by summation. + Args: + thetas (~typing.List[~xain_fl.fl.types.Theta]): List of thetas. + + Returns: + ~xain_fl.fl.types.Theta: The aggregated model weights. + """ + return [sum(th) for th, _ in thetas] -class EvoAgg(Aggregator): - """Experimental""" - def __init__(self, evaluator: Evaluator): - super().__init__() - self.evaluator = evaluator +class FederatedAveragingAgg(Aggregator): # pylint: disable=too-few-public-methods + """Provides federated averaging aggregation, i.e. a weighted average.""" def aggregate(self, thetas: List[Tuple[Theta, int]]) -> Theta: - weight_matrices = [theta for theta, num_examples in thetas] - return evo_agg(weight_matrices, self.evaluator) + theta_list = [theta for theta, _ in thetas] + weighting = np.array([num_examples for _, num_examples in thetas]) + return federated_averaging(theta_list, weighting) def federated_averaging(thetas: List[Theta], weighting: np.ndarray) -> Theta: @@ -84,59 +88,71 @@ def federated_averaging(thetas: List[Theta], weighting: np.ndarray) -> Theta: assert len(thetas) == weighting.shape[0] theta_avg: Theta = thetas[0] - for w in theta_avg: - w *= weighting[0] + for weights in theta_avg: + weights *= weighting[0] # Aggregate (weighted) updates for theta, update_weighting in zip(thetas[1:], weighting[1:]): - for w_index, w in enumerate(theta): - theta_avg[w_index] += update_weighting * w + for w_index, weights in enumerate(theta): + theta_avg[w_index] += update_weighting * weights weighting_sum = np.sum(weighting) - for w in theta_avg: - w /= weighting_sum + for weights in theta_avg: + weights /= weighting_sum return theta_avg -def evo_agg(thetas: List[Theta], evaluator: Evaluator) -> Theta: - """Experimental +# TODO: (XP-351) decide how to continue with that +# class EvoAgg(Aggregator): +# """Experimental""" - - Init different weightings - - Aggregate thetas according to those weightings ("candidates") - - Evaluate all candidates on the validation set - - Pick (a) best candidate, or (b) average of n best candidates - """ - # Compute candidates - # TODO in parallel, do: - theta_prime_candidates = [] - for _ in range(3): - candidate = _compute_candidate(thetas, evaluator) - logger.debug("Candidate metadata", weighting=candidate[0], loss=candidate[2]) - - theta_prime_candidates.append(candidate) - # Return best candidate - best_candidate = _pick_best_candidate(theta_prime_candidates) - return best_candidate - - -def _pick_best_candidate(candidates: List) -> Theta: - _, best_candidate, best_loss, _ = candidates[0] - for _, candidate, loss, _ in candidates[1:]: - if loss < best_loss: - best_candidate = candidate - best_loss = loss - return best_candidate - - -def _compute_candidate( - thetas: Theta, evaluator: Evaluator -) -> Tuple[np.ndarray, Theta, float, float]: - weighting = _random_weighting(len(thetas)) - theta_prime_candidate = federated_averaging(thetas, weighting) - loss, acc = evaluator.evaluate(theta_prime_candidate) - return weighting, theta_prime_candidate, loss, acc - - -def _random_weighting(num_weightings: int, low=0.5, high=1.5) -> np.ndarray: - return np.random.uniform(low=low, high=high, size=(num_weightings,)) +# def __init__(self, evaluator: Evaluator): +# super().__init__() +# self.evaluator = evaluator + +# def aggregate(self, thetas: List[Tuple[Theta, int]]) -> Theta: +# weight_matrices = [theta for theta, num_examples in thetas] +# return evo_agg(weight_matrices, self.evaluator) + +# def evo_agg(thetas: List[Theta], evaluator: Evaluator) -> Theta: +# """Experimental + +# - Init different weightings +# - Aggregate thetas according to those weightings ("candidates") +# - Evaluate all candidates on the validation set +# - Pick (a) best candidate, or (b) average of n best candidates +# """ +# # Compute candidates +# # TODO in parallel, do: +# theta_prime_candidates = [] +# for _ in range(3): +# candidate = _compute_candidate(thetas, evaluator) +# logger.debug("Candidate metadata", weighting=candidate[0], loss=candidate[2]) + +# theta_prime_candidates.append(candidate) +# # Return best candidate +# best_candidate = _pick_best_candidate(theta_prime_candidates) +# return best_candidate + + +# def _pick_best_candidate(candidates: List) -> Theta: +# _, best_candidate, best_loss, _ = candidates[0] +# for _, candidate, loss, _ in candidates[1:]: +# if loss < best_loss: +# best_candidate = candidate +# best_loss = loss +# return best_candidate + + +# def _compute_candidate( +# thetas: Theta, evaluator: Evaluator +# ) -> Tuple[np.ndarray, Theta, float, float]: +# weighting = _random_weighting(len(thetas)) +# theta_prime_candidate = federated_averaging(thetas, weighting) +# loss, acc = evaluator.evaluate(theta_prime_candidate) +# return weighting, theta_prime_candidate, loss, acc + + +# def _random_weighting(num_weightings: int, low=0.5, high=1.5) -> np.ndarray: +# return np.random.uniform(low=low, high=high, size=(num_weightings,)) diff --git a/xain_fl/fl/coordinator/controller.py b/xain_fl/fl/coordinator/controller.py index 0ac571cac..470b88679 100644 --- a/xain_fl/fl/coordinator/controller.py +++ b/xain_fl/fl/coordinator/controller.py @@ -1,62 +1,103 @@ -"""Provides an abstract base class Controller and multiple sub-classes -such as CycleRandomController. -""" +"""Provides an abstract base class Controller and the RandomController +currently used by the Coordinator.""" + from abc import ABC, abstractmethod from typing import List import numpy as np +# TODO: raise exceptions for invalid attribute values: https://xainag.atlassian.net/browse/XP-387 class Controller(ABC): """Abstract base class which provides an interface to the coordinator that enables different selection strategies. Attributes: - participant_ids (:obj:`list` of :obj:`str`): The list of IDs of the - all the available participants, a subset of which will be selected. fraction_of_participants (:obj:`float`, optional): The fraction of total - participant ids to be selected. Defaults to 1.0, meaning that - all participant ids will be selected. + participant IDs to be selected. Defaults to 1.0, meaning that + all participant IDs will be selected. It must be in the (0.0, 1.0] interval. """ - def __init__( - self, participant_ids: List[str], fraction_of_participants: float = 1.0 - ) -> None: - self.participant_ids: List[str] = participant_ids + def __init__(self, fraction_of_participants: float = 1.0) -> None: + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + fraction_of_participants (float): [description]. Defaults to 1.0. + """ + self.fraction_of_participants: float = fraction_of_participants - self.num_ids_to_select: int = self.get_num_ids_to_select() - def get_num_ids_to_select(self) -> int: - """Calculates how many participant ids need to be selected. + def get_num_ids_to_select(self, len_participant_ids: int) -> int: + """Calculates how many participant IDs need to be selected. + + Args: + len_participant_ids (:obj:`int`): The length of the list of IDs of all the + available participants. Returns: - :obj:`int`: Number of participant ids to be selected + :obj:`int`: Number of participant IDs to be selected """ - raw_num_ids_to_select = ( - len(self.participant_ids) * self.fraction_of_participants - ) + raw_num_ids_to_select = len_participant_ids * self.fraction_of_participants max_valid_value = max(1, np.ceil(raw_num_ids_to_select)) - minimum_valid_value = min(len(self.participant_ids), max_valid_value) + minimum_valid_value = min(len_participant_ids, max_valid_value) return int(minimum_valid_value) @abstractmethod - def select_ids(self) -> List[str]: - """Returns the selected indices of next round + def select_ids(self, participant_ids: List[str]) -> List[str]: + """Returns the selected indices of next round. + + Args: + participant_ids (:obj:`list` of :obj:`str`): The list of IDs of all the + available participants, a subset of which will be selected. Returns: - :obj:`list` of :obj:`str`: Unordered list of selected ids + :obj:`list` of :obj:`str`: List of selected participant IDs """ raise NotImplementedError("not implemented") +class IdController(Controller): + """[summary + + ... todo: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + def select_ids(self, participant_ids: List[str]) -> List[str]: + """Selects all given participants. + + Args: + participant_ids (:obj:`list` of :obj:`str`): The list of IDs of all the + available participants, a subset of which will be selected. + + Returns: + :obj:`list` of :obj:`str`: List of selected participant IDs + """ + + return participant_ids + + class RandomController(Controller): - def select_ids(self) -> List[str]: + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + Controller ([type]): [description] + """ + + def select_ids(self, participant_ids: List[str]) -> List[str]: """Randomly samples self.num_ids_to_select from the population of participants_ids, without replacement. + Args: + participant_ids (:obj:`list` of :obj:`str`): The list of IDs of all the + available participants, a subset of which will be selected. + Returns: - :obj:`list` of :obj:`str`: List of selected participant ID's + :obj:`list` of :obj:`str`: List of selected participant IDs """ - return np.random.choice( - self.participant_ids, size=self.num_ids_to_select, replace=False - ) + + num_ids_to_select = self.get_num_ids_to_select(len(participant_ids)) + return np.random.choice(participant_ids, size=num_ids_to_select, replace=False) diff --git a/xain_fl/fl/coordinator/coordinator.py b/xain_fl/fl/coordinator/coordinator.py deleted file mode 100644 index fd68ce649..000000000 --- a/xain_fl/fl/coordinator/coordinator.py +++ /dev/null @@ -1,279 +0,0 @@ -"""Class Coordinator orchestrates federated learning over a number of participants -using a selection strategy (implemented through Controller sub-class) and an aggregation -method (implemented through Aggregator sub-class). -""" -import concurrent.futures -from pathlib import Path -from typing import Callable, Dict, List, Optional, Tuple - -import tensorflow as tf -from absl import flags - -from xain_fl.datasets import prep -from xain_fl.fl.logging.logging import create_summary_writer, write_summaries -from xain_fl.fl.participant import ModelProvider, Participant -from xain_fl.logger import get_logger -from xain_fl.types import History, Metrics, Partition, Theta - -from .aggregate import Aggregator, FederatedAveragingAgg - -FLAGS = flags.FLAGS - -logger = get_logger(__name__) - - -class Coordinator: - """Central class of federated learning.""" - - # pylint: disable-msg=too-many-arguments - # pylint: disable=too-many-instance-attributes - def __init__( - self, - controller, - model_provider: ModelProvider, - participants: List[Participant], - C: float, - E: int, - xy_val: Partition, - aggregator: Optional[Aggregator] = None, - ) -> None: - """Initializes coordinator. - - Args: - controller (Controller): Required selection strategy - model_provider (ModelProvider) - participants (List[Participant]) - C (float): Fraction of participants selected in each round - E (int): Number of epochs in each round - xy_val (Partition): Validation data partition - aggregator (Optional[Aggregator] = None): Optional aggreation method, defaults - to FederatedAveragingAgg - """ - self.controller = controller - self.model = model_provider.init_model() - self.participants = participants - self.C = C - self.E = E - self.xy_val = xy_val - self.aggregator = aggregator if aggregator else FederatedAveragingAgg() - self.epoch = 0 # Count training epochs - - # Common initialization happens implicitly: By updating the participant weights to - # match the coordinator weights ahead of every training round we achieve common - # initialization. - def fit( - self, num_rounds: int - ) -> Tuple[History, List[List[History]], List[List[Dict]], List[List[Metrics]]]: - """Performs federated learning for a given number of rounds. - - Args: - num_rounds (int): Number of rounds to run the federated learning - - Returns: - Tuple[History, List[List[History]], List[List[Dict]], List[List[Metrics]]] - """ - # Initialize history; history coordinator - hist_co: History = {"val_loss": [], "val_acc": []} - # Train rounds; training history of selected participants - hist_ps: List[List[History]] = [] - # History of optimizer configs in each round - hist_opt_configs: List[List[Dict]] = [] - # History of participant metrics in each round - hist_metrics: List[List[Metrics]] = [] - - # Defining log directory and file writer for tensorboard logging - val_log_dir: str = str( - Path(FLAGS.output_dir).joinpath("tensorboard/coordinator") - ) - summary_writer = create_summary_writer(logdir=val_log_dir) - - for r in range(num_rounds): - # Determine who participates in this round - indices = self.controller.select_ids() - msg = f"Round {r+1}/{num_rounds}: Participants {indices}" - logger.info(msg) - - # Train - histories, opt_configs, train_metrics = self.fit_round(indices, self.E) - hist_ps.append(histories) - hist_opt_configs.append(opt_configs) - hist_metrics.append(train_metrics) - - # Evaluate - val_loss, val_acc = self.evaluate(self.xy_val) - # Writing validation loss and accuracy into summary - write_summaries( - summary_writer=summary_writer, - val_acc=val_acc, - val_loss=val_loss, - train_round=r, - ) - hist_co["val_loss"].append(val_loss) - hist_co["val_acc"].append(val_acc) - - logger.info( - "TensorBoard coordinator validation logs saved in directory", - val_log_dir=val_log_dir, - ) - logger.info( - 'Detailed analysis: call "tensorboard --logdir {}" from the \ - console and open "localhost:6006" in a browser'.format( - val_log_dir - ) - ) - - return hist_co, hist_ps, hist_opt_configs, hist_metrics - - def fit_round( - self, indices: List[str], E: int - ) -> Tuple[List[History], List[Dict], List[Metrics]]: - """Performs a single round of federated learning. - - Args: - indices (List[int]): Selected indices for round. - E (int): Number of local epochs to train. - - Returns: - Tuple[List[History], List[Dict], List[Metrics]] - """ - theta = self.model.get_weights() - participants = [ - participant - for participant in self.participants - if str(participant.cid) in indices - ] - # Collect training results from the participants of this round - theta_updates, histories, opt_configs, train_metrics = self.train_local_concurrently( - theta, participants, E - ) - # Aggregate training results - theta_prime = self.aggregator.aggregate(theta_updates) - # Update own model parameters - self.model.set_weights(theta_prime) - self.epoch += E - return histories, opt_configs, train_metrics - - def train_local_sequentially( - self, theta: Theta, participants: List[Participant], E: int - ) -> Tuple[List[Tuple[Theta, int]], List[History], List[Dict], List[Metrics]]: - """Train on each participant sequentially. - - Args: - theta (Theta): Current global model parameters - participants (List[Participant]): Selected participants - E (int): Number of local training epochs - - Returns: - Tuple[List[Tuple[Theta, int]], List[History], List[Dict], List[Metrics]]: Theta - primes, local training histories, optimizer configs, training metrics - """ - theta_updates: List[Tuple[Theta, int]] = [] - histories: List[History] = [] - opt_configs: List[Dict] = [] - train_metrics: List[Metrics] = [] - for participant in participants: - # Train one round on this particular participant: - # - Push current model parameters to this participant - # - Train for a number of epochs - # - Pull updated model parameters from participant - theta_update, hist, opt_config = participant.train_round( - theta, epochs=E, epoch_base=self.epoch - ) - metrics = participant.metrics() - theta_updates.append(theta_update) - histories.append(hist) - opt_configs.append(opt_config) - train_metrics.append(metrics) - return theta_updates, histories, opt_configs, train_metrics - - def train_local_concurrently( - self, theta: Theta, participants: List[Participant], E: int - ) -> Tuple[List[Tuple[Theta, int]], List[History], List[Dict], List[Metrics]]: - """Train on each participant concurrently. - - Args: - theta (Theta): Current global model parameters - participants (List[Participant]): Selected participants - E (int): Number of local training epochs - - Returns: - Tuple[List[Tuple[Theta, int]], List[History], List[Dict], List[Metrics]]: Theta - primes, local training histories, optimizer configs, training metrics - """ - theta_updates: List[Tuple[Theta, int]] = [] - histories: List[History] = [] - opt_configs: List[Dict] = [] - train_metrics: List[Metrics] = [] - # Wait for all futures to complete - with concurrent.futures.ThreadPoolExecutor() as executor: - future_results = [ - executor.submit(_train_local, p, theta, E, self.epoch) - for p in participants - ] - concurrent.futures.wait(future_results) - for future in future_results: - theta_update, hist, opt_config, metrics = future.result() - theta_updates.append(theta_update) - histories.append(hist) - opt_configs.append(opt_config) - train_metrics.append(metrics) - return theta_updates, histories, opt_configs, train_metrics - - def evaluate(self, xy_val: Partition) -> Tuple[float, float]: - """Evaluate the global model using the provided validation data. - - Args: - xy_val (Partition) - - Returns: - Tuple[float, float]: Loss and accuracy - """ - ds_val = prep.init_ds_val(xy_val) - # Assume the validation `tf.data.Dataset` to yield exactly one batch containing - # all examples in the validation set - loss, accuracy = self.model.evaluate(ds_val, steps=1) - return float(loss), float(accuracy) - - def num_participants(self) -> int: - """Returns number of participants - - Returns: - int - """ - return len(self.participants) - - -def _train_local( - p: Participant, theta: Theta, epochs: int, epoch_base: int -) -> Tuple[Tuple[Theta, int], History, Dict, Metrics]: - theta_update, history, opt_config = p.train_round( - theta, epochs=epochs, epoch_base=epoch_base - ) - metrics = p.metrics() - return theta_update, history, opt_config, metrics - - -# TODO: legacy code, needs refactor: https://xainag.atlassian.net/browse/XP-292 -def _abs_C(C: float, num_participants: int) -> int: - return int(min(num_participants, max(1, C * num_participants))) - - -def _create_evalueate_fn( - orig_model: tf.keras.Model, xy_val: Partition -) -> Callable[[Theta], Tuple[float, float]]: - ds_val = prep.init_ds_val(xy_val) - model = tf.keras.models.clone_model(orig_model) - # FIXME refactor model compilation - model.compile( - loss=tf.keras.losses.categorical_crossentropy, - optimizer=tf.keras.optimizers.Adam(), - metrics=["accuracy"], - ) - - def fn(theta: Theta) -> Tuple[float, float]: - model.set_weights(theta) - # Assume the validation `tf.data.Dataset` to yield exactly one batch containing - # all examples in the validation set - return model.evaluate(ds_val, steps=1) - - return fn diff --git a/xain_fl/fl/coordinator/coordinator_test.py b/xain_fl/fl/coordinator/coordinator_test.py deleted file mode 100644 index 15dcd649f..000000000 --- a/xain_fl/fl/coordinator/coordinator_test.py +++ /dev/null @@ -1,51 +0,0 @@ -from .coordinator import _abs_C - - -def test_abs_C_min(): - # Prepare - num_participants = 100 - C = 0.0 - # Execute - actual = _abs_C(C, num_participants) - # Assert - assert actual == 1 - - -def test_abs_C_point_1(): - # Prepare - num_participants = 100 - C = 0.1 - # Execute - actual = _abs_C(C, num_participants) - # Assert - assert actual == 10 - - -def test_abs_C_point_5(): - # Prepare - num_participants = 100 - C = 0.5 - # Execute - actual = _abs_C(C, num_participants) - # Assert - assert actual == 50 - - -def test_abs_C_1(): - # Prepare - num_participants = 100 - C = 1.0 - # Execute - actual = _abs_C(C, num_participants) - # Assert - assert actual == 100 - - -def test_abs_C_2(): - # Prepare - num_participants = 100 - C = 2.0 - # Execute - actual = _abs_C(C, num_participants) - # Assert - assert actual == 100 diff --git a/xain_fl/fl/coordinator/evaluator.py b/xain_fl/fl/coordinator/evaluator.py deleted file mode 100644 index 2b5a22238..000000000 --- a/xain_fl/fl/coordinator/evaluator.py +++ /dev/null @@ -1,21 +0,0 @@ -from typing import Tuple - -import tensorflow as tf - -from xain_fl.datasets import prep -from xain_fl.types import Partition, Theta - - -class Evaluator: - """Evaluates the model performance on a given data partition.""" - - def __init__(self, model: tf.keras.Model, xy_val: Partition) -> None: - self.model = model - self.ds_val = prep.init_ds_val(xy_val) - - def evaluate(self, theta: Theta) -> Tuple[float, float]: - self.model.set_weights(theta) - # Assume the validation `tf.data.Dataset` to yield exactly one batch containing - # all examples in the validation set - loss, acc = self.model.evaluate(self.ds_val, steps=1) - return loss, acc diff --git a/xain_fl/fl/logging/__init__.py b/xain_fl/fl/logging/__init__.py deleted file mode 100644 index d9cd29bb9..000000000 --- a/xain_fl/fl/logging/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Provides capability to log using TensorBoard""" diff --git a/xain_fl/fl/logging/logging.py b/xain_fl/fl/logging/logging.py deleted file mode 100644 index 714d48d15..000000000 --- a/xain_fl/fl/logging/logging.py +++ /dev/null @@ -1,65 +0,0 @@ -"""Functions for logging TensorBoard summaries""" - -import tensorflow as tf -from absl import flags -from tensorflow._api.v1.compat.v1 import Summary -from tensorflow._api.v1.compat.v1.summary import FileWriter - -FLAGS = flags.FLAGS - - -def create_summary_writer(logdir: str) -> FileWriter: - """Creating a summary FileWriter. - - Creates a FileWriter that create an event file in a given directory and add summaries and - events to it. The file contents are updated asynchronously. - - Args: - logdir (str): Directory in which the tensorboard evnt log is written. - - Returns: - ~tf.summary.FileWriter: FileWriter object writing Summaries to event files. - """ - - summary_writer = FileWriter(logdir=logdir, graph=tf.compat.v1.get_default_graph()) - return summary_writer - - -def write_summaries( - summary_writer: FileWriter, val_acc: float, val_loss: float, train_round: int -) -> None: - """Adding summaries to an event file. - - Adds validation loss and accuracy as scalar values, as well as the global step value to the - event file. - - Args: - summary_writer (~tf.summary.FileWriter): FileWriter object writing Summaries to event files. - val_acc (float): Validation accuracy that should be logged to event file. - val_loss (float): Validation loss that should be logged to event file. - train_round (int): Train round, that should be logged as dependency for acc and loss. - """ - - summary_writer.add_summary( - summary=Summary( - value=[ - Summary.Value( - tag=f"coordinator_{FLAGS.task_name}/val_acc", simple_value=val_acc - ) - ] - ), - global_step=train_round, - ) - - summary_writer.add_summary( - summary=Summary( - value=[ - Summary.Value( - tag=f"coordinator_{FLAGS.task_name}/val_loss", simple_value=val_loss - ) - ] - ), - global_step=train_round, - ) - # flushing each training round to observe live training in TensorBoard dashboard - summary_writer.flush() diff --git a/xain_fl/fl/participant/__init__.py b/xain_fl/fl/participant/__init__.py deleted file mode 100644 index 1a4574329..000000000 --- a/xain_fl/fl/participant/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -"""Contains partiticpant logic which runs the local training in federated -learning. It consists of the following modules: - - - model_provider - - participant -""" -from .model_provider import ModelProvider -from .participant import Participant diff --git a/xain_fl/fl/participant/model_provider.py b/xain_fl/fl/participant/model_provider.py deleted file mode 100644 index 1449143c5..000000000 --- a/xain_fl/fl/participant/model_provider.py +++ /dev/null @@ -1,14 +0,0 @@ -"""Provides the model provider abstraction.""" -from typing import Callable - -import tensorflow as tf - - -class ModelProvider: - """Encapsulates a compiled Keras model and an optional - associated learning rate function. - """ - - def __init__(self, model_fn: Callable[[], tf.keras.Model], lr_fn_fn: Callable): - self.init_model = model_fn - self.init_lr_fn = lr_fn_fn diff --git a/xain_fl/fl/participant/participant.py b/xain_fl/fl/participant/participant.py deleted file mode 100644 index e5ec25d02..000000000 --- a/xain_fl/fl/participant/participant.py +++ /dev/null @@ -1,175 +0,0 @@ -"""Class Participant handles local training in federated learning using its own -data partition to refine the global model. -""" -from typing import Dict, List, Tuple - -import numpy as np -import tensorflow as tf - -from xain_fl.datasets import prep -from xain_fl.logger import get_logger -from xain_fl.types import History, Metrics, Partition, Theta, VolumeByClass - -from .model_provider import ModelProvider - -logger = get_logger(__name__) - - -class Participant: - # pylint: disable-msg=too-many-arguments - # pylint: disable=too-many-instance-attributes - def __init__( - self, - cid: int, - model_provider: ModelProvider, - xy_train: Partition, - xy_val: Partition, - num_classes: int, - batch_size: int, - use_lr_fn: bool = True, - ) -> None: - """Initializes the participant - - Args: - cid (int): Participant identifier - model_provider (ModelProvider) - xy_train (Partition): Training data - xy_val (Partition): Validation data - num_classes (int): Number of classes (classification) - batch_size (int) - use_lr_fn (bool = True): Optional boolean to enable learning rate function, - defaults to True - """ - assert xy_train[0].shape[0] == xy_train[1].shape[0] - assert xy_val[0].shape[0] == xy_val[1].shape[0] - self.cid = cid - self.model_provider = model_provider - self.num_classes: int = num_classes - self.batch_size: int = batch_size - self.use_lr_fn: bool = use_lr_fn - self.num_examples = xy_train[0].shape[0] - # Training set - self.xy_train = xy_train - self.steps_train: int = int(xy_train[0].shape[0] / batch_size) - # Validation set - self.xy_val = xy_val - self.steps_val: int = 1 - - def train_round( - self, theta: Theta, epochs: int, epoch_base: int - ) -> Tuple[Tuple[Theta, int], History, Dict]: - """Performs the responsibilities of a single participant in a single round - of federated learning. - - Args: - theta (Theta): Current global model - epochs (int): Number of local training epochs - epoch_base (int): Number of globally performed epochs - - Returns: - Tuple[Tuple[Theta, int], History, Dict]: Theta prime, local training history, - and optimizer configs - """ - logger.info( - "Participant: train_round START", - participant_cid=self.cid, - epoch_base=epoch_base, - ) - model = self.model_provider.init_model(epoch_base=epoch_base) # type:ignore - model.set_weights(theta) - - callbacks: List = [] - if self.use_lr_fn: - lr_fn = self.model_provider.init_lr_fn(epoch_base=epoch_base) # type:ignore - callback_lr = tf.keras.callbacks.LearningRateScheduler(lr_fn) - callbacks = [callback_lr] - - hist: History = self._fit(model, epochs, callbacks) - theta_prime = model.get_weights() - opt_config = model.optimizer.get_config() - opt_config = _convert_numpy_types(opt_config) - logger.info("Participant: train_round FINISH", participant_cid=self.cid) - return (theta_prime, self.num_examples), hist, opt_config - - def _fit(self, model: tf.keras.Model, epochs: int, callbacks: List) -> History: - ds_train = prep.init_ds_train(self.xy_train, self.num_classes, self.batch_size) - ds_val = prep.init_ds_val(self.xy_val, self.num_classes) - - callback_logging = LoggingCallback(str(self.cid), logger.info) - callbacks.append(callback_logging) - - hist = model.fit( - ds_train, - epochs=epochs, - validation_data=ds_val, - callbacks=callbacks, - shuffle=False, # Shuffling is handled via tf.data.Dataset - steps_per_epoch=self.steps_train, - validation_steps=self.steps_val, - verbose=0, - ) - return _cast_to_float(hist.history) - - def evaluate(self, theta: Theta, xy_test: Partition) -> Tuple[float, float]: - """Evaluate the local model using the provided validation data. - - Args: - theta (Theta) - xy_test (Partition) - - Returns: - Tuple[float, float]: Loss and accuracy - """ - model = self.model_provider.init_model() - model.set_weights(theta) - ds_val = prep.init_ds_val(xy_test) - # Assume the validation `tf.data.Dataset` to yield exactly one batch containing - # all examples in the validation set - loss, accuracy = model.evaluate(ds_val, steps=1, verbose=0) - return loss, accuracy - - def metrics(self) -> Metrics: - """Provides training metrics. - - Returns: - (int, VolumeByClass) - """ - vol_by_class = _xy_train_volume_by_class(self.num_classes, self.xy_train) - return (self.cid, vol_by_class) - - -def _xy_train_volume_by_class(num_classes: int, xy_train) -> VolumeByClass: - counts = [0] * num_classes - _, y = xy_train - classes, counts_actual = np.unique(y, return_counts=True) - - for i_ca, c in enumerate(classes): - # Cast explicitly to int so its later JSON serializable - # as other we will get a list of np objects of type int64 - counts[c] = int(counts_actual[i_ca]) - - return counts - - -def _cast_to_float(hist) -> History: - for key in hist: - for index, number in enumerate(hist[key]): - hist[key][index] = float(number) - return hist - - -def _convert_numpy_types(opt_config: Dict) -> Dict: - for key in opt_config: - if isinstance(opt_config[key], np.float32): - opt_config[key] = opt_config[key].item() - return opt_config - - -class LoggingCallback(tf.keras.callbacks.Callback): - def __init__(self, cid: str, print_fn): - tf.keras.callbacks.Callback.__init__(self) - self.cid = cid - self.print_fn = print_fn - - def on_epoch_end(self, epoch, logs=None): - self.print_fn(f"CID {self.cid} epoch {epoch}") diff --git a/xain_fl/fl/participant/participant_test.py b/xain_fl/fl/participant/participant_test.py deleted file mode 100644 index 8c9bd49b4..000000000 --- a/xain_fl/fl/participant/participant_test.py +++ /dev/null @@ -1,141 +0,0 @@ -import numpy as np -import pytest - -# from benchmarks.benchmark.net import model_fns # FIXME refactor -from xain_fl.datasets import load_splits - -# from .model_provider import ModelProvider # FIXME refactor -from .participant import Participant, _xy_train_volume_by_class - - -def test_Participant_x_y_shape_valid(): - # Prepare - m = None - x = np.zeros((5, 32, 32, 3), dtype=np.uint8) - y = np.zeros((5), dtype=np.uint8) - # Execute - _ = Participant(0, m, (x, y), (x, y), num_classes=10, batch_size=32) - # pass if initialization does not raise an exception - - -def test_Participant_x_y_shape_invalid(): - # Prepare - m = None - x = np.zeros((3, 32, 32, 3), dtype=np.uint8) - y = np.zeros((4), dtype=np.uint8) - # Execute & assert - try: - _ = Participant(0, m, (x, y), (x, y), num_classes=10, batch_size=32) - pytest.fail("No AssertionError raised") - except AssertionError: - pass - - -# FIXME refactor to remove dependency on benchmark code -# def test_Participant_num_examples(): -# # Prepare -# num_examples_expected = 19 -# num_classes = 10 -# model_provider = ModelProvider(model_fns["blog_cnn"], lr_fn_fn=None) -# x = np.random.randint( -# 0, high=256, size=(num_examples_expected, 28, 28, 1), dtype=np.uint8 -# ) -# y = np.random.randint( -# 0, high=num_classes, size=(num_examples_expected), dtype=np.uint8 -# ) -# participant = Participant( -# 0, -# model_provider, -# (x, y), -# (x, y), -# num_classes=num_classes, -# batch_size=16, -# use_lr_fn=False, -# ) -# weights = model_provider.init_model().get_weights() -# -# # Execute -# (_, num_examples_actual), _, _ = participant.train_round(weights, 2, 0) -# -# # Assert -# assert num_examples_actual == num_examples_expected - - -def test_Participant_get_xy_train_volume_by_class(): - # Prepare - cid_expected = 19 - num_classes = 5 - m = None - x = np.zeros((4, 32, 32, 3), dtype=np.uint8) - y = np.array([0, 1, 2, 2], dtype=np.uint8) - - y_volume_by_class_expected = [1, 1, 2, 0, 0] - - # Execute - p = Participant( - cid_expected, m, (x, y), (x, y), num_classes=num_classes, batch_size=32 - ) - - # Assert - (cid_actual, y_volume_by_class_actual) = p.metrics() - - assert cid_actual == cid_expected - assert y_volume_by_class_actual == y_volume_by_class_expected - - -@pytest.mark.parametrize( - "num_classes_total, num_classes_in_partition", [(4, 1), (7, 5), (10, 10)] -) -def test_xy_train_volume_by_class(num_classes_total, num_classes_in_partition): - # Prepare - y_train = np.arange(num_classes_in_partition, dtype=np.int8) - x_train = np.ones((y_train.size)) # not relevant; only needed to avoid type errors - xy_train = (x_train, y_train) - - # Execute - result = _xy_train_volume_by_class(num_classes=num_classes_total, xy_train=xy_train) - - # Assert - assert len(result) == num_classes_total - if num_classes_total == num_classes_in_partition: - # As each class is equal times present the set should contain only one element - assert set(result) == {1} - else: - # As each class is equal or zero times present the set should contain 1 and 0 - assert set(result) == {0, 1} - - -@pytest.mark.slow -@pytest.mark.integration -def test_xy_train_volume_by_class_with_federated_dataset(): - # Prepare - dataset_name = "fashion-mnist-100p-b1_045" - xy_partitions, _, _ = load_splits(dataset_name) - num_examples_expected = sum([x.shape[0] for x, _ in xy_partitions]) - - # We need to find out which classes are present in our dataset - # (actually we know it but making it a bit more adaptable in case we parameterize it) - all_classes = set() - - for _, y_train in xy_partitions: - classes = np.unique(y_train) - for c in classes: - all_classes.add(c) - - num_classes_total = len(all_classes) - - results = [] - - # Execute - for xy_train in xy_partitions: - _, y_train = xy_train - r = _xy_train_volume_by_class(num_classes=num_classes_total, xy_train=xy_train) - results.append(r) - - # Assert - num_examples_actual = 0 - - for r in results: - num_examples_actual += sum(r) - - assert num_examples_expected == num_examples_actual diff --git a/xain_fl/fl/types/__init__.py b/xain_fl/fl/types/__init__.py new file mode 100644 index 000000000..7525d0b1c --- /dev/null +++ b/xain_fl/fl/types/__init__.py @@ -0,0 +1,13 @@ +"""XAIN FL types""" + +from typing import Dict, List, Tuple + +from numpy import ndarray + +Theta = List[ndarray] +# TODO: (XP-241) Remove once participant was removed +History = Dict[str, List[float]] + +# TODO: (XP-241) Remove once participant was removed +VolumeByClass = List[int] +Metrics = Tuple[int, VolumeByClass] diff --git a/benchmarks/__init__.py b/xain_fl/helloproto/__init__.py similarity index 100% rename from benchmarks/__init__.py rename to xain_fl/helloproto/__init__.py diff --git a/xain_fl/cproto/numproto_client.py b/xain_fl/helloproto/numproto_client.py similarity index 57% rename from xain_fl/cproto/numproto_client.py rename to xain_fl/helloproto/numproto_client.py index 044ff7bc1..bd8c444e1 100644 --- a/xain_fl/cproto/numproto_client.py +++ b/xain_fl/helloproto/numproto_client.py @@ -1,14 +1,21 @@ +"""XAIN FL numproto client""" + import grpc import numpy as np -from numproto import ndarray_to_proto, proto_to_ndarray +from xain_proto.fl import hellonumproto_pb2, hellonumproto_pb2_grpc +from xain_proto.numproto import ndarray_to_proto, proto_to_ndarray -from xain_fl.cproto import hellonumproto_pb2, hellonumproto_pb2_grpc -from xain_fl.logger import get_logger +from xain_fl.logger import StructLogger, get_logger -logger = get_logger(__name__) +logger: StructLogger = get_logger(__name__) def run(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + with grpc.insecure_channel("localhost:50051") as channel: stub = hellonumproto_pb2_grpc.NumProtoServerStub(channel) diff --git a/xain_fl/helloproto/numproto_server.py b/xain_fl/helloproto/numproto_server.py new file mode 100644 index 000000000..5e44f7880 --- /dev/null +++ b/xain_fl/helloproto/numproto_server.py @@ -0,0 +1,63 @@ +"""XAIN FL numproto server""" + +from concurrent import futures +import time + +import grpc +from xain_proto.fl import hellonumproto_pb2, hellonumproto_pb2_grpc +from xain_proto.numproto import ndarray_to_proto, proto_to_ndarray + +from xain_fl.coordinator import _ONE_DAY_IN_SECONDS +from xain_fl.logger import StructLogger, get_logger + +logger: StructLogger = get_logger(__name__) + + +class NumProtoServer( # pylint: disable=too-few-public-methods + hellonumproto_pb2_grpc.NumProtoServerServicer +): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + def SayHelloNumProto(self, request, context): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + + Args: + request ([type]): [description] + context ([type]): [description] + + Returns: + [type]: [description] + """ + + nda = proto_to_ndarray(request.arr) + logger.info("NumProto server received", nda=nda) + + nda *= 2 + logger.info("NumProto server sent", nda=nda) + return hellonumproto_pb2.NumProtoReply(arr=ndarray_to_proto(nda)) + + +def serve(): + """[summary] + + .. todo:: Advance docstrings (https://xainag.atlassian.net/browse/XP-425) + """ + + server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) + hellonumproto_pb2_grpc.add_NumProtoServerServicer_to_server(NumProtoServer(), server) + server.add_insecure_port("[::]:50051") + server.start() + try: + while True: + time.sleep(_ONE_DAY_IN_SECONDS) + except KeyboardInterrupt: + server.stop(0) + + +if __name__ == "__main__": + serve() diff --git a/xain_fl/helpers/__init__.py b/xain_fl/helpers/__init__.py deleted file mode 100644 index 830d198d4..000000000 --- a/xain_fl/helpers/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -"""Provides small helper methods which more than one package needs -""" diff --git a/xain_fl/helpers/project.py b/xain_fl/helpers/project.py deleted file mode 100644 index 00d214656..000000000 --- a/xain_fl/helpers/project.py +++ /dev/null @@ -1,14 +0,0 @@ -import os -from pathlib import Path - -module_dir = os.path.dirname(__file__) # directory in which this module resides -root_dir = os.path.abspath(os.path.join(module_dir, "../../")) # project root dir - - -def root() -> Path: - """Get project root directory - - Returns: - Path: path object for project root directory - """ - return Path(root_dir) diff --git a/xain_fl/helpers/sha1.py b/xain_fl/helpers/sha1.py deleted file mode 100644 index 105d5cb96..000000000 --- a/xain_fl/helpers/sha1.py +++ /dev/null @@ -1,22 +0,0 @@ -import hashlib - - -def checksum(fpath: str) -> str: - """Return checksum of file a fpath - - Args: - fpath (str): absolute path to file - - Returns: - str: sha1.hexdigest() of file - """ - sha1 = hashlib.sha1() - - with open(fpath, "rb") as f: - while True: - data = f.read() - if not data: - break - sha1.update(data) - - return sha1.hexdigest() diff --git a/xain_fl/logger.py b/xain_fl/logger.py index 883a3bed6..2c475d6a7 100644 --- a/xain_fl/logger.py +++ b/xain_fl/logger.py @@ -1,11 +1,11 @@ +"""XAIN FL structured logger""" + import logging from typing import Any import structlog -StructLogger = ( - structlog._config.BoundLoggerLazyProxy # pylint: disable=protected-access -) +StructLogger = structlog._config.BoundLoggerLazyProxy # pylint: disable=protected-access def get_logger( @@ -20,15 +20,11 @@ def get_logger( """ AIMETRICS = 25 # pylint: disable=invalid-name structlog.stdlib.AIMETRICS = AIMETRICS - structlog.stdlib._NAME_TO_LEVEL[ # pylint: disable=protected-access - "aimetrics" - ] = AIMETRICS - structlog.stdlib._LEVEL_TO_NAME[ # pylint: disable=protected-access - AIMETRICS - ] = "aimetrics" + structlog.stdlib._NAME_TO_LEVEL["aimetrics"] = AIMETRICS # pylint: disable=protected-access + structlog.stdlib._LEVEL_TO_NAME[AIMETRICS] = "aimetrics" # pylint: disable=protected-access logging.addLevelName(AIMETRICS, "aimetrics") - def aimetrics(self, msg: str, *args, **kw) -> Any: # type: ignore + def aimetrics(self, msg: str, *args: Any, **kw: Any) -> Any: return self.log(AIMETRICS, msg, *args, **kw) structlog.stdlib._FixedFindCallerLogger.aimetrics = ( # pylint: disable=protected-access diff --git a/xain_fl/sdk/__init__.py b/xain_fl/sdk/__init__.py deleted file mode 100644 index 857509f71..000000000 --- a/xain_fl/sdk/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Provides xain-fl package SDK""" diff --git a/xain_fl/sdk/coordinator.py b/xain_fl/sdk/coordinator.py deleted file mode 100644 index e8c8372fe..000000000 --- a/xain_fl/sdk/coordinator.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Provides coordinator API""" - - -def start(): - """Starts a coordinator - - TODO: provide through console scripts - TODO: IMPLEMENT - """ - raise NotImplementedError diff --git a/xain_fl/sdk/coordinator_test.py b/xain_fl/sdk/coordinator_test.py deleted file mode 100644 index b510a87e0..000000000 --- a/xain_fl/sdk/coordinator_test.py +++ /dev/null @@ -1,8 +0,0 @@ -import pytest - -from . import coordinator - - -@pytest.mark.xfail -def test_start(): - coordinator.start() diff --git a/xain_fl/sdk/participant.py b/xain_fl/sdk/participant.py deleted file mode 100644 index 65bc611b3..000000000 --- a/xain_fl/sdk/participant.py +++ /dev/null @@ -1,14 +0,0 @@ -"""Provides participant API""" -from .use_case import UseCase - - -def start(coordinator_url: str, use_case: UseCase): - """Starts a participant which will connect to coordinator_url and - work on use_case - - Args: - coordinator_url (str): URL of the coordinator to connect to - use_case (UseCase): Instance of UseCase class - """ - - raise NotImplementedError diff --git a/xain_fl/sdk/participant_test.py b/xain_fl/sdk/participant_test.py deleted file mode 100644 index 97dd746c9..000000000 --- a/xain_fl/sdk/participant_test.py +++ /dev/null @@ -1,25 +0,0 @@ -import pytest - -from . import participant -from .use_case import UseCase - - -@pytest.mark.xfail -def test_start(): - class MyUseCase(UseCase): - def __init__(self, model, *args, **kwargs): - super().__init__(model, *args, **kwargs) - self.model = model - - def set_weights(self, weights): - pass - - def get_weights(self): - pass - - def train(self): - pass - - my_use_case = MyUseCase(model={}) - - participant.start(coordinator_url="http://localhost:8601", use_case=my_use_case) diff --git a/xain_fl/sdk/use_case.py b/xain_fl/sdk/use_case.py deleted file mode 100644 index c7e47a8a6..000000000 --- a/xain_fl/sdk/use_case.py +++ /dev/null @@ -1,41 +0,0 @@ -"""Provides abstract base class use_case which provides an interface to the -participant runner""" -from abc import ABC, abstractmethod -from typing import List - -from numpy import ndarray - - -class UseCase(ABC): - def __init__(self, model): - self.model = model - - @abstractmethod - def set_weights(self, weights: List[ndarray]) -> None: - """Will be called by the runner to set weights of model. The implementation - should persist the weights so that they are used in a subsequent call to - the train method. - - Args: - weights (List[ndarray]): Model parameters - """ - raise NotImplementedError() - - @abstractmethod - def get_weights(self) -> List[ndarray]: - """"Will be called by the runner after a train invocation to retrieve the - weights of the model. The implementation should return the model weights. - - Returns: - List[ndarray]: Model parameters - """ - raise NotImplementedError() - - @abstractmethod - def train(self): - """Will be called by the runner to start the training of the model. The - implementation should run the training when called and before returning - from the method persist the weights so that in a subsequent get_weights - call the correct weights are returned - """ - raise NotImplementedError() diff --git a/xain_fl/sdk/use_case_test.py b/xain_fl/sdk/use_case_test.py deleted file mode 100644 index 630ecafc9..000000000 --- a/xain_fl/sdk/use_case_test.py +++ /dev/null @@ -1,18 +0,0 @@ -from .use_case import UseCase - - -def test_UseCase(): - class MyUseCase(UseCase): - def __init__(self): - super().__init__(self) - - def set_weights(self, weights): - pass - - def get_weights(self): - pass - - def train(self): - pass - - MyUseCase() diff --git a/xain_fl/serve.py b/xain_fl/serve.py index 0dd9a0d93..dec58c941 100644 --- a/xain_fl/serve.py +++ b/xain_fl/serve.py @@ -1,20 +1,23 @@ +"""XAIN FL serving""" + +from concurrent import futures import threading import time -from concurrent import futures import grpc +from xain_proto.fl import coordinator_pb2_grpc from xain_fl.coordinator import _ONE_DAY_IN_SECONDS from xain_fl.coordinator.coordinator import Coordinator from xain_fl.coordinator.coordinator_grpc import CoordinatorGrpc from xain_fl.coordinator.heartbeat import monitor_heartbeats -from xain_fl.cproto import coordinator_pb2_grpc -from xain_fl.logger import get_logger +from xain_fl.coordinator.store import Store +from xain_fl.logger import StructLogger, get_logger -logger = get_logger(__name__) +logger: StructLogger = get_logger(__name__) -def serve(coordinator: Coordinator, host: str = "[::]", port: int = 50051) -> None: +def serve(coordinator: Coordinator, store: Store, host: str = "[::]", port: int = 50051) -> None: """Main method to start the gRPC service. This methods just creates the :class:`xain_fl.coordinator.coordinator.Coordinator`, @@ -27,7 +30,7 @@ def serve(coordinator: Coordinator, host: str = "[::]", port: int = 50051) -> No server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) coordinator_pb2_grpc.add_CoordinatorServicer_to_server( - CoordinatorGrpc(coordinator), server + CoordinatorGrpc(coordinator, store), server ) server.add_insecure_port(f"{host}:{port}") server.start() diff --git a/xain_fl/tools/exceptions.py b/xain_fl/tools/exceptions.py index 0906b0a8f..46aa7340e 100644 --- a/xain_fl/tools/exceptions.py +++ b/xain_fl/tools/exceptions.py @@ -1,3 +1,6 @@ +"""XAIN FL exceptions""" + + class DuplicatedUpdateError(Exception): """Exception raised when the same participant tries to submit multiple updates to the :class:`xain_fl.coordinator.coordinator.Coordinator` in the same :class:`~.Round` @@ -18,5 +21,5 @@ class InvalidRequestError(Exception): This can happen if the participant sends a request that is not allowed in a give Coordinator state. For instance the Coordinator will only accept - StartTraining requests during a ROUND. + StartTrainingRound requests during a ROUND. """ diff --git a/xain_fl/types/__init__.py b/xain_fl/types/__init__.py deleted file mode 100644 index 80b4ffe6f..000000000 --- a/xain_fl/types/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -from typing import Any, Dict, List, Optional, Tuple - -from numpy import ndarray - -# Returned from keras -KerasDataset = Tuple[Tuple[ndarray, ndarray], Tuple[ndarray, ndarray]] - -Partition = Tuple[ndarray, ndarray] -FederatedDataset = Tuple[List[Partition], Partition, Partition] - -FnameNDArrayTuple = Tuple[str, ndarray] - -Transition = Tuple[ndarray, Any, float, ndarray, bool] - -Theta = List[ndarray] -History = Dict[str, List[float]] - -VolumeByClass = List[int] -Metrics = Tuple[int, VolumeByClass] - -PlotValues = Tuple[str, List[float], Optional[List[int]]] -XticksLocations = List[int] -XticksLabels = List[str]